Подтвердить что ты не робот

Обнаружение изменения файла, предложение перезагрузить файл

Я обычно использую gVim для редактирования, но иногда я использую vim при удаленном подключении к моей машине.

Когда у меня есть файл, открытый в gVim, и он изменился извне (например, новые обновления из репозитория), gVim предлагает перезагрузить его.

Однако, когда такое происходит с Vim, оно ничего не делает, пока вы не попытаетесь сохранить файл. Он просто предупреждает вас об изменении файла, но не предлагает его перезагрузить.

Есть ли настройка, чтобы поведение Vim соответствовало gVim?

4b9b3361

Ответ 1

Это делается с помощью автоматической команды FileChangedShell. Я слишком новичок в публикации ссылок, но лучше всего будет прочитать часть autocmd документации vim (Google для этого)

но суть заключается в том, чтобы установить что-то вроде следующей строки в вашем vimrc

:au FileChangedShell * echo "Warning: File changed on disk"

Ответ 2

Если вы хотите открыть обновленный файл, используйте

:e

Он должен перезагрузить открытый файл.

Ответ 3

Как ashcatch, команда :checktime проверит наличие изменений на диске и предложит перезагрузить. Поэтому установите Vim для запуска checktime автоматически после некоторого события. Какое событие использовать зависит от вас. Одна из возможностей - использовать CursorHold, который запускается после перемещения курсора, а затем позволяет ему сидеть неподвижно для updatetime миллисекунд. (По умолчанию 4 секунды.)

:au CursorHold * checktime

Вы также можете установить его на WinEnter или BufWinEnter, чтобы он менялся каждый раз при переключении между буферами/окнами. Если вы действительно параноик, вы можете установить его на CursorMoved, чтобы он проверял файл на диске каждый раз, когда вы перемещаете курсор, но это, вероятно, слишком много, и может немного отстать.

См. :h checktime, :h updatetime, :h autocmd-events-abc.

Ответ 4

Вы можете вручную запустить проверку с помощью :checktime. gvim делает это каждый раз, когда он восстанавливает фокус, поэтому нет необходимости часто выполнять ручную проверку.

Я не знаю, существует ли другой подход (например, автоматическая проверка в определенный промежуток времени).

Ответ 5

Чтобы улучшить ответ Carper:

" Run checktime in buffers, but avoiding the "Command Line" (q:) window
au CursorHold * if getcmdwintype() == '' | checktime | endif

Без этой проверки Vim будет вызывать ошибки, если вы попытаетесь использовать буфер командной строки (q:), потому что этот буфер не поддерживает команду :checktime. Обнаружил это благодаря kdlv на #vim.