我的工作流程涉及编辑 中的许多文件vim
,偶尔我会执行git pull --rebase
,这可能会或可能不会实际更改我正在编辑的文件。但是,在进行这样的重新定基之后,vim
总是会认为每个文件都已被修改,并且当我进行修改并尝试保存打开的文件时会提示我“文件已从原始文件更改,您确定要编辑它吗?”。这变得非常烦人,因为我实际上不确定文件是否已更改,以及是否可以保存我的更改(更不用说每次我尝试保存文件时都会提示此信息)。
有没有办法让vim
这些修改过的文件更加智能?我更希望不使用一些大型vim
/git
包来做到这一点。
答案1
如果你还没有修改该文件,但它是打开的,那么你可以在 Vim 之外更新它,然后 Vim应该提示您重新加载文件,甚至(如果只有时间戳发生变化)自动为您更新。但 Vim 仅在运行外部命令时或在失去输入焦点后获得输入焦点时检查这一点(这仅在 gVim 和一些终端版本中可靠地发生)。如果您使用的是终端 Vim,那么您可能需要在适当的自动命令中手动添加对的调用,:checktime
例如CursorHold
,、、或其他经常触发的事件。请参阅此CursorMoved
BufEnter
运行自动命令的示例 :checktime以及有关该问题的一些其他答案以了解详细信息。
一旦 Vim 能够可靠地检查修改过的文件,你还可以自定义 Vim做当它检测到修改的时间戳时,使用FileChangedShell
autocmd 事件。此 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 事件的完整示例。