当前位置:  开发笔记 > 开发工具 > 正文

检测文件更改,提供重新加载文件

如何解决《检测文件更改,提供重新加载文件》经验,为你挑选了5个好方法。

我通常使用gVim进行编辑,但有时在远程连接到我的机器时使用vim.

当我在gVim中打开一个文件并且它已从外部更改时(例如来自存储库的新更新),gVim提供重新加载它.

但是当Vim发生这样的事情时,在你尝试保存文件之前它什么都不做.它只是警告您文件已更改,但不提供重新加载它.

有一个设置让Vim的行为与gVim相匹配吗?



1> 小智..:

如果要打开更新的文件使用

:e

它应该重新加载打开的文件.



2> Brian Carper..:

正如ashcatch所说,该:checktime命令将检查磁盘上的更改并提示您重新加载.因此将Vim设置为checktime在某个事件后自动运行.使用哪个事件取决于您.一种可能性是使用CursorHold,在您移动光标然后让它静止updatetime几毫秒后触发.(默认4秒.)

:au CursorHold * checktime

您也可以将其设置为WinEnterBufWinEnter每次在缓冲区/窗口之间切换时都会更改.如果你真的是偏执狂,你可以设置它,CursorMoved所以它每次移动光标时检查磁盘上的文件,但这可能是过度的,可能会滞后一点.

:h checktime,:h updatetime,:h autocmd-events-abc.


我很难读取vim帮助...我不确定为什么它只是因为某种原因麻木了.

3> Matt Simmons..:

这是使用名为FileChangedShell的auto命令完成的.我太新了,不能发布链接,但你最好的选择是阅读vim文档的autocmd部分(谷歌为此)

但要点是在你的vimrc中设置类似下面一行的内容

:au FileChangedShell * echo "Warning: File changed on disk"


不幸的是,虽然没有.

4> DBedrenko..:

改进Carper的答案:

" Run checktime in buffers, but avoiding the "Command Line" (q:) window
au CursorHold * if getcmdwintype() == '' | checktime | endif

如果您尝试使用"命令行"(q :)缓冲区,如果没有此检查,Vim将会出现错误,因为此缓冲区不支持该:checktime命令.感谢#vim上的kdlv.



5> ashcatch..:

您可以手动触发检查:checktime.gvim每次重新获得焦点时都会这样做,因此通常不需要进行手动检查.

我不知道是否有不同的方法(比如在某个时间间隔内自动检查).


没错,gvim做到了,但不是vim
推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有