skywind3000 / asyncrun.vim

:rocket: Run Async Shell Commands in Vim 8.0 / NeoVim and Output to the Quickfix Window !!
https://www.vim.org/scripts/script.php?script_id=5431
MIT License
1.86k stars 111 forks source link

[BUG] Root path is not detected correctly in `terminal` buffer #188

Closed voldikss closed 4 years ago

voldikss commented 4 years ago

如果在 terminal 中执行 expand('%') ,并不会扩展成文件的全路径。

在 vim 中 执行 expand('%') 得到 !/usr/bin/zsh,在 nvim 中得到 term://.//27095:zsh

问题相关代码:

https://github.com/skywind3000/asyncrun.vim/blob/0fca49c72224395ed5f6e756687e40bb5e5ce20f/plugin/asyncrun.vim#L955

skywind3000 commented 4 years ago

terminal 本身就不是一个文件啊,取 root 取啥呢?

voldikss commented 4 years ago

emmm 也对,主要是万一有时光标在 terminal 里面,想要执行一些 tasks,会找不到项目根目录。

skywind3000 commented 4 years ago

所以asynctask在这些buffer上做了限制

voldikss commented 4 years ago

原来如此,我明白了。

skywind3000 commented 4 years ago

我修正了一下,因为 terminal 很常用,所以 fullname 判断了一下 terminal buffer,如果是的话会返回vim 的当前目录。

skywind3000 commented 4 years ago

最终解决这事情,或许要用 vim 的当前目录作为项目目录了,跟 vscode 一样。asyncrun 里面的宏 $(VIM_CWD)<cwd> 都指代当前目录。

我另外加了个 $(VIM_WORKSPACE) 或者叫 <workspace> 的宏,内容是:b:asyncrun_workspace, t:asyncrun_workspaceg:asyncrun_workspace 中的一个(按优先级读取),避免有些插件无意中修改了 vim 当前目录。

https://github.com/skywind3000/asyncrun.vim/releases/tag/2.7.2

skywind3000 commented 4 years ago

小修正,删除 $(VIM_WORKSPACE) 引起混乱的东西,任务配置也不太好写。

而会顺序读取:b:asyncrun_root, t:asyncrun_rootg:asyncrun_root 几个值,一旦发现设置过,就当作 project root.

https://github.com/skywind3000/asyncrun.vim/releases/tag/2.7.5