Korzystanie z kart Vima, takich jak bufory

Przyjrzałem się możliwości używania tabs w Vimie (z :tabe, :tabnew, itd.) jako zamiennik mojej obecnej praktyki otwierania wielu plików w tym samym oknie w ukrytych buforach.

Chciałbym, aby każdy otwarty plik był zawsze w swojej karcie. Jednak są pewne rzeczy, które stają na drodze do tego. Jak to naprawić:

  1. Gdy polecenia takie jak gf i ^] przeskakują do lokalizacji w innym pliku, Plik otwiera się w nowym bufor w bieżącej karcie. Czy istnieje sposób, aby wszystkie tego rodzaju polecenia otwierały plik na nowej karcie lub przełączyły się na istniejącą kartę z plikiem, jeśli jest już otwarty?

  2. Przy przełączaniu buforów mogę użyć :b <part of filename><tab> i uzupełni nazwy plików w istniejących buforach. <part of filename> może być nawet środkiem nazwy pliku zamiast początku. Czy istnieje odpowiednik dla przełączania kart?

Author: Keith Pinson, 2008-09-19

10 answers

Stop, stop, stop.

Tak nie powinny być używane karty Vima. W rzeczywistości są źle nazwane. Lepszą nazwą byłoby " viewport "lub " layout", ponieważ tym jest tab-to inny układ okien wszystkich istniejących buforów.

Próba pokonania Vima w 1 tab == 1 bufor jest ćwiczeniem bezcelowym. Vim nie wie lub nie obchodzi i nie będzie go szanować na wszystkich poleceń-w szczególności, wszystko, co korzysta z bufora quickfix(:make, :grep, oraz :helpgrep są te, które przychodzą na myśl) z radością zignorują tabs i nic nie można zrobić, aby to zatrzymać.

Zamiast:

  • :set hidden
    Jeśli nie masz jeszcze tego zestawu, zrób to. To sprawia, że vim działa jak każdy inny edytor wielu plików na świecie. Możesz edytować bufory, które nie są widoczne gdzieś w oknie.
  • użycie :bn, :bp, :b #, :b name, i ctrl-6, aby przełączać się między buforami. Lubię ctrl-6 siebie (sam przełącza się na poprzednio używany bufor, lub #ctrl-6 przełącza się na numer bufora #).
  • użyj :ls do listy buforów lub wtyczki typu MiniBufExpl lub BufExplorer .
 663
Author: Zathrus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-03 17:41:49

Trochę za późno na imprezę tutaj, ale zaskoczony, że nie widziałem następujących na tej liście:

:tab sball - spowoduje to otwarcie nowej karty dla każdego otwartego bufora.

:help switchbuf - to kontroluje zachowanie przełączania bufora, spróbuj :set switchbuf=usetab,newtab. Powinno to oznaczać przejście do istniejącej karty, jeśli bufor jest otwarty, lub utworzenie nowej, jeśli nie.

 276
Author: robince,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-27 00:37:46

Vim :help window dość dobrze wyjaśnia zamieszanie "tabs vs buffers".

Bufor jest tekstem pliku w pamięci.
Okno jest wizjerem na buforze.
Strona tab jest zbiorem okien.

Otwieranie wielu plików jest osiągane w Vimie za pomocą buforów . W innych edytorach (np. notepad++) robi się to z zakładkami, więc zakładka nazwa w Vimie może wprowadzać w błąd.

Windows służą do dzielenia przestrzeni roboczej i wyświetlanie wielu plików (buforów) razem na jednym ekranie. W innych edytorach można to osiągnąć, otwierając wiele okien GUI i zmieniając je na pulpicie.

Wreszcie w tej analogii strony karty Vima odpowiadałyby wielu pulpitom, czyli różnym przearanżowaniom okien.

Jak wyjaśnia vim help: tab-page strona tab może być używana, gdy chcemy tymczasowo edytować plik, ale nie chcemy niczego zmieniać w bieżącym układzie windows i bufory. W takim przypadku można użyć innej zakładki tylko w celu edycji danego pliku.

Oczywiście należy pamiętać, że wyświetlenie tego samego pliku na wielu stronach tabulatorów lub oknach spowoduje wyświetlenie tej samej kopii roboczej (bufora).

 185
Author: crenate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-30 16:26:23

W przeciwieństwie do innych odpowiedzi tutaj, mówię, że można używać tabs, jak chcesz. vim został zaprojektowany tak, aby był wszechstronny i konfigurowalny, a nie zmuszał do pracy zgodnie z predefiniowanymi parametrami. Wszyscy wiemy, jak my programiści uwielbiamy narzucać naszą "etykę" wszystkim innym, więc to osiągnięcie jest z pewnością podstawową cechą.

