Jak mogę edytować wiele plików w VIM?

166

Wiem, że mogę otworzyć wiele plików vim, wykonując coś takiego vim 2011-12*.log, ale jak mogę przełączać się między plikami i zamykać je pojedynczo? Ponadto, w jaki sposób mogę powiedzieć nazwę pliku, który edytuję?

cwd
źródło
Powiązane: gvim -p limit otwartych kart?
Grzegorz Wierzowiecki

Odpowiedzi:

169

Przede wszystkim w vimie możesz wpisać :(dwukropek), a następnie pomóc help, :helpmiędzy innymi listę tematów samopomocy, w tym krótki samouczek. Na liście tematów najedź kursorem na interesujący cię temat, a następnie naciśnij ctrl]i ten temat zostanie otwarty.

Dobrym miejscem na rozpoczęcie będzie temat

|usr_07.txt|  Editing more than one file

Ok, na twoją odpowiedź.

Po uruchomieniu vima z listą plików, możesz przejść do następnego pliku, wpisując :nextlub :nw skrócie. :wnextjest skrótem od zapisu bieżących zmian, a następnie przejścia do następnego pliku.

Jest też analogiczne :previous, :wpreviousa :Next. (Zauważ, że :pjest skrótem dla :print. Skrótem dla :previousjest :prevlub :N.)

Aby zobaczyć, gdzie jesteś na liście plików, wpisz, :argsa aktualnie edytowany plik pojawi się w [](nawiasach).

Przykład:

vim foo.txt bar.txt
:args

wynik:

[foo.txt] bar.txt
bsd
źródło
24
: wn jest skrótem od: wnext.
Kowh
Możesz także: rew, aby wrócić do pierwszego pliku. : e # zamienia między 2 plikami. : n! przechodzi do następnego pliku bez zapisu. Zobacz także: ustaw autowrite.
Sasquiha
4
W odniesieniu do wielu buforów / okien / kart zobacz także StackOverflow Jak efektywnie pracować z wieloma plikami w Vimie? i Korzystanie z kart Vima, takich jak bufory .
mmoya,
1
Uważam też, że rozdział 22 „Znajdowanie pliku do edycji” jest bardzo przydatny. Rozwija się za pomocą eksploratora katalogów w celu edycji żądanych plików.
Harry Moreno,
: wn awesome one.
rammayur
54

możesz otworzyć inny plik, gdy vim jest otwarty za pomocą :tabe filenamei, aby przejść do innego wpisanego pliku :tabnlub odpowiednio :tabpdla następnego i poprzedniego.

Skróty klawiaturowe gT i gt mogą być również używane do przełączania kart, gdy nie jesteś w trybie edycji (tj. Nie jesteś w trybie wstawiania, zastępowania itp.). W niektórych systemach Ctrl+ Alt+ Page Upi Ctrl+ Alt+ Page Downrównież pozwalają na przełączanie kart, ale to nie zawsze działa (na przykład nie będzie działać w terminalu OS X „od razu po wyjęciu z pudełka”).

Możesz zobaczyć nazwę pliku na górze aplikacji vim.

Hanan N.
źródło
16
To. Otwórz także pliki na kartach za pomocą:vim -p file1 file2
Nie teraz
ZADZIWIAĆ! Nigdy wcześniej tego nie spotkałem, mimo że od lat korzystałem z vima. To zmienia wszystko .
me_i
Pamiętaj, że zakładki nie są przeznaczone do pracy z wieloma plikami. Są przeznaczone do pracy z wieloma układami . Zobacz artykuł .
patryk.beza
5
Na bok: Jeśli jesteś już w vimie i chcesz dodać kolejny plik, możesz użyć: :argadd filenamea następnie :nextdo niego. Podobnie możesz użyć :argdel filenamedo usunięcia jednego z plików w edycji.
Luv2code
36

Polecenia do przełączania między buforami:

:bf            # Go to first file.
:bl            # Go to last file
:bn            # Go to next file.
:bp            # Go to previous file.
:bw            # Close file.

:help buffer aby znaleźć więcej informacji

Aby dowiedzieć się użycie nazwy pliku Ctrl+ G, :filelub:f

Birei
źródło
1
:bwzamknij plik haha. Nie zapomnij przeczytać pomocy, w :bwktórej znajduje się informacja, że ​​powinieneś jej używać tylko wtedy, gdy wiesz, co robisz. To nie jest wielka sprawa, ale jeśli nie chcesz wymazać wszystkich znaków i informacji o pliku, lepiej wykorzystaj :bdlub :qjak normalna osoba
Dylan
1
Więcej informacji na temat, :bwjeśli jesteś ciekawy: vi.stackexchange.com/questions/2212/…
wisbucky
25

Inną opcją oprócz podanych odpowiedzi jest podzielenie okna za pomocą:

:sp
:vsp

:vspsłuży do podziału pionowego. Następnie użyj, Ctrl+W <ARROW_KEYS>aby poruszać się w oknach.

