回答:
これは私のために働いたものです
set autoread
au CursorHold * checktime
最初の行だけでは不十分でした。あなたを入れることができます.vimrc
:help timestamp
」は私がエラーになっていることを示しているようで、Vimは特定のイベントのチェックのみを実行し、そのため、autocmdはより頻繁にチェックするために必要になる場合があります。
自動読み取りが正しく機能しません。以下は私のために働く:
そのように、セットアップ関数を直接呼び出すことで、最高の結果が得られました。
let autoreadargs={'autoread':1}
execute WatchForChanges("*",autoreadargs)
この理由は、ipython / screen / vimセットアップを実行したいからです。
これを簡単にビューの拡張バージョンに変換できます。
mkdir -p ~/bin
cat <<`OUT` > ~/bin/vimviewer
#!/usr/bin/env sh
exec vim -n --cmd "source /home/bryan/.vim/.vimrc.watchforchanges | let autoreadargs={'autoread':1} | execute WatchForChanges('*',autoreadargs)" $@
`OUT`
chmod 755 ~/bin/vimviewer
vimview test.txt
これまでのところ、vim-autoreadプラグインが機能しました。
vim-autoread
vimは、ディスクに書き込まれたが、vimからの最後の書き込み以降にバッファ内で変更されていないファイルを自動的にリロードします。これにより、vimで開いたファイルを別のアプリケーションを使用して編集し、保存することができます。vimに戻ると、最後の変更以降にファイルを変更していない限り、ファイルは:eを手動で押したかのように、ディスクで行われた変更を反映するように自動的に更新されます。
j
、効果的な更新を確認するにはナビゲーションコマンド(など)を入力する必要があります。これに関する問題をここに作成しました:github.com/djoshea/vim-autoread/issues/3
この回答から(PhanHaiQuangによる回答と@flukusによるコメントを参照)
必要なときにex(whimin)からこのonelinerを実行できます(または、ログファイルが開かれたときのために、各コマンドをvimrcに入れます)。
:set autoread | au CursorHold * checktime | call feedkeys("lh")
説明:
- 自動読み取り:外部から変更されたときにファイルを読み取ります(ただし、それ自体では機能せず、内部タイマーなどはありません。vimがexのコマンドのようにアクションを実行する場合にのみファイルを読み取ります:!
- CURSORHOLD * checktime:カーソルが「updatetime」を指定した時間のために、ユーザによって動かされていない(デフォルトは4000ミリ秒です)checktimeが実行され、ファイルの外部からの変更をチェック
- コールfeedkeys(「LH」):カーソルを1回、左右に1回移動した後、何も起こりません(...つまり、CursorHoldがトリガーされ、ループがあることを意味します)
lh
カーソルが行の最後の位置にある場合、何もしませんlh
。その位置を変更します。
Vimのバージョンに応じて動作する可能性のあるプラグインがここにリストされています。
別のアプローチはchecktime
、外部プロセスからコマンドを定期的にvimに送信することです。これを行うShellJSスクリプトを次に示します(shelljs-plugin-sleep
必須、NeoVim、およびnvr
)
while (true) {
sleep(15);
var servernames = exec('nvr --serverlist').trim().split('\n');
if (!servernames.length || !servernames[0]) {
continue;
}
servernames.forEach(
(sn) => exec(`nvr -c "checktime" --servername ${sn}`) );
}