<C-w>gf tab jest odpowiednikiem polecenia gf buforów. <C-PageUp> i <C-PageDown> będą przełączać się między kartami. (W Byobu te dwa polecenia nigdy pracują dla mnie, ale pracują poza Byobu/tmux. Alternatywami są gt i gT.) <C-w>T przeniesie bieżące okno na nową stronę karty.

Jeśli wolisz, aby vim używał istniejącej karty, jeśli to możliwe, zamiast tworzyć zduplikowaną kartę, Dodaj :set switchbuf=usetab do swojej .plik vimrc. Możesz dodać newtab do listy (:set switchbuf=usetab,newtab), aby wymusić polecenia QuickFix, które wyświetlają błędy kompilacji, aby otworzyć w oddzielnych kartach. Zamiast tego wolę split, która otwiera błędy kompilacji w podzielonym oknie.

Jeśli jeśli masz włączoną obsługę myszy za pomocą :set mouse=a, możesz wchodzić w interakcje z zakładkami, klikając na nie. Istnieje również przycisk + domyślnie, który utworzy nową kartę.

Dla dokumentacji tabs wpisz :help tab-page w trybie normalnym. (Po wykonaniu tej czynności możesz poćwiczyć przenoszenie okna na kartę za pomocą <C-w>T.) Jest długa lista komend. Niektóre z poleceń okna mają związek z zakładkami, więc możesz również zajrzeć do tej dokumentacji za pomocą :help windows.

Dodatek: 2013-12-19

Aby otworzyć wiele plików w Vimie z każdym plikiem na osobnej karcie, użyj vim -p file1 file2 .... Jeśli jesteś taki jak ja i zawsze zapominasz dodać -p, możesz dodać ją na końcu, ponieważ vim postępuje zgodnie z normalnymi regułami parsowania linii poleceń. Alternatywnie możesz dodać odwzorowanie aliasu bash vim do vim -p.

 58
Author: Zenexer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-14 18:58:39

Natknąłem się na ten sam problem. Chciałem, aby karty działały jak bufory i nigdy nie udało mi się ich uzyskać. Rozwiązaniem, na którym w końcu się zdecydowałem, było sprawić, by bufory zachowywały się jak zakładki!

Sprawdź plugin o nazwie Mini Buffer Explorer , Po zainstalowaniu i skonfigurowaniu będziesz mógł pracować z buforami tak samo jak tabs bez utraty żadnej funkcjonalności.

 14
Author: Dominic Dos Santos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 15:12:05

Jest to odpowiedź dla tych, którzy nie znają Vima i pochodzą z innych edytorów tekstu (w moim przypadku Sublime Text).

Przeczytałem te wszystkie odpowiedzi i nadal nie było jasne. Jeśli przeczytasz je wystarczająco dużo rzeczy zaczynają mieć sens, ale zajęło mi godziny przechodzenia tam iz powrotem między pytaniami.

Pierwszą rzeczą jest, jak inni wyjaśnili:

Tab Pages, brzmią jak tabs , działają jak tabs i wyglądają jak tabs w większości innych GUI redaktorów, ale nie są. Myślę, że jest to zły model mentalny, który został zbudowany w Vimie, który niestety zasłania dodatkową moc, którą masz na stronie karty.

Pierwszy opis, który zrozumiałem pochodzi z @crenate ' s odpowiedź jest to, że są one odpowiednikiem wielu pulpitów. Gdy widzisz w tym względzie, zawsze masz tylko kilka pulpitów otwartych, ale wiele okien GUI otwartych w każdym z nich.

Powiedziałbym, że są podobne do innych edytory/przeglądarki:

  1. grupy tabulatur
  2. Sublime Text workspaces (czyli lista otwartych plików, które posiadasz w projekcie)]}

Kiedy widzisz je w ten sposób, zdajesz sobie sprawę z ich mocy, że możesz łatwo grupować zestawy plików (bufory)razem np. pliki CSS, pliki HTML i pliki JS na różnych stronach kart. Co jest naprawdę niesamowite.

Inne opisy, które mnie mylą

Viewport

To nie ma sensu dla mnie. Viewport, który chociaż ma zdefiniowany słownik termin , słyszałem tylko nawiązanie do okien Vima w :help window doc. Viewport nie jest terminem, który kiedykolwiek słyszałem w odniesieniu do edytorów takich jak Sublime Text, Visual Studio, Atom, Notepad++. W rzeczywistości nigdy nie słyszałem o tym dla Vima, dopóki nie zacząłem próbować używać stron tab.

Jeśli przeglądasz strony kart jak wiele pulpitów, odniesienie do pulpitu jako pojedynczego okna wydaje się dziwne.

Przestrzenie robocze

To prawdopodobnie ma więcej sensu, definicja słownika jest:

