在另一个编辑器中,我非常习惯这个工作流程:
MdIconModule
或make
或perl -cw script.pl
或rake cucumber
或rubocop -D -R
)./my_fancy_build_script.sh
)(即,没有必要事先告诉编辑器输出来自file:number
,gcc
或其他任何工具)。 到目前为止一切顺利。
perl
有vim
。它似乎基本上做我想要的。我没有找到如何执行第1步。我知道使用quickfix
来运行make,或者如何使用Perl插件来运行Perl脚本,或:make
等。我没有找到运行任何旧shell命令的通用命令,而没有使用特定于语言的插件。如果我使用通常的:grep
命令,则输出是a)在按键后消失,b)不可用于!
。
是否有类似于我在其他编辑器中使用的内容?我如何在quickfix
中完成?
编辑:我尝试了vi
然后:set makeprg='$COMMAND'
,但仅当:make
不包含空格时才有效。
我不想手动将命令的输出重定向到某个文件,并使用$COMMAND
打开该文件,如vim -q file
文档中所示。
答案 0 :(得分:2)
Vi没有“quickfix”功能。
如果用“Vi”表示“Vim”,是的,quickfix窗口几乎完全适合第2,3,4,5点。
- 编辑器在子进程中运行命令,输出在编辑器窗口中滚动。使用大量(静态)静态正则表来解析错误位置(文件:数字)(即,没有必要事先告诉编辑器输出来自gcc,perl或其他任何工具)。
醇>
要编译或运行语法检查程序,您需要使用:make
并在每个文件类型的基础上设置makeprg
选项(以及可能errorformat
):
:set makeprg=foo\ --bar\ -baz
:make
makeprg
和errorformat
通常由您的文件类型的ftplugin或:compiler
命令设置。
对于grepping,如果要使用grep替代方法,则需要使用:grep
命令并可能设置grepprg
和grepformat
选项:
:grep foo **/*.c
除了grep,编译器和语法检查程序之外,您可以使用:cexpr
和:cfile
命令填充quickfix列表(和窗口),这些命令与我认为的“通用”quickfix命令最接近的:
:cexpr system("foo")
- 在编译期间(和之后),输出将一直保持到关闭该缓冲区为止。
醇>
是的,这就是quickfix窗口的工作原理。
- 我可以按另一个组合键跳转到下一个(或上一个)错误位置。
醇>
:cn
:cp
:cc5
如果需要,您可以创建自定义映射。
- 我可以在那个缓冲区中手动导航(像往常一样),当我按下Enter时,我就会登陆错误位置。
醇>
是的,这就是你使用quickfix窗口的方式。
quickfix窗口不会自动打开,但您可以使用:cnext
,:cprevious
,:cfirst
,:clast
和其他命令跳转到列表中的错误:
:cn
:cn
:cp
要打开quickfix窗口,请使用:cwindow
命令:
:cwindow
如果您希望在列出错误/位置时自动打开quickfix窗口,请将这些行添加到vimrc
:
augroup autoqf
autocmd!
" automatically open the location/quickfix window after :make, :grep,
" :lvimgrep and friends if there are valid locations/errors
autocmd QuickFixCmdPost [^l]* cwindow
autocmd QuickFixCmdPost l* lwindow
augroup END