У меня была проблема с просмотром содержимого файла, внешним обновлением файла, отображением измененного файла и возможностью его редактирования при необходимости. Я решил это с помощью параметров командной строки Vim server / remote, вдохновленных этим ответом .
С помощью следующих команд файл может быть перезагружен с помощью внешней команды. Во-первых, откройте файл с помощью Vim при запуске экземпляра сервера.
vim --servername JABBERWOCKY /tmp/alice.log
Давайте предположим, что файл был изменен извне, например, с помощью echo "Curiouser and curiouser" >> /tmp/alice.log
. При необходимости отправьте команду экземпляру сервера для перезагрузки файла. Эта команда быстро завершится и не создаст новый редактор.
vim --servername JABBERWOCKY --remote-send ":e<CR>"
Если открытый файл был изменен в Vim и внешне, при перезагрузке возникнет конфликт (появится предупреждающее сообщение). Для этого случая должно быть принято решение: оставьте это с этим и сохраните изменения в Vim, или отмените локальные изменения и выполните перезагрузку .
Команда, указанная --remote-send
выше, требует ручной перезагрузки. Тем не менее, эта команда может быть привязана к простому циклу, используя Bash 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>