Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
tankb52 opened this issue Dec 19, 2021 · 6 comments

Comments

@tankb52
Copy link

tankb52 commented Dec 19, 2021

系统是 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 文件是一样的内容,但未必每个用户都像我这样的。

@skywind3000
Copy link
Owner

skywind3000 commented Dec 19, 2021

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

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

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

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

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

errorformat=

清空 errorformat 再试试。

@skywind3000
Copy link
Owner

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

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

@skywind3000
Copy link
Owner

最后是三个窗口的问题,是因为你编译 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

@tankb52
Copy link
Author

tankb52 commented Dec 20, 2021

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

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

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

@tankb52
Copy link
Author

tankb52 commented Dec 20, 2021

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

@skywind3000
Copy link
Owner

skywind3000 commented Dec 20, 2021

你把 F9 编译设置成

output=quickfix

就不会切换焦点了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants