Vim 是否有办法查看以前的“输出”:!g++;%&引用;不重新运行?

Vim 是否有办法查看以前的“输出”:!g++;%&引用;不重新运行?,vim,Vim,编码时,我喜欢通过运行:!来检查代码!g++%。我将命令映射到。有时编译需要一段时间,我希望看到错误而不必花费时间重新编译。此外,有时我想将新输出与前一个输出进行比较 有没有办法查看:!…以前的输出?如果您已使用makeprg配置了g++,则可以使用:copen重新打开:make命令中的最后一个错误列表 set makeprg=g++\ % 然后,要编译,使用 :make 编译完成后,任何错误都将在quickfix窗口中列出,该窗口可(假设errorformat配置正确)用于跳转到发生错误的

编码时,我喜欢通过运行
:!来检查代码!g++%
。我将命令映射到
。有时编译需要一段时间,我希望看到错误而不必花费时间重新编译。此外,有时我想将新输出与前一个输出进行比较


有没有办法查看
:!…以前的输出

如果您已使用
makeprg
配置了
g++
,则可以使用
:copen
重新打开
:make
命令中的最后一个错误列表

set makeprg=g++\ %
然后,要编译,使用

:make
编译完成后,任何错误都将在quickfix窗口中列出,该窗口可(假设
errorformat
配置正确)用于跳转到发生错误的行。对于C/C++,这通常是现成的

如果关闭“快速修复”窗口,请使用

:copen

查看
:help quickfix
:help makeprg
,了解有关其工作原理的详细信息。

如果从终端使用Vim,只需使用Ctrl+z暂停Vim即可


这将把您送回您的终端。您应该看到刚才通过
运行的命令:。要返回vim,请发出
fg
。注意:这可能因您的shell而异。

:sh
在Vim中启动一个shell。如果您在终端中使用Vim,这将切换回称为“主缓冲区”的位置,这意味着您可以在启动Vim之前查看终端的历史记录,以及任何
在Vim中运行的命令。

您可以使用Ctrl-d返回到Vim会话。

Michael给了您正确的答案:
:make
是正确的选择。旧的
:!编译命令
将被遗忘。Vi是,嗯。。。历史

现在澄清一下:您几乎不必调整
&makeprg
。默认值是要使用的值,除非:

  • 您正在使用其他内容进行编译(ant,…)
  • 您想编译一个单文件程序,而不想编写一个Makefile,并且您在mingw的gnumake安装s*cks下(gnumake的所有其他安装都允许将foo.c/cpp转换为foo(.exe),而无需编写任何Makefile)
  • 您希望使用编译目录,或者使用无法通过$CXXFLAGS、$LDFLAGS、$CFLAGS等注入的内容

使用
:colder
:cnewer
在快速修复列表中移动。有关更多信息,请参见
:h快速修复错误列表
。这是一个很好的潜在解决方案;然而,我已经在使用make来编译整个程序。如果没有其他方法,我将不得不绑定在total make和g++之间交换makeprg。使用:make绝对是最好的解决方案,因为它具有快速修复功能。如果make需要很长时间,而您只更改了一个文件,那么您可以更改Makefile。您不想更改
&makeprg
。默认值是正确的,即使对于作为编译器的g++来说也是如此。@kirill_igum以最粗俗、最不值得称赞的方式,这实际上可以在裸g++和make之间切换
makeprg
:map:set-makeprg=g++\%:make:set-makeprg=make
这可以通过保存
makeprg
的当前值来改进,如果它不仅仅是
make
。基本上,我想保留两个选项:make-everything和g++当前文件(%)我还没有把它包括在总制作中。然而,现在我想,仅仅包含它并不是那么糟糕(在cmake中很容易)。然而,在某些情况下,我可能不想更改makefile。但是我认为主要的问题是通过改变makefile来解决的。感谢我这样做的方式是:一个目录专门用于测试,我只编译当前文件(到可执行文件中),一组目录用于当前项目。在tests目录中,我没有Makefile。在项目目录中,我有makefile、cmakefiles或sconfiles,或者项目使用的任何东西。