Ответ 1
Прочитайте документацию для bufdo
, она должна делать то, что вы хотите.
Команда для обновления файла из версии на диске :e!
Как я могу сделать то же самое для всех файлов в буфере?
Фон: мне это нужно, потому что я использую git с несколькими ветвями с одним открытым vim, содержащим буфер. Когда я проверяю ветку, я хотел бы обновить vim.
Прочитайте документацию для bufdo
, она должна делать то, что вы хотите.
Команда :checkt[ime]
предназначена для этой цели.
Будет предложено перезагрузить любые буферы, которые были изменены; если вы хотите пропустить приглашение, вы можете сделать :set autoread
заранее (вы все равно получите приглашение на буферы с локальными несохраненными изменениями).
Он также избегает проблемы подсветки синтаксиса, упомянутой Стивеном Лу на принятом ответе; :bufdo
отключает подсветку синтаксиса по дизайну.
Найдено через: http://vim.1045645.n5.nabble.com/Bug-report-bufdo-e-breaking-syntax-highlighting-on-displayed-buffers-tp1209995p1209998.html
Вот что я вложил в мой .vimrc:
fun! PullAndRefresh()
set noconfirm
!git pull
bufdo e!
set confirm
endfun
nmap <leader>gr call PullAndRefresh()
От :help autoread
:
Когда обнаружен файл, который был изменен вне Vim, и он не был изменен внутри Vim, автоматически прочитайте его снова. Когда файл был удален, это не будет выполнено.
Если, как и я, вы просто хотите всегда пассивно перезагружать устаревшие, но немодифицированные буферы, тогда похоже, что он должен выполнить свою работу.
Однако конечная деталь заключается в том, когда vim отмечает устаревший буфер. Это может быть принудительно с помощью checktime
. Если у вас есть настройки фокуса, тогда мы можем запускать checktime
всякий раз, когда мы получаем фокус так:
set autoread
autocmd FocusGained * checktime
Этот ответ также содержит некоторые интересные детали.