У мене виникла проблема з переглядом вмісту файлу, оновленням файлу зовні, відображенням зміненого файлу та можливістю редагувати його за потреби. Я вирішив це за допомогою параметрів сервера / віддаленого командного рядка Vim, натхненних цією відповіддю .
За допомогою наступних команд файл можна перезавантажити за допомогою зовнішньої команди. Спочатку відкрийте спірний файл із Vim, запускаючи примірник сервера.
vim --servername JABBERWOCKY /tmp/alice.log
Припустимо, що файл змінено зовні, наприклад, a echo "Curiouser and curiouser" >> /tmp/alice.log
. У разі необхідності надішліть команду серверу, щоб перезавантажити файл. Ця команда швидко закінчиться і не породить нового редактора.
vim --servername JABBERWOCKY --remote-send ":e<CR>"
Якщо відкритий файл було змінено у Vim та зовні, під час перезавантаження виник конфлікт (з’явиться попереджувальне повідомлення). У такому випадку потрібно прийняти рішення: залиште це за допомогою і збережіть зміни у Vim, або відмовтесь від локальних змін та змусити перезавантажити .
Команда, описана --remote-send
вище, вимагає перезавантажити вручну. Однак, ця команда може бути прив'язана до простого циклу, використовуючи Bash's for
/ while
або використовуючи хакі-однолінійку в Linux / Unix:
watch -n 1 'vim --servername JABBERWOCKY --remote-send ":e<CR>"'
Хоча не перевірено, я впевнений, що щось подібне може бути реалізовано і в PowerShell.
У Linux / Unix підхід, керований подіями, може бути реалізований, прослуховуючи події файлової системи, використовуючи, наприклад, бібліотеку inotify , якщо ви не використовуєте занадто божевільні файлові системи. Особисто мені подобається багато використовувати інструмент entr , який, здається, входить до основних дистрибутивів Linux. Тоді я отримую:
echo /tmp/alice.log | entr vim --servername JABBERWOCKY --remote-send ":e<CR>"
" Compare buffer with saved version
nnoremap gd :DiffSaved<CR>