Magazyn pamięci do tymczasowego użytku.

Więc to jest jak miejsce, w którym przechowuje się grupę buforów.

Początkowo nie brzmiałem jak koncepcja Sublime Text przestrzeni roboczej, która jest listą wszystkich plików, które masz otwarte w swoim projekcie:

Plik sublime-workspace, który zawiera dane specyficzne dla użytkownika, takie jak otwarte pliki i modyfikacje do każdy.

Jednak myśląc o tym bardziej, to się zgadza. Jeśli uważasz stronę karty Vima za wysublimowany projekt tekstowy, to dziwne byłoby mieć tylko jeden plik otwarty w każdym projekcie i ciągle przełączać się między projektami. Dlatego używanie strony Zakładki, aby otworzyć tylko jeden plik, jest dziwne.

Kolekcja okien

:help window odnosi się do stron tab w ten sposób. Dodatkowo wiele innych odpowiedzi używa tego samego pojęcia. Jednak dopóki nie zorientujesz się, co to jest okno vim, więc to nie jest zbyt użyteczne, jak budowanie zamku na piasku.

Jak wspomniałem powyżej, okno vim jest takie samo jak viewport i ciche doskonale wyjaśnione w tym linux.com Artykuł :

Bardzo przydatną funkcją w Vimie jest możliwość dzielenia obszaru wyświetlania między jednym lub więcej plików, lub po prostu dzielenia okna, aby łatwiej zobaczyć dwa bity tego samego pliku. Dokumentacja Vim odnosi się do tego jako viewport lub window, zamiennie.

Możesz już zapoznaj się z tą funkcją, jeśli kiedykolwiek korzystałeś z funkcji pomocy Vima, używając :temat pomocy lub naciskając klawisz F1. Po wprowadzeniu pomocy Vim rozdziela widok i otwiera dokumentację pomocy w górnym oknie, pozostawiając dokument otwarty w dolnym oknie.

Wydaje mi się dziwne, że strona tab jest określana jako kolekcja okien zamiast kolekcji buforów. Ale myślę, że możesz mieć dwie oddzielne strony kart, każda z wieloma oknami wskazującymi na to samo bufor, przynajmniej tak jak na razie rozumiem.

 10
Author: icc97,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Patrząc na : karty pomocy wygląda na to, że vim nie chce pracować tak, jak ty...

Bufory są współdzielone między kartami, więc nie wydaje się możliwe zablokowanie danego bufora, aby wyświetlał się tylko na określonej karcie.

To dobry pomysł.

Możesz prawdopodobnie uzyskać pożądany efekt, używając terminala obsługującego karty, takiego jak multi-gnome-terminal, a następnie uruchamiając instancje Vima na każdej karcie terminala. Ale nie idealnie...

 4
Author: Mike G.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 14:50:18
  • Możesz mapować polecenia, które normalnie manipulują buforami, aby manipulować kartami, tak jak zrobiłem z gf w moim .vimrc:

    map gf :tabe <cfile><CR>
    

    Jestem pewien, że możesz zrobić to samo z [^

  • Nie sądzę, że vim obsługuje to dla tabs (jeszcze). Używam gt i gT, aby przejść do następnej i poprzedniej karty, odpowiednio. Można również użyć Ngt, gdzie N jest numerem zakładki. Jednym z moich zmartwień jest to, że domyślnie numer karty nie jest wyświetlany w linii kart. Aby to naprawić, umieściłem kilka funkcji na koniec my .plik vimrc (nie wkleiłem tutaj, ponieważ jest długi i nie sformatował poprawnie).

 4
Author: Lucas Oman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 14:53:33

Używam buforów typu tabs, używając wtyczki BufExplorer i kilku makr:

" CTRL+b opens the buffer list
map <C-b> <esc>:BufExplorer<cr>

" gz in command mode closes the current buffer
map gz :bdelete<cr>

" g[bB] in command mode switch to the next/prev. buffer
map gb :bnext<cr>
map gB :bprev<cr>

Z BufExplorer nie masz paska kart u góry, ale z drugiej strony oszczędza miejsce na ekranie, plus możesz mieć nieskończoną liczbę plików / buforów otwartych i listę buforów można przeszukiwać...

 4
Author: jkramer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 22:46:12

Jeśli chcesz, aby bufory działały jak tabulatory, sprawdź wtyczkę tabline .

, który używa pojedynczego okna i dodaje linię na górze, aby symulować karty (tylko pokazując listę buforów). To wyszło dawno temu, gdy karty były obsługiwane tylko w GVim, ale nie w wierszu poleceń vim. Ponieważ działa tylko z buforami, wszystko dobrze integruje się z resztą Vima.

 2
Author: thien.vuong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-28 12:34:09