Jak edytować istniejący bufor w nowej karcie w vimie?


51

Załóżmy, że zacząłem vim tak:

vim foo bar

Teraz postanawiam, że chcę każdy z tych plików na osobnej karcie. Czy istnieje sposób, aby to zrobić bez wychodzenia z vima i dodawania -popcji do mojego wiersza poleceń?


Wielu z was prawdopodobnie szuka tego, tabe %co jest wspomniane w odpowiedzi liuyang1 poniżej.
— Mateusz Piotrowski

1
@MateuszPiotrowski Jak wspomniałem w tym komentarzu do tej odpowiedzi , :tabe %nie działa z buforami, które nie mają prawidłowej ścieżki do pliku. :tab sbdziała za każdym razem.
— JoL

Odpowiedzi:


30

Kiedy uruchamiasz vim w ten sposób, nie dostajesz klienta vima, edytor tekstowy używa terminala lub polecenia cmd - dwa pliki znajdują się w dwóch różnych buforach. Użyj, :lsaby wyświetlić listę buforów:

:ls
  1 %a   "foo"                 line 6
  2      "bar"             line 0

% A jest aktywnym buforem. Możesz użyć, :b2aby przełączyć na bufor 2 lub użyć, :bnaby przejść do następnego lub :bppoprzedniego. Wolę (CTRL-W v) niż podział okien w pionie, niż (CTRL-W), który dzieli się w poziomie.

Jeśli masz załadowane 2 pliki i nie masz żadnych kart (jeszcze), możesz, :tabnewi w nowym typie kart:b2

Jeśli chcesz, aby bufory zawsze były ładowane do własnych kart, sprawdź ten artykuł .


Tak, ale chcę mieć zakładki.
— innaM

Więc już zacząłeś vim w taki sposób, że masz swoje pliki w kliencie vim, a nie w powłoce cmd / terminalu?
— DaveParillo,

1
Nie jestem pewny co masz na myśli. Używam powłoki, aby uruchomić vima, jak opisano powyżej, a następnie mam działającego vima.
— innaM

Ach! Chyba nigdy tak naprawdę nie rozumiałem, że bufory nie są lokalne dla kart. Zawsze myślałem (bez większego zastanowienia), że każda karta ma własną listę buforów.
— innaM

Na moim komputerze vimuruchomię edytor w powłoce. Aby uzyskać graficzny interfejs użytkownika vim, muszę go użyć gvim. I masz rację - bufory są globalne dla aplikacji vim.
— DaveParillo,

47

Chcesz otworzyć bufor w nowej karcie?

Podziel ekran (Ctrl-W s), weź okno i Ctrl-W T


Hmm Nie do końca to, co miałem na myśli, ale na początek nieźle. Nie wiedziałem Ctrl-w Tjeszcze o tym . Oczywiście, pierwsza zakładka nadal będzie miała dwa bufory.
— innaM

Nie. Po podzieleniu ekranu na dwa okna i otwarciu jednego z nich w nowej karcie odchodzi od pierwszej karty. Nie pozostanie (przynajmniej nie na moim gvim72). Jeśli chodzi o bufory, nie są one połączone z oknami / kartami ... są bardziej jak pamięć, w której vim przechowuje zawartość pliku.
— Rook

Ach! Masz rację. Źle interpretowałem wyniki :ls.
— innaM

Również ctrl-w V dzieli okno pionowo.
— Shannon Nelson,

1
CTRL-w v to poprawne polecenie do podziału okien w pionie
— JRM

27

Możesz to zrobić, łącząc tabpolecenie z sb[uffer]poleceniem.

Najpierw musisz znać identyfikator bufora bufora, który chcesz otworzyć w nowej karcie. Możesz to sprawdzić za pomocą lspolecenia:

:ls
  1 %a   "foo"                          line 1
  2      "bar"                          line 0

Po uzyskaniu identyfikatora możesz go łatwo otworzyć w nowej karcie, używając:

:tab sb 2

sbKomenda normalnie otwiera dany bufor w nowym oknie podzielonym, ale tabkomenda powoduje, że otworzy się w nowej karcie, zamiast.

tabKomenda pozwala także określić, gdzie na liście zakładki powinna zostać utworzona nowa zakładka. Na przykład :0tab sb 2spowoduje , że nowa karta „pasek” pojawi się na początku listy zamiast po bieżącej karcie.


2
Nie potrzebujesz numeru bufora, podaj mu jednoznaczną część nazwy bufora, a VIM zajmie się resztą.
— deser

