在vim中,如何在执行:make命令时自动保存缓冲区?

8
有没有办法在执行 :make 命令前自动保存缓冲区?我使用MacVim,将 make 绑定到 Command-B 上非常方便,但我无法弄清楚如何在 make 前写入缓冲区。我查看了所有的 autocmd 事件,但似乎没有一个合适的。有 QuickFixCmdPre 应该在执行 make 前被调用,但似乎无法让它工作:
~/.vimrc
function! AutoSaveOnMake ()
    if &modified
        write
    endif
endfunction

autocmd QuickFixCmdPre *.c :call AutoSaveOnMake()  
2个回答

19

Vim内置了一个设置来实现此功能:

:set autowrite
在每次执行:next、rewind、last、first、previous、stop、suspend、tag、!、make、CTRL-] 和 CTRL-^ 命令,以及当 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令将用户带到另一个文件时,如果已修改,则写入该文件的内容。

我喜欢这个。每天学习新的vim知识。 - Peter Rincker

3

为什么不直接更新Command-B映射,而是要创建一个autocmd命令呢?

nnoremap <d-b> :update<bar>make<cr>

似乎无法重新映射Command-B。例如,如果我尝试使用nnoremap <F5> :update<bar>make<cr>,它可以工作,但<d-b>不行。 - Chris
请确保将此内容放入您的.gvimrc文件中。请参阅http://superuser.com/questions/249448/macvim-re-map-command-key-combinations-like-d-f - Peter Rincker
通过将上述重新映射命令与超级用户注释组合,使其正常工作。正如您所说,它必须放在.gvimrc文件中。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接