長い話を短く

長い話を短く

vimには開いている設定ファイルがありますが、時々ディスクで変更され、変更は端末に反映されません。ファイルを閉じて再開せずに画面を更新できますか?それでは、どうすればいいですか?

答え1

:editファイル名を指定せずにこのコマンドを使用して、現在のファイルを再ロードできます。ファイルを変更した場合は、 :edit!現在のファイルを強制的に再ロードできます(修正は失われます)。

このコマンドは:editに省略できます:e。したがって、強制編集は次のように実行できます。:e!

答え2

手動更新ファイルを使用することに加えて、:edit次のものも使用できます。~/.vimrc

:set autoread

Vim が編集していないすべてのファイルを Vim が自動的に更新するようにします。また見てください:checktime

答え3

長い話を短く

あなたの人生をより良くするために追加する行をWrap-up見るには、タイトルに行きます。vimrc

手動

走る:checktime

Vimの外部でバッファが変更されていることを確認してください。 2つのバージョンのファイルが作成されたら、確認して警告します。

自動的に

変更を自動的にロードするには、次の項目を追加しますvimrc

set autoread

ファイルがVimの外部で変更されたがVimの内部で変更されていないことが検出された場合は、そのファイルを自動的に再読み込みします。ファイルが削除されると、この操作は実行されません。

この回答警告を追加します。

!ls外部コマンド(例:など!sh)を実行するなどの操作を行わない限り、自動読み取りはファイルを再ロードしません。

ソリューションを入手するには、読んでください。

カーソルが動かないと発生します。

以下に追加しますvimrc

au CursorHold,CursorHoldI * checktime

基本的に、カーソルホールドカーソルが4秒間静止してからトリガーされます。これは次の方法で構成できます。更新時間

バッファ変更または端末フォーカスによってトリガ

変更バッファに次が追加されるとvimrc発生します。autoread~へウィム:

au FocusGained,BufEnter * :checktime

一般 vim で端末ウィンドウのフォーカスをキャプチャ

通常のvimで作業するにはFocusGained(上記を参照)、ターミナルエミュレータ(Xterm、tmuxなど)にプラグインをインストールします。 vim-tmux-focus イベント

tmuxバージョン> 1.9では、以下を追加する必要があります.tmux.conf

set -g focus-events on

仕上げる

autoread通知は、次の場合でもトリガーできます。

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() !~ '\v(c|r.?|!|t)' && getcmdwintype() == '' | 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

ありがとうErichBSchulzが私に正しい方向を教えてくれました。au CursorHold

ありがとうこの回答cmdwinの問題を解決するために使用されます。

答え4

これはneovimのLuaのバージョンです:

-- 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
vim.api.nvim_create_autocmd({'FocusGained', 'BufEnter', 'CursorHold', 'CursorHoldI'}, {
  pattern = '*',
  command = "if mode() !~ '\v(c|r.?|!|t)' && getcmdwintype() == '' | checktime | endif",
})

-- Notification after file change
-- https://vi.stackexchange.com/questions/13091/autocmd-event-for-autoread
vim.api.nvim_create_autocmd({'FileChangedShellPost'}, {
  pattern = '*',
  command = "echohl WarningMsg | echo 'File changed on disk. Buffer reloaded.' | echohl None",
})

関連情報