Vim - сохранить и закрыть буфер одной командой

25

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

Я начинаю с линии похвалы с

vim *.txt

который открывает файлы как отдельные буферы в vim и оставляет меня глядя на первый. Я редактирую его, затем использую «: w» для его сохранения и «: bd» для закрытия буфера и перехода к следующему.

Этот ': w: bd' для сохранения и закрытия буфера мне кажется долгим, и я подозреваю, что есть более vim-ниндзя способ сделать это - каков рекомендуемый способ сохранить и закрыть буфер, над которым вы работаете, одним махом?

Джо
источник
Мой рекомендуемый способ - просто перейти в :nextбуфер и написать / закрыть все, как только ваша задача будет закончена :wqa. Это предполагает, что у вас есть :set hiddenв вашем ~/.vimrc.
romainl

Ответы:

22

При передаче файлов в Vim из командной строки они не только открываются в буферах, но и заполняют список аргументов . Следовательно, вы можете использовать такие команды, как :nextи, :firstдля навигации по ним (и :argdoдля пакетной обработки, что может быть изящным приемом). Для вашего вопроса я рекомендую команду :wnext(краткая форма :wn), которая :writeпредставляет текущий буфер, а затем переходит к :nextодному.

Вам не нужно явно указывать :bdeleteбуфер, особенно если вы запускаете Vim из командной строки с набором файлов, а затем завершаете его, когда закончите. (Единственное исключение, о котором я могу подумать, это выгрузка огромного файла для экономии системной памяти или повторное использование одного экземпляра GVIM для многих различных правок.)

Однако, если вы действительно этого хотите, просто определите пользовательскую команду, например

:command Wd write|bdelete
Инго Каркат
источник
5
Вы упомянули два способа достижения того, что просил О.П., но второй один не очевиден: :w|bd.
Джонно
-> Преимущество этого подхода состоит в том, что он подходит к подходу, который использует OP, хотя я согласен, :nextчто в некоторых случаях он имеет больше смысла.
Джонно
4

Хотя я согласен с тем, что вам не нужно удалять открытые буферы, которые вы в данный момент не используете, мне нравится их удалять, потому что у меня включена строка вкладок vim-Airlines , которая показывает все открытые буферы все время в верхней части окна. окно. У меня есть следующее в моем .vimrc:

nnoremap qq :w\|bd<cr>

qq сохраняет и закрывает текущий буфер, но также портит функциональность «макро записи» в vim (с которой у меня все в порядке).

apostl3pol
источник
2
Вспоминается встроенный ZZмодуль, но в итоге он полностью сохраняет и выходит из Vim, а не просто удаляет буфер. Строчные буквы zzмогут быть интересным альтернативным отображением для тех, кто считает макросы более ценными, чем центрирование представления на текущей строке курсора.
8bittree
1
Я недавно изменил его Q, осознав, насколько ценной может быть запись в Vim.
apostl3pol