git pull之后vim提示文件已经改变

git pull之后vim提示文件已经改变

我的工作流程涉及编辑 中的许多文件vim,偶尔我会执行git pull --rebase,这可能会或可能不会实际更改我正在编辑的文件。但是,在进行这样的重新定基之后,vim总是会认为每个文件都已被修改,并且当我进行修改并尝试保存打开的文件时会提示我“文件已从原始文件更改,您确定要编辑它吗?”。这变得非常烦人,因为我实际上不确定文件是否已更改,以及是否可以保存我的更改(更不用说每次我尝试保存文件时都会提示此信息)。

有没有办法让vim这些修改过的文件更加智能?我更希望不使用一些大型vim/git包来做到这一点。

答案1

如果你还没有修改该文件,但它是打开的,那么你可以在 Vim 之外更新它,然后 Vim应该提示您重新加载文件,甚至(如果只有时间戳发生变化)自动为您更新。但 Vim 仅在运行外部命令时或在失去输入焦点后获得输入焦点时检查这一点(这仅在 gVim 和一些终端版本中可靠地发生)。如果您使用的是终端 Vim,那么您可能需要在适当的自动命令中手动添加对的调用,:checktime例如CursorHold,、、或其他经常触发的事件。请参阅此CursorMovedBufEnter运行自动命令的示例 :checktime以及有关该问题的一些其他答案以了解详细信息。

一旦 Vim 能够可靠地检查修改过的文件,你还可以自定义 Vim当它检测到修改的时间戳时,使用FileChangedShellautocmd 事件。此 autocmd 允许您将变量设置v:fcs_choice为“reload”、“ask”或“”(空字符串)以告诉 Vim 要做什么,如果您愿意,您可能可以做一些疯狂的事情,例如使用磁盘文件开始差异分析。Vim 可以检测并分别处理以下场景(存储在 中v:fcs_reason):

deleted     file no longer exists
conflict    file contents, mode or timestamp was
            changed and buffer is modified
changed     file contents has changed
mode        mode of file changed
time        only file timestamp changed

http://vim.wikia.com/wiki/File_no_longer_available_-_mark_buffer_modified获得使用 FileChangedShell 事件的完整示例。

相关内容