Как работает автоматическое чтение Vim? - PullRequest
47 голосов
/ 22 марта 2010

:h autoread говорит:

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

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

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

Ответы [ 7 ]

36 голосов
/ 22 марта 2010

Авточитание не перезагружает файл, если вы не выполняете что-то вроде запуска внешней команды (например,! Ls или! Sh и т. Д.). Vim периодически не проверяет, вы можете перезагрузить файл вручную, используя :e

Подробнее в этомнить: Нажмите здесь

29 голосов
/ 06 декабря 2013

Я использую следующий фрагмент, который запускает автоматическое чтение при каждом переключении буфера или при повторной фокусировке vim:

au FocusGained,BufEnter * :silent! !

Также имеет смысл использовать его в сочетании со следующим фрагментом, чтобы файлы всегда былисохраняются при выходе из буфера или vim, избегая конфликтных ситуаций:

au FocusLost,WinLeave * :silent! w

РЕДАКТИРОВАТЬ: Если вы хотите ускорить запись, отключив все перехватчики, которые запускаются при сохранении (например,линтеры), вы можете добавить префикс w к команде noautocmd:

au FocusLost,WinLeave * :silent! noautocmd w
16 голосов
/ 23 декабря 2011

Согласно моей публикации на 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.

10 голосов
/ 09 июня 2012

Вне gvim, авточитание не работает для меня.

Чтобы обойти это, я использую этот довольно уродливый хак.

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

Похоже, это то, что делает скрипт, связанный с irishjava, но это позволяет вам переключать его для буферов Я просто хочу, чтобы это работало на все.

2 голосов
/ 01 августа 2017

Триггер, когда курсор перестает двигаться

Добавить к вашему vimrc:

au CursorHold,CursorHoldI * checktime

По умолчанию CursorHold срабатывает после того, как курсор остается неподвижным в течение 4 секунд, и настраивается с помощью updatetime .

Триггер смены буфера

Чтобы иметь триггер autoread при смене буфера, добавьте к своему vimrc:

au FocusGained,BufEnter * checktime

Триггер фокусировки окна терминала

Чтобы FocusGained (см. Выше) работал в обычном vim, внутри эмулятора терминала (Xterm, tmux и т. Д.) Установите плагин: ВИМ-tmux-фокус-события

В версиях tmux> 1.9 вам необходимо добавить .tmux.conf:

set -g focus-events on
1 голос
/ 20 декабря 2018

Немного опоздал на вечеринку, но у 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
1 голос
/ 24 августа 2010

для меня это работает, когда я использую команду

:set autoread

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...