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

Как работает Vim autoread?

:h autoread говорит:

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

После размещения set autoread в моем vimrc, я открываю файл с помощью Vim, переключаюсь на другой редактор, меняю файл и жду, чтобы увидеть изменения в Vim. Ничего не произошло. Я должен использовать :e для перезагрузки файла с новым контентом.

Что я пропустил? Я использую Vim 7.2 на Mac 10.5.8.

4b9b3361

Ответ 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