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

124

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

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

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

odwl
источник

Ответы:

87

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

PMF
источник
33
хорошо, отлично,: bufdo e! сделаю это. Но каждый раз появляется подсказка Load (Y / N). Как мне от этого избавиться?
odwl,
21
Используйте set noconfirmперед использованием bufdoкоманды ( set confirmпосле этого для повторного использования).
pmf
22
bufdo eлюбопытно, что все буферы не выделены синтаксисом
Стивен Лу
4
@StevenLu Проверьте ответ Пола Фенни ниже.
Д.Бедренко
12
Почему люди голосуют за это? Это не только не ответ, но и направление, в котором он вас ведет, означает, что подсветка синтаксиса отключается после перезагрузки.
Дмитрий Миньковский
120

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

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

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

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

Пол Фенни
источник
19

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

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

nmap <leader>gr call PullAndRefresh()
Иван
источник
7

Откуда :help autoread:

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

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

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

set autoread
autocmd FocusGained * checktime

В этом ответе также есть некоторые интересные детали.

PHS
источник