Nie teraz
źródło
4
Możesz użyć :vszamiast:vsp
Khaja Minhajuddin
2
Lub nawet tylko Ctrl+W, vdla podziału pionowego i Ctrl+W, spoziomego.
Ruslan
1
Używam CTRL+Wod lat, a ostatnio wykonuję wiele edycji VI na stronach internetowych. Za każdym razem wpisuję polecenie, nawet nie zastanawiając się i ... whammmm ... karta przeglądarki ZNIKAŁA! Ciągle zapominam. Naprawdę muszę nauczyć się nowego skrótu.
Jeach
13
:n -> Move to next file
:N -> Move to previous file
diham
źródło
10

Podobne pytanie zadałem superużytkownikowi,

„Jak kopiować i wklejać między różnymi oknami bash i plikami otwartymi za pomocą VI?”

Odpowiedź na moje pytanie brzmiała: nie możesz, ale możesz otworzyć dwa pliki w jednym oknie bash za pomocą :splitpolecenia VIM :

  1. Otwórz plik za pomocą $ vim file1, otwórz drugi plik w VIM za pomocą :split file2polecenia.
  2. Lub użyj $ vim -o file1 file2z bash.
  3. Przełączaj między plikami - przełączaj aktywny plik - w VIM za pomocą ctrl- w ctrl- w.
  4. Przykładową operacją jest następnie skopiowanie (lub szarpnięcie) do pliku 1 yy, zmiana (3), a następnie wklejenie (lub wstawienie) pzawartości do pliku 2.
  5. Wszystko inne jest normalne, gdy którekolwiek z okien jest aktywne, dlatego :qwychodzi i :q!wymusza wyjście.

Mój bash jest czarno-biały, więc nazwa każdego ekranu jest stylizowana jako odwrócona „wybrana” linia z cytowaną tam nazwą pliku.

Woot!

Xtian
źródło
6

Uważam, że najwygodniejszą metodą edycji wielu plików jest użycie kart. Możesz otworzyć wiele plików na osobnych kartach za pomocą wiersza poleceń, tak jak poniżej:

vim -p file1.txt file2.txt

Lub jeśli masz już otwarty vim, możesz otworzyć nowy plik w nowej karcie w następujący sposób:

:tabe file2.txt

Po otwarciu kart użyj, gtaby wyświetlić następną kartę i gTaby wyświetlić poprzednią kartę.

Możesz także przejść do pierwszej karty za pomocą 1gt, drugiej karty za pomocą 2gtitp.

Możesz zamykać karty za pomocą :tabc

Na koniec możesz przenieść bieżącą kartę do nlokalizacji, w :ntabmktórej ndowolna liczba jest większa lub równa 0.

Cory Klein
źródło
6
argadd a/b c/d e/f

argadd ...doda wszystkie pliki do argumentów, a także do :ls/ :buffersi pozwoli ci je edytować.


Zobacz :h arglsiti :h argedit&:h argsd


Ponadto możesz wykonywać określone działania tylko na argsach za pomocą :argdo ...i możesz zacząć od nowa z argumentami, wykonując :argsd*.

Dylan
źródło
0

Jest na to wiele sposobów. Pierwszym, może mniej wygodnym, jest wywołanie vimz plikami, które chcesz edytować - utwórz:

vim first_file second_file ...

Wywołuje dwa pliki w dwóch buforach. Aby przełączyć się z pliku na inny, użyj :ni :N. Aby wyświetlić listę edytowanych plików, :argswykona zadanie. :help bufferpomoże ci w tym więcej.


To powinno odpowiedzieć na twoje pytanie. Ale oto więcej informacji:

Istnieje sposób na edycję plików w wygodniejszy sposób, dzieląc ekran konsoli za pomocą vima . Aby to zrobić, otwórz dwie ramki za pomocą :split( :sp) lub :vsplit( :vs) podczas używania vima . Następnie nawiguj w tych ramkach, używając kombinacji Ctrl+ W> Ctrl+ W. Można również użyć Ctrl+ W+ strzałkę lub klawisza ( H, J, Klub L) odpowiedni do następnej klatki. Po zakończeniu edytuj plik, który chcesz :e file_name. :help opening-windowpomoże ci w tym więcej.

Teraz, jeśli chcesz zobaczyć różnice między plikami, użyj -dargumentu lub wywołaj program vimdiff (jest taki sam) z odpowiednimi plikami. :help diffpomoże ci w tym więcej.

vim -d first_file second_file ...

Daj mi znać, jeśli masz jakiś problem.

aleroy
źródło
0

Lubię używać podzielonych okien - poziomych i pionowych - do edycji wielu plików.

Używam tmux do łatwiejszego zarządzania tymi oknami

https://tmux.github.io/ "Co to jest multiplekser terminali? Pozwala łatwo przełączać się między kilkoma programami w jednym terminalu, odłączać je (działają w tle) i ponownie podłączać do innego terminala. wiele więcej. Zobacz instrukcję ”.

Przykład: przeglądanie plików lub przeprowadzanie testów po prawej stronie, edycja plików testowych i źródłowych po lewej: wprowadź opis zdjęcia tutaj

Michael Durrant
źródło
0

:e #(filename) przełączać między dwoma otwartymi plikami

:p dla poprzedniego pliku

:n do następnego pliku

bala selvam
źródło
Witaj w U&L, to prawie nie dodaje niczego do innych odpowiedzi opublikowanych lata temu.
Archemar