Vim - збереження та закриття буфера в одній команді


23

У мене в текстовому каталозі є маса текстових файлів, і я знаю, що мені потрібно буде редагувати кожен індивідалію.

Починаю з лінії похвали з

vim *.txt

який відкриває файли як окремі буфери у vim та залишає мене дивитись на перший. Я редагую його - тоді використовую ': w', щоб зберегти його, і ': bd', щоб закрити буфер і перейти до наступного.

Це ": w: bd" для збереження та закриття буфера мені здається довго, і я підозрюю, що існує більш вигідний спосіб ніндзя зробити це - який рекомендований спосіб збереження та закриття буфера, над яким ви працюєте одним махом?


Моїм рекомендованим способом було б просто перейти до :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.
Jonno

-> Це має перевагу у відповідності до підходу, який використовує ОП, хоча, погоджуюся, :nextмає сенс в деяких випадках.
Jonno

4

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

nnoremap qq :w\|bd<cr>

qq зберігає та закриває поточний буфер, але також змішує функцію "vime makro" з функцією vim (з якою я добре).


2
Вбудований ZZприходить на думку, але це закінчує збереження та вихід із Vim повністю, а не просто видалення буфера. Нижній регістр zzможе бути цікавим альтернативним відображенням для тих, хто вважає макроси більш цінними, ніж центрування подання на поточній лінії курсору.
8bittree

1
Нещодавно я змінив це Q, зрозумівши, наскільки цінним може бути запис у Vim.
apostl3pol
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.