1
To była odpowiedź, której szukałem i potrzebowałem. Byłem przerażony, gdy :tab buffer part-of-namenie otworzyłem nowej karty! Ale :tab sb part-of-namedziałało jak urok. Dziękuję Ci!!!!
— Sukima

To nie jest dokładnie pytanie OP, ale dokładnie tego szukałem :)
— jackcogdill

25

Lepszym sposobem na osiągnięcie tego, o co poprosił PO, jest:

:bufdo tab split

Spowoduje to otwarcie każdego bufora na własną kartę, niezależnie od tego, ile ich jest. Jeśli używasz tak dużo, łatwo jest zrobić mapowanie w .vimrc. W połączeniu z czymś takim jak ta mała wtyczka vima, poniższe elementy otworzą każdy element z :grep(lub : Potwierdź ) we własnej zakładce:

:grep foo
:QuickFixOpenAll
:bufdo tab split

Oczywiście, uciekając się do wtyczki łatwo byłoby ją zmodyfikować, aby otworzyć zawartość listy szybkich poprawek bezpośrednio w kartach.

AKTUALIZACJA : Naprawdę muszę wykrzyczeć poniższy komentarz ggustafssona. Jest to zdecydowanie najlepsza odpowiedź z całego świata i pięknie ilustruje tendencję Vima do zachowań kompozytorskich. Sugerowana jest:

 :tab sball

Warto poszukać pomocy w Vimie dla : tab i : sball, aby zobaczyć, co się tutaj dzieje.


Podobne podejście z poprzedniej edycji dotyczy potomności :bufdo execute "tabnew %". Myślę, że nowe podejście jest nieco jaśniejsze.
— John Whitley

Jedno zastrzeżenie: jeśli bufor początkowy w vimie nie jest pusty, wydaje się, że dwukrotnie otwiera ostatni bufor. Opublikuję aktualizację, jeśli znajdę prostą poprawkę.
— John Whitley

12
:tab sballwydaje się działać lepiej.
— ggustafsson,

6

1. Otwórz dwa pliki w Vimie.

$ vim foo bar

2. Sprawdź liczbę buforów.

: ls
  1% „foo”
  2 „bar”

3. Połącz dwa polecenia: tabnewaby otworzyć nową kartę i b <buffer_number>załadować do niej żądany bufor.

: tabnew | b 2

8
Problem z krokiem 3 polega na tym, że najpierw tworzy nową kartę z pustym buforem, a następnie otwiera bufor 2, co daje dodatkowy bufor bez tytułu na liście buforów. Lepszy w użyciu:tab sb 2
— rkjnsn

1
@rkjnsn powinieneś opublikować to jako odpowiedź - najlepiej odpowiada na pytanie „jak edytować istniejący bufor w nowej karcie w vimie?”
— JonnyRaa

1
@JonnyLeeds gotowe.
— rkjnsn

4

Po prostu dodaj punkt, o którym inni nie wspominali.

  • bieżące okno do nowej karty

Jeśli masz wiele okien, <C-W>Tprzeniesie to okno do nowej karty. Jednak ten skrót dotyczy tylko „okna”, a nie „bufora”. Jeśli wolisz ten styl :splub <C-W>spowielasz bieżący bufor do jeszcze jednego okna, to <C-W>Tprzenieś go do nowej karty.

4 naciśnięcia klawiszy lub 7 klawiszy.

  • bieżący bufor do nowej karty

:tabe % aby otworzyć nową kartę dla bieżącego bufora.

7 naciśnięć klawiszy.

  • bufor do nowej karty

Jeśli używasz wtyczki CtrlP, możesz również użyć „CtrlPBuffer”, a następnie <C-t>skrótem, aby otworzyć ją za pomocą strony nowej karty. Ten styl umożliwia łatwe przełączanie na różne bufory.

Skrót „CtrlPBuffer”, 4 naciśnięcia klawiszy lub więcej.


:tabe %to jest to, czego szukałem od dłuższego czasu, dzięki!
— pevik,

Nie, :tabe %tak naprawdę nie otwiera nowej karty dla bieżącego bufora. To, co się dzieje, %zostaje rozszerzone do :tabeścieżki pliku bieżącego bufora i otwiera tę ścieżkę. Vim zobaczy, że próbujesz otworzyć plik, który już masz, i użyje ponownie bufora, który masz. Oznacza to, że nie działa to z buforami, które nie mają ścieżki pliku. Jeśli otworzysz nowy plik :newi nie zapisałeś go, nie możesz umieścić go na nowej karcie. Prawdziwa komenda potrzebne jest co rkjnsn umieścić w swojej odpowiedzi: :tab sb %albo krócej::tab sb
— JoL
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.