Довольно часто я работаю с файлами, которые контролируются версиями, поэтому возможно внесение изменений в них вне Vim.
Какой быстрый способ перезагрузить файл, не закрывая и не открывая Vim? И есть ли способ сделать это автоматически?
file-operations
load
Кевин Браун
источник
источник
" Compare buffer with saved version
nnoremap gd :DiffSaved<CR>
:h vim-faq
и искать/reload
. Трудно запомнить тег:h faq-5.8
.Ответы:
Команда, которую вы хотите, это
:e
(сокращение от:edit
). Если вы используете:edit!
его, он отменит локальные изменения и перезагрузится.Вы также можете сделать так, чтобы vim делал это автоматически
set autoread
в вашем vimrc.источник
autoread
.:bufdo :e
или:bufdo :e!
:
является обязательным::bufdo e
будет работать так же.Во многих случаях
set autoread
не сработает, так как этот ответ объясняет:События фокуса сработают
autoread
, но они не фиксируются, если не используютсяgvim
. Так что, если обычный запуск выполняетсяvim
в окне терминала или tmux, установите плагин vim-tmux-focus-events .В версиях tmux> 1.9 вам нужно добавить
.tmux.conf
:Для большей пользы добавьте следующее к вашему
vimrc
триггеруautoread
при изменении буферов внутри vim:источник
Если вы когда-либо запускали внешнюю команду из Vim, которая изменяет текущий буфер, вы, возможно, заметили, что она предлагает вам перезагрузить файл, так как на диск были внесены изменения. Вы можете вызвать эту подсказку с помощью
:checktime
команды.источник
Хороший плагин для улучшения
autoread
https://github.com/djoshea/vim-autoreadисточник
У меня была проблема с просмотром содержимого файла, внешним обновлением файла, отображением измененного файла и возможностью его редактирования при необходимости. Я решил это с помощью параметров командной строки Vim server / remote, вдохновленных этим ответом .
С помощью следующих команд файл может быть перезагружен с помощью внешней команды. Во-первых, откройте файл с помощью Vim при запуске экземпляра сервера.
Давайте предположим, что файл был изменен извне, например, с помощью
echo "Curiouser and curiouser" >> /tmp/alice.log
. При необходимости отправьте команду экземпляру сервера для перезагрузки файла. Эта команда быстро завершится и не создаст новый редактор.Если открытый файл был изменен в Vim и внешне, при перезагрузке возникнет конфликт (появится предупреждающее сообщение). Для этого случая должно быть принято решение: оставьте это с этим и сохраните изменения в Vim, или отмените локальные изменения и выполните перезагрузку .
Команда, указанная
--remote-send
выше, требует ручной перезагрузки. Тем не менее, эта команда может быть привязана к простому циклу, используя Bashfor
/while
или используя хакерскую однострочную строку в Linux / Unix:Хотя это и не проверено, я уверен, что нечто подобное можно реализовать и в PowerShell.
В Linux / Unix подход, основанный на событиях, может быть реализован путем прослушивания событий файловой системы с использованием, например, библиотеки inotify , если вы не используете слишком сумасшедшие файловые системы. Лично мне очень нравится использовать инструмент entr , который, похоже, включен в основные дистрибутивы Linux. Тогда я получаю:
источник