Dlaczego eksperci Vim wolą bufory niż karty?

Nie rozumiembuforów. Kiedy otwieram 3 pliki na tej samej karcie i zamykam okno, ogólnie jestem zirytowany, aby dowiedzieć się następnym razem, gdy otwieram jeden z tych plików, że są dziwne pliki wymiany, które utrzymują się i dają mi nieznośne wiadomości. Ale raz po raz czytam, że te rzeczy są produktywnością, której mi brakuje i że Zakładki zostały stworzone dla plebejuszy.

Więc pytam Ciebie, eksperta Vim: jakie są zalety korzystania z buforów nad kartami? Nie widzę. jak różnica może być głęboko różne, ale ja uważam się tylko na poziomie początkujący-średnio zaawansowany w pracy Vim. Na :ls :b# naprawdę o wiele szybciej niż gting around? Czuję, że to musi pójść głębiej niż to.

 158
Author: Vadim Kotov, 2014-11-03

7 answers

Jak powiedział ZyX na #vim, to pytanie brzmi jak " dlaczego eksperci Vim wolą smaczne niż ciepłe?".

"eksperci Vim - u" nie wolą buforów niż kart: używają buforów jako proxy plików, a strony tabulacji jako obszary robocze, którymi są. Bufory i strony kart mają różne cele, więc wolenie jednego od drugiego nie ma żadnego sensu.

Problem z buforami i tabulatorami jest jednym z zamieszania , spowodowanego kombinacją niezależnych fakty.

  1. Większość" nowoczesnych " edytorów tekstu i IDE używa metafory do reprezentowania załadowanych plików. Ta metafora działa jako system informacyjny-pokazuje użytkownikowi, jakie pliki są otwierane i ich stan-oraz jako urządzenie interaktywne-pozwala użytkownikowi manipulować (zmieniać kolejność, wybierać, zamykać...) tymi otwartymi plikami. Pomimo wielu ograniczeń, karty są wszędzie, a ludzie są do nich przyzwyczajeni i oczekują ich wszędzie.

  2. Vim wprowadził [[8]} tab pages w 7.0 jako sposób na tworzenie ad-hoc "przestrzeni roboczych". Nic w ich funkcjach, konkretnych opcjach, konkretnych poleceniach lub sekcjach :help nie sugeruje, że strony tabulatorów mogą lub powinny być używane jako proxy plików.

    Nic poza nazwąi wygląd "stron zakładek", oczywiście, co prowadzi do wielu nieporozumień.

  3. Bez :set hidden, który jest domyślnie wyłączony i niezbyt łatwy do znalezienia, Vim uniemożliwia przełączenie do innego bufora bez zapisywania bieżącego lub rezygnacji z jego zmian. Nowi użytkownicy, nieświadomi tej opcji, nie mają wyboru, jak tylko przejść do ciężkiego Windows use lub do najbliższej funkcji "tab-like", którą mogą znaleźć: strony tab.

"Tab page" to niefortunny wybór nazwy dla tej funkcji, szczególnie w epoce zdominowanej przez ideę, że czytanie dokumentacji jest stratą czasu.

W Vimie strony tabulacji są abstrakcją zbudowaną na systemie windows, same w sobie abstrakcją zbudowany na szczycie buforów. Każdy nowy poziom dodaje przydatne funkcje, ale ogranicza przepływ pracy.

"droga buforowa"

Dzięki przepływowi pracy opartemu na buforze pliki, z którymi pracujesz, są rozprowadzane wzdłuż jednego wymiaru. Możesz przełączać się między buforami, możesz uzyskać dostęp do określonego bufora, wpisując część jego nazwy (z zakończeniem) lub jego numer, możesz zmieniać bufory, możesz je łatwo kierować. W zasadzie nie ma tarcia.

  1. Osiem bufory otwarte, widoczny tylko jeden:

    Osiem buforów otwartych

  2. Przełączanie według liczby:

    Przełączanie według liczby

  3. Zmiana nazwy:

    Przełączanie po nazwie

bufory są plikowymi proxy Vima. Jeśli myślisz w kategoriach plików, myślisz w kategoriach buforów.

The "window way"

Dzięki obiegowi pracy opartemu na oknie, Twoje "pliki" są rozprowadzane wzdłuż tego samego "Wirtualnego"" wymiarów, jak gdyby użyto tylko buforów i wraz z dwoma innymi" fizycznymi " wymiarami. Ale przestrzenie kartezjańskie, w których znajdują się te wymiary, są prawie całkowicie oddzielone: przejście do innego bufora nadal oznacza "przejście do innego pliku", ale przejście do innego okna nie. bufor odpowiadający żądanemu plikowi może być wyświetlany w tym oknie, ale może być również wyświetlany w innym, może w innej zakładce, lub wcale.

