Обновить все файлы в буфере с диска в vim

Команда для обновления файла из версии на диске :e!

Как я могу сделать то же самое для всех файлов в буфере?

Фон: мне это нужно, потому что я использую git с несколькими ветвями с одним открытым vim, содержащим буфер. Когда я проверяю ветку, я хотел бы обновить vim.

Ответ 1

Прочитайте документацию для bufdo, она должна делать то, что вы хотите.

Ответ 2

Команда :checkt[ime] предназначена для этой цели.

Будет предложено перезагрузить любые буферы, которые были изменены; если вы хотите пропустить приглашение, вы можете сделать :set autoread заранее (вы все равно получите приглашение на буферы с локальными несохраненными изменениями).

Он также избегает проблемы подсветки синтаксиса, упомянутой Стивеном Лу на принятом ответе; :bufdo отключает подсветку синтаксиса по дизайну.

Найдено через: http://vim.1045645.n5.nabble.com/Bug-report-bufdo-e-breaking-syntax-highlighting-on-displayed-buffers-tp1209995p1209998.html

Ответ 3

Вот что я вложил в мой .vimrc:

fun! PullAndRefresh()
  set noconfirm
  !git pull
  bufdo e!
  set confirm
endfun

nmap <leader>gr call PullAndRefresh()

Ответ 4

От :help autoread:

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

Если, как и я, вы просто хотите всегда пассивно перезагружать устаревшие, но немодифицированные буферы, тогда похоже, что он должен выполнить свою работу.

Однако конечная деталь заключается в том, когда vim отмечает устаревший буфер. Это может быть принудительно с помощью checktime. Если у вас есть настройки фокуса, тогда мы можем запускать checktime всякий раз, когда мы получаем фокус так:

set autoread
autocmd FocusGained * checktime

Этот ответ также содержит некоторые интересные детали.