我有一个配置文件,该文件在vim中保持打开状态,但有时会在磁盘上更改,而这些更改不会反映在终端上。是否可以在不关闭并重新打开文件的情况下刷新屏幕上的内容?如果可以,怎么办?

评论

相关:如何一次重新加载所有缓冲区?在Vim SE

总结:到目前为止,所有答案都是“投票”而不是“推”式的。也就是说,这些答案不是像其他软件的类似功能那样接收外部文件更改事件,而是依靠vim主动轮询文件更改,无论是手动操作还是由用户操作或计时器触发。最终结果是您不会立即在屏幕上看到刷新。

工作解决方案位于stackoverflow.com/a/53860166/4814774

#1 楼

您可以在不指定文件名的情况下使用:edit命令来重新加载当前文件。如果对文件进行了修改,则可以使用
:edit!强制重新加载当前文件(您将丢失
修改)。

命令:edit可以是由:e缩写。因此,可以通过:e!
完成强制编辑

评论


“!”在绊倒我,但现在很明显。

–twan163
2014年8月8日在11:41

注意:通常缩写为:e!。

–StéphaneChazelas
2014年8月8日在12:07

@StephaneChazelas:是的,没错:) @ twan163:而不是:edit和:edit!您可以使用:e和:e!分别。

– Thushi
2014年8月8日在12:08

丢失修改,是和否。至关重要的是,您仍然可以撤消:e!。

– Gerrit
2015年9月10日在9:22

另外,如果要重新加载所有缓冲区,请运行::bufdo e

–pkout
16年11月4日在21:43

#2 楼

除了使用:edit手动刷新文件之外,您还可以放入~/.vimrc

:set autoread


以使Vim自动刷新未由Vim编辑的任何文件。另请参阅:checktime

评论


买方要当心-如果您正在使用新代码和git pull,请注意,您可能会无意间在屏幕上丢失未保存的更改。

– 4Z4T4R
16年6月16日在17:36

@toszter不,Vim只会刷新未更改的缓冲区。如果发生更改,仍然会有一个查询:保留还是加载?

– Ingo Karkat
16年6月17日在7:28

N.B.自动读取并不能完全自动工作。您要么必须使用gvim,要么运行外部命令。

– Sparhawk
16-09-30在1:37

那些在tmux内部使用vim的用户可以通过使用github.com/tmux-plugins/vim-tmux-focus-events获得焦点事件。否则,除非您以某种方式调用:checktime,否则自动读取将无法在终端中提供帮助

–卡尔·巴特尔(Karl Bartel)
17年1月3日,15:50



光标停止移动后的X秒,可以自动触发自动读取,请参见此答案。

–汤姆·黑尔
17年8月1日在6:16

#3 楼

TL; DR

跳到Wrap-up标题以添加vimrc线可以使您的生活更美好。 />

检查是否在Vim之外更改了任何缓冲区。
这将检查并警告您是否最终会使用文件的两个
版本。


自动

要自动加载更改,请添加您的:checktime

vimrc


检测到文件已在Vim外部进行了更改,并且
未在Vim内部进行过更改,请再次自动读取。
删除文件后,此操作不会完成。


这个答案增加了一个警告:


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


继续阅读以获取解决方案。

当光标停止移动时触发

添加到您的!sh中:

au CursorHold,CursorHoldI * checktime


默认情况下,光标保持静止4秒钟后会触发CursorHold,并可通过updatetime对其进行配置。

在缓冲区更改或终端焦点触发/>
将以下内容添加到您的vimrc中,以便在vim内更改缓冲区时触发vimrc
要使autoread(见上文)在普通的vim中工作,请在终端仿真器(Xterm,tmux等)内部安装插件:
vim-tmux-focus-events

在1.9以上的tmux版本上,您需要添加FocusGained

au FocusGained,BufEnter * :checktime


总结

.tmux.conf触发器也可能出现的通知。

这是我的autoread行,用于实现上述所有功能:

set -g focus-events on



感谢ErichBSchulz将我指向右边请使用vimrc进行操作。

感谢此答案解决了cmdwin问题。

评论


优秀的帖子!感觉像其中之一应该是默认行为

–JonnyRaa
17年11月13日在10:30

谢谢你的主意!对于那些想知道命令行窗口(:h cmdwin)中的错误的人:模式检查还不够,请参阅vi.stackexchange.com/q/14315/6891。

–HalilÖzgür
1月16日6:52

@HalilÖzgür谢谢!我已经更新了我的答案以涵盖该案例(以及其他案例)。

–汤姆·黑尔
1月17日8:54

谢谢!这个答案是惊人的

– Troropio
3月24日16:36

感谢您的回答。如何调整它以刷新所有当前打开的缓冲区? (:buffdo e)

–安东·科瓦尔(Anton Koval)
7月9日17:31