Как я могу перезагрузить все буферы одновременно?


20

При работе над функциональной веткой gitмне часто приходится хранить свои изменения, чтобы зафиксировать исправление ошибки в основной ветке. Когда я закончу работать над изменениями, я git stash pop, который обновляет временные метки на файлах.

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

ВНИМАНИЕ: файл был изменен с момента его чтения !!!

Вы действительно хотите написать в него (да / нет)?

Я не хочу автоматически перезагружать файл каждый раз, когда он меняется на диске, только когда я git stash pop.

Прямо сейчас я вручную перезагружаю каждый буфер по отдельности ( :e). Есть ли способ сделать это в одной команде?

Ответы:


26

Смотрите, :help bufdoчто вы хотите сделать. Он выполнит команду в каждом буфере в списке буферов. Например:

:bufdo e

Вы также можете посмотреть :help noconfirmотключение диалогового окна подтверждения перед вводом bufdoкоманды

:set noconfirm

и снова включив его после bufdoкоманды.

:set confirm

1
Для силы, попробуйте: :bufdo! e.
Кенорб

и без печати сообщений на экране: беззвучно! bufdo e
Вернер

12

Вы можете сделать это с помощью :checktimeкоманды. Из документов :

:checkt[ime]        Check if any buffers were changed outside of Vim.
                    This checks and warns you if you would end up with two
                    versions of a file.

Команда спросит вас, что делать для каждого буфера, файл которого имеет измененную временную метку. Чтобы отключить это для файлов, которые не изменились, вы можете сделать так, :set autoreadчтобы vim просто перезагрузил их. ВИМ будет просить вас , если содержимое между буфером и файлом на диске изменились.

Вы можете настроить карту, как показано ниже для простоты использования:

nnoremap <F5> :checktime<CR>

Вот некоторая информация о бонусах, которая на самом деле не является частью ответа: для меня в OpenSUSE gvim (графический интерфейс GTK для vim) делает это автоматически, когда получает фокус. Я действительно не знаю, почему это происходит, и я не проверял другие системы, но я подумал, что это может быть полезно в качестве дополнения. Может быть, кто-нибудь может подтвердить?
Токоями

Это действительно полезно! Что я сделал с моей стороны, так это интегрировал эту команду как часть ярлыков переключения вкладок. то естьnnoremap tl :tabnext<CR>:checktime<CR>
cr8ivecodesmith

1
@tokoyami, функция, в которой вы находитесь, gvimможет быть связана с FocusGainedсобытием vim. Вы можете найти некоторую связанную информацию здесь - unix.stackexchange.com/a/383044/99801 .
Виктор Ярема
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.