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


124

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

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

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

Ответы:


87

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


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

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.