强制vim覆盖外部更改

时间:2014-02-26 08:37:39

标签: vim vi

我使用Vim 7.4(Mac OS)编辑和运行Lua脚本。我在.vimrc中映射了一个键来保存当前缓冲区并运行外部脚本。

.vimrc中的键映射:

map V :w!<CR> :!python "$HOME/tools/client/concli.py" --lua %<CR>

它工作正常但偶尔会被Xcode(触摸shell命令)“触摸”文件。然后,当我点击映射的密钥时,vim警告我文件已在外部更改,我必须确认写入它。

这很烦人,因为文件经常被触及。如何在不提示的情况下强制vim覆盖外部更改?我试过'w!'没有成功。

谢谢Laurent

4 个答案:

答案 0 :(得分:4)

确实,无法使用:w!关闭覆盖确认,而:set autoread在这种情况下也没有帮助。什么工作指示Vim在写入之前明确检查更改:

:checktime | w

答案 1 :(得分:1)

我相信

set autoread

应该这样做。它告诉Vim自动重新读取Vim外部更改的文件。

答案 2 :(得分:1)

我在邮件列表中看到了这一点。显然,如果文件在调用外部shell命令后更改了时间戳,则会调用它。

function! ProcessFileChangedShell()
    if v:fcs_reason == 'mode' || v:fcs_reason == 'time'
        let v:fcs_choice = ''
    else
        let v:fcs_choice = 'ask'
    endif
endfunction

autocmd FileChangedShell call ProcessFileChangedShell()

但它并没有一直为我开火。 (取决于我是否在更改后编辑了文件,在我的情况下是外部的。)

some more tricks on the VimTips wiki可能会有帮助。

答案 3 :(得分:0)

将其添加到您的~/.vimrc文件中:

set autoread
nnoremap <C-u> :checktime<CR>

现在,只要您希望vim重新加载外部更改,只需点击CTRL-U:)

即可