Z windows, poruszanie się między otwartymi plikami staje się zbyt skomplikowane lub zbyt uproszczone, nawet z 'switchbuf' i :sb. Głównie dlatego, że jesteś zmuszony użyć dwóch zestawów komend do tego, co zasadniczo jest tym samym: dostępu do bufora.

Okna mają swoje zastosowanie, jak opisano poniżej, ale nie mają tego, czego potrzeba, aby zastąpić bufory w czyimś obiegu pracy.

Tutaj pracuję nad vim colorscheme. Dwa okna są różnymi widokami tego samego bufora: górne służy jako referencja, z tabela kodów kolorów używanych w colorscheme, a na dole jest miejsce, w którym pracuję:

Praca nad colorscheme

Okna nie są projektowane jako proxy plików i nie można ich przekształcić w takie: są to "kontenery" lub "viewports" zaprojektowane tak, aby oferować widok do bufora. Ani więcej, ani mniej.

The "tab way"

Dzięki przepływowi pracy opartemu na kartach zasadniczo próbujesz naśladować doświadczenie użytkownika, do którego jesteś przyzwyczajony z poprzedniego edytora, a jednocześnie całkowicie ignorowanie samej natury stron kart Vima. Jeśli zapomnimy na chwilę, że ta strategia jest ogólniebardzo nieproduktywna, to niemożliwe jest również, tak jak w przypadku windows, zmuszenie Vima do przestrzegania tego paradygmatu "jeden plik = jedna karta" bez utraty dużej elastyczności.

Wciąż pracując z tymi samymi plikami, co powyżej, tabline zajmuje znaczną przestrzeń, praktycznie bez żadnych korzyści. Wszystkie moje pliki i wszystkie moje karty są nazywane javascript*.vim , więc nie mogę zrobić 3gt i być pewnym Skończę w odpowiednim miejscu i nie można dotrzeć do konkretnej Zakładki po nazwie. Dodaj do tego fakt, że jego etykieta może być bardzo nieprzydatna, ale całkowicie logiczna [Quickfix List] ... ponieważ nie ma praktycznego sposobu, aby powiązać plik / bufor ze stroną karty, w zasadzie pozostaje Ci tylko jeden praktyczny sposób poruszania się między stronami kart/buforami/plikami: jazda na rowerze.

I tak, mój tabline jest clobbered z tylko 8 tabs, wyobraź sobie, gdybym miał 20!

  1. Osiem buforów otwartych w ośmiu tab pages (wrong)

    Źle

  2. Dwie zakładki dla dwóch konkretnych zadań (po prawej)

    Prawo

strony zakładek to "kontenery " lub" viewports "zaprojektowane tak, aby zawierały jedno lub więcej okien, same w sobie również" kontenery " zaprojektowane tak, aby zawierały bufory.

In conclusion

"vim experts" (Załóżmy, że mogę mówić tak, jakbym był jednym z nich) nie wolę buforów niż tabs: po prostu używają Vima tak, jak został zaprojektowany i są z tym całkowicie wygodne:

  • "vim experts" mają załadowane 2, 30 lub 97 buforów i są bardzo szczęśliwi, że nie mają do czynienia z rozkładem przestrzennym;

  • Kiedy muszą porównać dwa pliki lub pracować w jednej części bieżącego bufora, zachowując inny jako odniesienie, "eksperci Vim" używają systemu windows, ponieważ tak mają być używane;

  • Kiedy muszą pracować przez jakiś czas w oddzielnej części projektu bez mieszania z ich bieżącym widokiem, "eksperci Vim" ładują zupełnie nową stronę karty.

 348
Author: romainl,
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
2018-01-08 19:00:44

Kiedyś trzymałem każdy bufor w osobnej karcie, ale znudziło mi się ciągłe gt i gt-wszędzie.

Czułem również, że bufory są zbyt trudne do zarządzania.

Oto kilka technik, które całkowicie zmieniły moją wcześniejszą opinię:

  • zarządzanie buforem: :b. Jesteś w tym zaskakująco szybki. Vim, który szybko przełącza się między plikami za pomocą vanilla Vim (bez wtyczek)
  • listy skoków/zmian (ctrl o/i i g;)
  • plik alternatywny (^)
  • tpope 'S Unimpaped plugin. Wygodne mapowanie do latania przez bufory (m.in.).

Oto mój typowy przepływ pracy:

    Aby otworzyć bufor
  • , należy użyć :e (Zwykle z wyrażeniem regex podobnym do:e src/**/F*Bar.js)]}
  • uświadomić sobie, że muszę otworzyć inny plik. Użyj :e do tego również. Jeśli chcę przełączyć się między tym bufor i aktualnie otwarty bufor użyję :sp lub :vsp, aby otworzyć go w osobnym oknie.
  • powtarzaj, dopóki nie będę miał 3-5 plików, które będę przełączał za pomocą technik z powyższej listy, aby latać między buforami.
  • jeśli chcę "zacząć od nowa" z moimi buforami, po prostu zamknij Vima i otwórz ponownie.

