Как работает Vim autoread?
:h autoread
говорит:
Когда обнаружен файл, который был изменен вне Vim, и он не был изменен внутри Vim, автоматически прочитайте его снова.
После размещения set autoread
в моем vimrc
, я открываю файл с помощью Vim, переключаюсь на другой редактор, меняю файл и жду, чтобы увидеть изменения в Vim. Ничего не произошло. Я должен использовать :e
для перезагрузки файла с новым контентом.
Что я пропустил? Я использую Vim 7.2 на Mac 10.5.8.
Ответы
Ответ 1
Autoread не перезагружает файл, если вы ничего не делаете
как запустить внешнюю команду (например, ls или! sh и т.д.),
vim периодически не проверяет проверки
вы можете перезагрузить файл вручную, используя :e
Подробнее в этой теме:
Нажмите здесь
Ответ 2
Я использую следующий фрагмент, который запускает autoread всякий раз, когда я переключаю буфер или снова фокусирую vim:
au FocusGained,BufEnter * :silent! !
Кроме того, имеет смысл использовать его в сочетании со следующим фрагментом, чтобы файлы всегда сохранялись при выходе из буфера или vim, избегая конфликтных ситуаций:
au FocusLost,WinLeave * :silent! w
EDIT:. Если вы хотите ускорить запись, отключив любые крючки, которые запускаются при сохранении (например, линтеры), вы можете префикс команды w
с помощью noautocmd
:
au FocusLost,WinLeave * :silent! noautocmd w
Ответ 3
По мой пост на superuser.com
Авторежим просто не работает. Используйте следующее.
http://vim.wikia.com/wiki/Have_Vim_check_automatically_if_the_file_has_changed_externally
Я получил наилучшие результаты, вызвав функцию настройки напрямую, например.
let autoreadargs={'autoread':1}
execute WatchForChanges("*",autoreadargs)
Причиной этого является то, что я хочу запустить настройку ipython/screen/vim.
Ответ 4
Вне gvim autoread не работает для меня.
Чтобы обойти это, я использую этот довольно уродливый хак.
set autoread
augroup checktime
au!
if !has("gui_running")
"silent! necessary otherwise throws errors when using command
"line window.
autocmd BufEnter * silent! checktime
autocmd CursorHold * silent! checktime
autocmd CursorHoldI * silent! checktime
"these two _may_ slow things down. Remove if they do.
autocmd CursorMoved * silent! checktime
autocmd CursorMovedI * silent! checktime
endif
augroup END
Кажется, что это связано с script irishjava, но это позволяет вам переключать это для буферов. Я просто хочу, чтобы он работал на все.
Ответ 5
Триггер при перемещении курсора
Добавьте к своему vimrc
:
au CursorHold,CursorHoldI * checktime
По умолчанию CursorHold запускается после того, как курсор остается неподвижным в течение 4 секунд и настраивается с помощью updatetime.
Триггер смены буфера
Чтобы сбрасывать autoread
при изменении буферов, добавьте в свой vimrc
:
au FocusGained,BufEnter * checktime
Триггер фокуса окна терминала
Чтобы иметь FocusGained
(см. выше), работайте в обычном vim, внутри эмулятора терминала (Xterm, tmux и т.д.) установите плагин:
vim-tmux-focus-events
В версиях tmux > 1.9 вам нужно добавить .tmux.conf
:
set -g focus-events on
Ответ 6
для меня это работает, когда я использую команду
:set autoread
Конечно, вам нужно сохранить файл в другом редакторе, прежде чем что-нибудь случится.
Ответ 7
Немного опоздал на вечеринку, но сейчас у vim есть таймеры, и вы можете сделать:
if ! exists("g:CheckUpdateStarted")
let g:CheckUpdateStarted=1
call timer_start(1,'CheckUpdate')
endif
function! CheckUpdate(timer)
silent! checktime
call timer_start(1000,'CheckUpdate')
endfunction