我经常使用受版本控制的文件,因此可以在Vim之外对它们进行更改。 Vim?有没有办法自动执行此操作?

评论

“比较缓冲区与保存的版本nnoremap gd:DiffSaved

如果您已安装vim-faq,则可以在此处获得脱机答案::h vim-faq并搜索/ reload。难记的标签是:h faq-5.8。

#1 楼

所需的命令是:e:edit的缩写)。如果使用:edit!,它将丢弃本地更改并重新加载。

也可以让vim在vimrc中使用set autoread自动执行此操作。

评论


有关自动阅读的注意事项和解决方案,请参阅此答案。

–汤姆·黑尔
17年8月1日在3:58



要对所有缓冲区执行此操作,请使用:bufdo:e或:bufdo:e!

–亚伦·H。
18年11月13日在21:50



@AaronH。谢谢你!我通常一次打开数百个缓冲区,当切换分支时,我通常只是关闭vim并重新启动以刷新带有新内容的所有缓冲区。这将是一个重要的节省时间!

– g19fanatic
18/12/13在13:42

@AaronH。第二个:是可选的::bufdo e将起作用。

– JoL
19年4月26日在1:07



nnoremap w:写\ |睡眠1000m :checktime 1s是整理工具对文件进行操作所花费的时间。如果使用默认的,请键入\ w触发操作。

–rodvlopes
20-3-27在23:28



#2 楼

在许多情况下,set autoread无法正常工作,因为此答案说明:


除非您执行类似运行外部命令的操作(例如!ls!sh等),否则自动读取不会重新加载文件


焦点事件将触发autoread,但是除非使用gvim,否则不会捕获这些事件。因此,如果在终端窗口或tmux中运行普通vim,请安装
vim-tmux-focus-events插件。

在tmux版本> 1.9上,您需要添加.tmux.conf

set -g focus-events on


为了获得更多好处,在vim内部更改缓冲区时,在vimrc中添加以下内容将触发autoread

au FocusGained,BufEnter * :checktime


评论


多年来一直困扰着我。感谢您提供彻底的解决方案! 💯😄

–内森·朗(Nathan Long)
18年8月7日在9:54

#3 楼

如果您曾经运行过Vim修改当前缓冲区的外部命令,则可能已经注意到,由于对磁盘进行了更改,它会提示您重新加载文件。您实际上可以使用:checktime命令来调用此提示。

#4 楼

改善autoread的好插件但自上次从vim写入以来,未在缓冲区中进行修改。
这使在vim中打开的文件可以使用其他应用程序进行编辑并保存。返回vim后,只要您自上次更改以来未修改过
文件,该文件就会自动更新为
以反映磁盘上所做的更改,就像您按:e
手动。


#5 楼

我遇到的问题是查看文件的内容,在外部更新文件,显示更改的文件以及可以在需要时进行编辑的选项。我受此答案启发,使用Vim服务器/远程命令行选项解决了该问题。


使用以下命令,可以通过外部命令重新加载文件。首先,在启动服务器实例时,用Vim打开有问题的文件。

通过echo "Curiouser and curiouser" >> /tmp/alice.log。必要时,向服务器实例发送命令以重新加载文件。该命令将快速完成,并且不会生成新的编辑器。消息将会出现)。对于这种情况,必须做出决定:将其保留并保留在Vim中,或者放弃本地更改并强制重新加载。但是,可以使用Bash的--remote-send / for或在Linux / Unix中使用hacker的单线命令将该命令绑定到一个简单的循环: ,我确信类似的事情也可以在PowerShell中实现。

在Linux / Unix上,事件驱动方法可以通过侦听文件系统事件来实现,例如inotify库,如果您不使用太疯狂的文件系统。我个人非常喜欢使用entr工具,该工具似乎已包含在主要的Linux发行版中。然后我得到:

vim --servername JABBERWOCKY /tmp/alice.log