Vim - zapisz i zamknij bufor jednym poleceniem

25

Mam kilka plików tekstowych w katalogu i wiem, że będę musiał edytować każdy z nich indywidualnie.

Zaczynam od linii komend z

vim *.txt

który otwiera pliki jako osobne bufory w vimie i pozwala mi patrzeć na pierwszy. Edytuję go - następnie używam „: w”, aby go zapisać, i „: bd”, aby zamknąć bufor i przejść do następnego.

To „: w: bd” do zapisywania i zamykania bufora wydaje mi się długie i podejrzewam, że istnieje bardziej vimowy sposób ninja - jaki jest zalecany sposób zapisywania i zamykania bufora, nad którym pracujesz za jednym zamachem?

Joe
źródło
Moim zalecanym sposobem byłoby po prostu przejście do :nextbufora i zapisanie / zamknięcie wszystkiego po zakończeniu zadania :wqa. To zakłada, że ​​masz :set hiddenw sobie ~/.vimrc.
romainl

Odpowiedzi:

22

Przekazując pliki do Vima w wierszu poleceń, są one nie tylko otwierane w buforach, ale także wypełniają listę argumentów . Dlatego możesz używać poleceń takich jak :nexti :firstdo poruszania się po nich (i :argdodo przetwarzania wsadowego, co może być sprytną sztuczką). Polecenie, które polecam dla twojego pytania to :wnext(krótki formularz :wn), który :writejest bieżącym buforem, a następnie przechodzi do tego :next.

Nie musisz jawnie :bdeletebuforować, zwłaszcza gdy uruchamiasz Vima z wiersza poleceń z zestawem plików, a następnie kończysz go, gdy skończysz. (Jedynymi wyjątkami, jakie mogę wymyślić, jest zwolnienie dużego pliku w celu zaoszczędzenia pamięci systemowej lub ponowne użycie jednej instancji GVIM do wielu różnych edycji).

Jeśli jednak naprawdę tego chcesz, po prostu zdefiniuj niestandardowe polecenie, np

:command Wd write|bdelete
Ingo Karkat
źródło
5
Wspominałeś dwie metody osiągnięcia co OP wymagane, ale drugi nie jest oczywista: :w|bd.
Jonno
-> Ma to tę zaletę, że odpowiada podejściu stosowanemu przez PO, chociaż zgodziłbym się, :nextże w niektórych przypadkach ma to większy sens.
Jonno
4

Chociaż zgadzam się, że nie musisz usuwać otwartych buforów, których obecnie nie używasz, lubię je usuwać, ponieważ mam włączoną linię tab vim-Airlines , która pokazuje wszystkie otwarte bufory przez cały czas u góry okno. Mam w swoim .vimrc:

nnoremap qq :w\|bd<cr>

qq zapisuje i zamyka bieżący bufor, ale także miesza się z funkcją vim „nagrywaj makro” (z którą jestem w porządku).

apostl3pol
źródło
2
Wbudowana ZZmyśl przychodzi na myśl, ale kończy się to całkowitym zapisaniem i zamknięciem Vima, a nie tylko usunięciem bufora. Małe litery zzmogą być ciekawym alternatywnym mapowaniem dla każdego, kto uważa makra za bardziej wartościowe niż wyśrodkowanie widoku na bieżącej linii kursora.
8bittree,
1
Niedawno zmieniłem to na Q, po uświadomieniu sobie, jak cenne może być nagranie w Vimie.
apostl3pol