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ń?

innaM
źródło
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ł .

DaveParillo
źródło
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

Wieża
źródło
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.

rkjnsn
źródło
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.

John Whitley
źródło
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
Shamaoke
źródło
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.

liuyang1
źródło
: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