Czułem, że po tygodniu lub tak wymuszania tych nowych wzorców, stało się znacznie łatwiejsze do wizualizacji, które bufory miałem otwarte, i jak dostać się do każdy z nich w zaledwie kilku pociągnięciach automatycznych.

 36
Author: Jonathan.Brink,
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
2018-09-20 00:37:49

Minusem kart jest to, że możesz zobaczyć tylko zawartość jednej na raz. Jeśli więc używasz ich tak, jak w przeglądarce, tracisz na oglądaniu wielu buforów obok siebie, a nawet przeglądaniu oddzielnych części tego samego pliku w rozdzielach. Dlatego wielu zaleca używanie kart tylko do segregowania różnych przestrzeni roboczych (np. mieć jedną dla projektu Java, inną dla listy todo, trzecią do włamania na skrypcie z boku).

Problemy, które opisujesz sprawiają, że wydaje się, że używasz Vima źle. Albo mają (głównie) pojedynczą, dedykowaną instancję. Następnie bufory, które staną się ukryte, po prostu "pojawią się ponownie", jeśli je ponownie edytujesz (i możesz teraz użyć listy buforów, aby je przywołać), i nie będzie Wiadomości wymiany plików. Możesz też użyć osobnych wystąpień Vima dla projektu / pliku / edycji sesji, ale po zakończeniu pracy z plikiem należy używać w pełni :quit każdej instancji.

 10
Author: Ingo Karkat,
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-11-03 08:05:06

Kolejna wskazówka, używając nazwy bufora jako argumentu do :buffer, nie musisz podawać całej nazwy. Jednakże, jeśli więcej niż jeden bufor pasuje do podanego argumentu, bufory nie będą przełączane.

Każdy fragment nazwy bufora może być użyty do dopasowania. Na przykład, jeśli masz bufory request_manager.java i queue_manager.java to :buffer que matches lub :B que` oba z nich, ale przełączy się na queue_manager.java jak pasuje na początku.

 6
Author: Julius Martin,
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-11-04 19:38:03

Używam tabs, Ctrl-P i sesje Vim w moim workflow i mają już ponad rok:

  • Mam ) oraz ( mapowane odpowiednio do "przejdź do następnej karty" i "przejdź do poprzedniej karty". tN otwiera nową kartę. Korzystam również z tabm, aby pomóc utrzymać porządek.

  • Używam sesji Vim dla grup plików związanych z aktualnym wątkiem/błędem, nad którym pracuję, Zwykle robionych według kategorii. Te sesje zostają nadpisane w trakcie procesu.

  • Nie znalazłem jeszcze nic lepszego niż Ctrl-P , ale przetworzenie wszystkich plików do znalezienia zajmuje trochę czasu.

 3
Author: ShangoThrax,
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-11-05 18:22:05

Dodaj je do swojego .vimrc i zacznij kochać bufory:

:nnoremap <Tab> :n<cr>
:nnoremap <S-Tab> :N<cr>

W ten sposób można przechodzić przez nie do przodu/do tyłu w trybie normalnym za pomocą zakładki /ShiftTab .

 0
Author: sjas,
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-18 10:34:09

Ładuję" wybrane " bufory jako zakładki, aby szybko (TAB/S-TAB) przełączać się między nimi. Framework przestrzeni roboczych pasuje tutaj, jak dla mnie bufory VS tabs to głównie rzecz widoczności. Mogę pop ważne / pliki robocze w oknach i kartach i ukryć te, których obecnie nie muszę używać w tle w locie, bez konieczności zapamiętywania ścieżek lub poświęcenia czasu na wyszukiwanie i ładowanie ich ponownie, gdy zajdzie taka potrzeba. Pozwala to na obsługę kilku zadań lub projektów w jednej sesji VIM, myślę, że to kiedyś było ważne w maszynach o niskiej pamięci, ale jest również dobre dla koncentracji wszystkich zadań edycji w jednej ramce aplikacji. Mam również skróty przesunięcia bufora ustawione na Ctrl-prawo/lewo, więc mogę szybko przejść przez różne bufory, jak również.

Reasumując, można podzielić tylko na niektóre okna do jego zastosowań, tak samo jak ekran estate idzie, ale można trzymać wiele ustawień windows w kilku kartach, rozszerzając w ten sposób swoją przestrzeń roboczą i poprawę przepływu pracy, umożliwiając wygodny podział skomplikowane zadania obracające więcej niż jeden plik.

W przypadku plików wymiany możesz powiedzieć Vimowi, aby trzymał je wszystkie w jednym folderze z Twoim oznaczeniem. Do tego celu :set directory.

 0
Author: elig,
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
2018-05-31 17:39:27