我有一个配置文件,该文件在vim中保持打开状态,但有时会在磁盘上更改,而这些更改不会反映在终端上。是否可以在不关闭并重新打开文件的情况下刷新屏幕上的内容?如果是这样,怎么办?
我有一个配置文件,该文件在vim中保持打开状态,但有时会在磁盘上更改,而这些更改不会反映在终端上。是否可以在不关闭并重新打开文件的情况下刷新屏幕上的内容?如果是这样,怎么办?
Answers:
您可以在:edit
不指定文件名的情况下使用该命令来重新加载当前文件。如果对文件进行了修改,则可以:edit!
用来强制重新加载当前文件(您将丢失所做
的修改)。
该命令:edit
可以用缩写:e
。因此,可以通过以下方式进行强制编辑:e!
:e!
。
:edit
,并:edit!
可以使用:e
和:e!
分别。
u
可以执行:e!
。
:bufdo e
除了使用手动刷新文件外:edit
,您还可以将其放入~/.vimrc
:set autoread
使Vim自动刷新Vim尚未编辑的所有文件。另请参阅:checktime
。
git pull
要注意,您可能会无意间在屏幕上丢失未保存的更改。
:checktime
跳到Wrap-up
标题vimrc
以增加内容,以使您的生活更美好。
检查是否在Vim之外更改了任何缓冲区。这将检查并警告您是否最终将使用文件的两个版本。
要自动加载更改,请添加vimrc
:
当检测到文件在Vim外部已被更改并且在Vim内部尚未被更改时,请自动重新读取。删除文件后,不会完成此操作。
这个答案增加了一个警告:
除非您执行诸如运行外部命令(如
!ls
或!sh
等)之类的操作,否则自动读取不会重新加载文件
请继续阅读以获取解决方案。
添加到您的vimrc
:
au CursorHold,CursorHoldI * checktime
默认情况下,CursorHold在光标保持静止4秒钟后触发,并且可以通过updatetime进行配置。
在 vim 内部更改缓冲区时,向您添加以下内容以vimrc
触发:autoread
au FocusGained,BufEnter * :checktime
要FocusGained
在普通vim中工作(请参见上文),请在终端仿真器(Xterm,tmux等)中安装插件:
vim-tmux-focus-events
在tmux版本> 1.9上,您需要添加.tmux.conf
:
set -g focus-events on
这是我vimrc
实现上述所有内容的代码:
" Triger `autoread` when files changes on disk
" https://unix.stackexchange.com/questions/149209/refresh-changed-content-of-file-opened-in-vim/383044#383044
" https://vi.stackexchange.com/questions/13692/prevent-focusgained-autocmd-running-in-command-line-editing-mode
autocmd FocusGained,BufEnter,CursorHold,CursorHoldI * if mode() != 'c' | checktime | endif
" Notification after file change
" https://vi.stackexchange.com/questions/13091/autocmd-event-for-autoread
autocmd FileChangedShellPost *
\ echohl WarningMsg | echo "File changed on disk. Buffer reloaded." | echohl None