我主要使用vim作为C/C++编程的编辑器。不幸的是,我对构建过程的工作方式不太满意。我知道可以输入(或映射到一个键):make
来运行 make 过程。不过,我不喜欢这个命令的工作方式,因为它在同一个终端窗口中运行构建过程,而没有适当的突出显示。因此,我通常在第二台显示器的另一个窗口中运行 make 命令,这样我既可以正确突出显示,又可以在滚动浏览主 Vim 窗口中的源代码时查看编译器在一个窗口中显示的构建错误。这也相当乏味,因为它需要我将焦点更改到另一个窗口,然后输入 make 命令。
现在,我的问题如下:是否可以让 vim 在另一个窗口中运行 make 命令而无需更改焦点?这样,我可以将“在其他窗口中构建”命令映射到 vim 中的某个键,并且只需按一下键即可实现所有这些。
我的系统是 Manjaro Linux,使用 i3 作为 DWM。
(我不确定是否将其发布在 stackoverflow 上或这里,如果这是错误的论坛,请原谅我。)
答案1
使用命名管道:
- 在一个终端中使用 Vim 打开源代码。
- 打开您想要输出的第二个终端
make
并使用 . 创建一个新管道mkfifo mypipe
。 - 在第二个终端中,运行
watch --color -n 0.3 'cat mypipe'
以始终读取命名管道。 - 在第一个终端中,
:!script -q -c "make" mypipe > /dev/null
保存对源代码的更改后在 Vim 中运行。
我们必须script
用来欺骗程序保留彩色输出。确保您的版本watch
支持颜色。
答案2
您可以将其添加到您的~/.vimrc
:
nnoremap <Space> :vert :term make<CR><C-W><C-w>
这里我们重新映射Space按键:vert :term make<CR><C-W><C-w>
命令,这意味着:
:vert
进行垂直分割;:term
在新窗口中运行终端;make<CR>
make
在该终端中运行;<C-W><C-w>
将焦点放回原始窗口。
我希望这就是你所追求的。当然,选择您想要的键/组合(不需要Space),如果您喜欢水平分割,只需删除该:vert
位即可。