asynctasks.vim icon indicating copy to clipboard operation
asynctasks.vim copied to clipboard

如果在vim 和 neovim各放一份同样内容的tasks.ini,似乎会有问题.

Open tankb52 opened this issue 3 years ago • 6 comments

系统是 Debian Testing. vim:8.2 nvim:0.5.1

我先是在 nvim 中用 vim-plug 安装了 asynctasks.vim 和 asyncrun.vim 之后,按照 github 上的 readme 写了一份 tasks.ini ,, 放在~/.config/nvim/ 下面,并绑定了快捷键 F5 与 F9,使用内部 term + bottom, 此时工作正常。

但平常我更习惯 gvim, 于是在 gvim 中重新用 plug 安装 asynctasks.vim 和 asyncrun.vim, 然后把 tasks.ini 拷贝到 ~/.vim/ 下面。 同样绑定了快捷键 F5 与 F9, 同样是使用内部 term + bottom.

这个时候出现了两个问题。

  1. 在 Gvim 下,用 f9 编译时,打开的 term 是空白的——但目录中实际有文件生成。 此时因为焦点还在 f9 输出的 term 上,再用 f5 执行命令时,会提示错误,把焦点切回代码窗口,再执行 f5, 能正常执行。但是此时的 vim 被分成三个窗口,依次是代码、F5、F9.

这个应该和预期的结果不一样吧?

  1. 另外我排查问题时,发现执行:AsyncTasksList ,显示使用的 tasks.ini 文件是 ~/.config/nvim/ 下面的,明明我已经在 ~/.vim/ 下已经放了一份 tasks.ini, 并且插件也是重新安装的。

如果此时我把 ~/.config/nvim/ 下面的 tasks.ini 删除,gvim 才会使用 ~/.vim/ 下面的 tasks.ini 。 但把文件再拷到 ~/.config/nvim/ 下面,gvim 立刻又会去使用 nvim 目录下的 tasks.ini.

这个是自动识别的吗?虽然目前这两处的 tasks.ini 文件是一样的内容,但未必每个用户都像我这样的。

tankb52 avatar Dec 19 '21 17:12 tankb52

不管是 vim 还是 nvim,asynctasks.vim 默认会同时在两个地方查找全局配置:

~/.vim/tasks.ini
~/.config/nvim/tasks.ini

你留一份就行了,不然优先级不同又会互相覆盖。

再,F9 编译时,如果 output=quickfix,不会用 term,而是用的下方 quickfix 窗口,quickfix 匹配什么显示什么依赖于 errorformat 的设置,有一些插件会画蛇添足的设置 errorformat,屏蔽所有非错误类信息的显示,比如 vim-polyglot 之类的。 它会设置成只显示编译错误,其他信息一律隐藏。

你可以再任务配置下面加一行:

errorformat=

清空 errorformat 再试试。

skywind3000 avatar Dec 19 '21 17:12 skywind3000

至于在 quickfix 窗口 F5 没法执行的问题,你到底是要执行项目还是要执行文件?执行文件焦点当然要在你想要执行的文件上,你焦点在 quickfix 窗口上谁知道你想执行哪个文件啊?

执行项目的话,一般会用到 project root,当前文件找不到 root 的话,就会去使用 vim 的当前目录 (:pwd 返回那个),所以你在 vim 中 cd 到项目根目录,你就可以在 quickfix 窗口中也能正常取到项目 root,并完成项目执行。

skywind3000 avatar Dec 19 '21 17:12 skywind3000

最后是三个窗口的问题,是因为你编译 F9 用的是 quickfix 窗口,不是 term 窗口,但是运行时是真的在 term 窗口,

你可以设置一下:

let g:asynctasks_term_pos = 'TAB'

让运行跑到一个新的 tab 上,运行完了又自动关闭,这样就不会破坏布局了,

如果不喜欢这种运行方式,可以更新一下 asyncrun,除去上下左右和 tab 外, 目前还支持好多种运行方式,可以让你在新的 gnome-terminal 窗口里,floaterm 里,tmux 新窗口里运行你的程序。

这部分见:

https://github.com/skywind3000/asyncrun.vim#extra-runners

skywind3000 avatar Dec 19 '21 17:12 skywind3000

好的,我以后只保留 ~/.vim/tasks.ini .

但是我没有使用 quickfix 设置,tasks.ini 里面全是参考的说明文档里的内容,output=terminal. vimrc 里面也只有 let g:asynctasks_term_pos = 'bottom' ——现在改成 tab 使用了。

对于F9 之后焦点的问题,我的意思是:现在做不到自动把焦点切回代码窗口吗? 因为在 bottom 形式下,很多时候先 f9 然后 f5 是一气呵成的,现在就还要手动切一下焦点,有点不顺手。

tankb52 avatar Dec 20 '21 01:12 tankb52

另外,在tasks.ini 里面的 file-build 加一行 errorformat= 之后,好像也没有效果。

tankb52 avatar Dec 20 '21 01:12 tankb52

你把 F9 编译设置成

output=quickfix

就不会切换焦点了。

skywind3000 avatar Dec 20 '21 04:12 skywind3000