如何使vim打印提示在编译之前保存未保存的文件?

如何使vim打印提示在编译之前保存未保存的文件?,vim,Vim,在编译之前,我总是忘记使用vim build-in-compile命令:make,将所有文件保存在缓冲区中。那么,是否可以让vim打印一个关于保存文件的提示,就像我们在保存文件之前退出时所做的那样?只需创建一个简单的映射,如: nnoremap <leader>m :wa <BAR> :make<CR> nnoremap m:wa:make :wa写入所有缓冲区 :生成 |在两者之间按顺序执行命令 编辑Re: 我发现“autowrite”选项在某些方面可

在编译之前,我总是忘记使用vim build-in-compile命令
:make
,将所有文件保存在缓冲区中。那么,是否可以让vim打印一个关于保存文件的提示,就像我们在保存文件之前退出时所做的那样?

只需创建一个简单的映射,如:

nnoremap <leader>m :wa <BAR> :make<CR>
nnoremap m:wa:make
  • :wa
    写入所有缓冲区
  • :生成
  • |
    在两者之间按顺序执行命令

编辑Re:

我发现“autowrite”选项在某些方面可以解决这个问题,但我在键入next、previous和tag时也会自动写入。我正在寻找更好的解决办法

您可以使用QuickFixCmdPre:

:au QuickFixCmdPre * write
此示例将在执行make时保存文件。有关更多信息,请参阅

当然,这只有在使用vim的情况下才会起作用

:make
如果您使用其他程序,请不要使用例如
:!scons-C src
,但使用
:se makeprg=scons \-C\src
和常规
:make
触发所有

有关更灵活的自动写入,请参见:


`
自动写入
` 我只是用

:set autoread autowrite
在我的.vimrc中;这实际上是非常安全的,每当您冒着丢失缓冲区或磁盘上的更改的风险时,都会收到警告

在windows上工作时,同时在另一个程序中打开相同的文件(例如,Visual Studio或Notepad++;两者都可以配置为在更改时自动加载文件),这也非常好


最好的一点是,它也会在最小化时自动保存,因此每当您点击C-z进行最小化时,文件都会被写入(假设它在磁盘上也没有更改),当您恢复窗口(或在终端上下文中使其前景化)时,您会自动获得最新的文件内容。

我发现“自动写入”选项可以在某些方面解决此问题,但在键入
next
previous
标记时也会自动写入。我正在寻找一个更好的解决方案。有更新的答案与替代使用自动命令。(当然,您需要Vim compile和+autocmd功能)您可能需要退出管道,否则它将把
map
命令与
make
分开。通过设置这些,我发现实际上可以自动读取和写入数据。但我似乎从来没有警告过你?所以,您能否更详细地解释一下
当您有可能丢失缓冲区或磁盘上的更改时,您会收到警告?谢谢(假设
:searaw
:)1。在vim中打开文件,2。在vim 3外部编辑。在vim 4中编辑一些。最小化vim,或执行
:w
-->“警告:文件在读取后已更改!!!是否确实要写入它(y/n)?”步骤2。其实很难做到。我只是做了
sleep5;echo bye>>test.txt
在终端中,并在5秒钟之前切换回vim。否则,Vim将只检测“外部编辑”并重新加载。
:au QuickFixCmdPre*write
这就是我想要的。我很好奇,你怎么对维姆了解这么多。我只是一个vim新手,最近从eclipse迁移了。@user674199:我的秘诀是:花10年时间使用它。每年,都要阅读完整的文档(跳过那些令人厌烦的部分)。每次你拿起一大堆你错过的新的有价值的工具。哦,这很好:只需遵循所有vim问题!