Nie rozumiem buforów. Kiedy otwieram 3 pliki na tej samej karcie i zamykam okno, generalnie denerwuję się, gdy następnym razem otwieram jeden z tych plików, że istnieją dziwne pliki wymiany, które pozostają i dają mi nieznośne wiadomości. Ale raz po raz czytam, że te rzeczy to nirwana produktywności, za którą tęsknię i że zakładki zostały stworzone dla plebejuszy.
Pytam więc, eksperta Vima: jakie są zalety używania buforów nad kartami? Nie rozumiem, jak ta różnica może być zupełnie inna, ale rozważałbym siebie tylko na poziomie początkującym-średniozaawansowanym podczas obsługi Vima. Czy to :ls
:b#
naprawdę o wiele szybsze niż gt
kręcenie się w pobliżu? Czuję, że to musi sięgać głębiej.
:split
przechodząc do „okien”. Jeśli masz wszystkie swoje bufory (pliki) w osobnych zakładkach, nie zobaczysz tego widoku jednocześnie. Poleciłbym nauczyć się vima przy użyciu 1 karty na początek i przyzwyczaić się do podziałów.Odpowiedzi:
Jak powiedział ZyX na #vim, pytanie brzmi: „Dlaczego eksperci Vima wolą smaczne niż ciepłe?” .
„Eksperci Vima” nie preferują buforów zamiast kart: używają buforów jako serwerów proxy, którymi są, a stron kart jako obszarów roboczych. Bufory i strony z kartami mają różne cele, więc preferowanie jednego od drugiego nie ma żadnego sensu.
Problem z buforami i kartami jest zamieszany , spowodowany kombinacją niezależnych faktów.
Większość „nowoczesnych” edytorów tekstu i IDE używa metafory tabulatora do reprezentowania załadowanych plików. Ta metafora działa jak 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ć ...) te otwarte pliki. Pomimo wielu ograniczeń, karty są wszędzie, a ludzie są do nich przyzwyczajeni i oczekują ich wszędzie.
Vim wprowadził strony z kartami w wersji 7.0 jako sposób na tworzenie przez użytkowników „obszarów roboczych” ad-hoc. Nic w ich funkcjach, ich specyficznych opcjach, ich specyficznych poleceniach lub
:help
sekcjach nie sugeruje, że strony z kartami mogłyby lub powinny być używane jako proxy plików.Oczywiście nic poza nazwą i wyglądem „kart stron”, co prowadzi do wielu nieporozumień.
Bez
:set hidden
, który jest domyślnie wyłączony i nie jest bardzo łatwy do znalezienia, Vim uniemożliwia przejście do innego bufora bez zapisania bieżącego lub rezygnacji z jego zmian. Nowi użytkownicy, nieświadomi tej opcji, nie mają innego wyboru, jak przejść do korzystania z ciężkich okien lub do najbliższej funkcji „tab-tab”, jaką mogą znaleźć: strony z kartami.„Strona z zakładkami” to niefortunny wybór nazwy dla tej funkcji, szczególnie w epoce zdominowanej przez pomysł, że czytanie dokumentacji jest stratą czasu.
W Vim strony z zakładkami są abstrakcją zbudowaną na oknach, same są abstrakcją zbudowaną na buforach. Każdy nowy poziom dodaje przydatne funkcje, ale ogranicza przepływ pracy.
„Sposób buforowania”
Dzięki przepływowi pracy opartemu na buforze pliki, z którymi pracujesz, są dystrybuowane w jednym wymiarze. Możesz przełączać bufory, możesz uzyskać dostęp do konkretnego bufora, wpisując część jego nazwy (z uzupełnieniem) lub jego numer, możesz przełączać się między buforami, możesz łatwo na nie celować. Zasadniczo nie ma tarcia.
Osiem buforów otwartych, tylko jeden widoczny:
Przełączanie według numeru:
Przełączanie według nazwy:
Bufory są serwerami proxy Vima. Jeśli myślisz o plikach, myślisz o buforach.
„Sposób na okno”
Z przepływem pracy opartym na oknie oba „pliki” są dystrybuowane w tym samym pojedynczym „wirtualnym” wymiarze, tak jak w przypadku użycia tylko buforów i wzdłuż dwóch innych „fizycznych” wymiarów. 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, który odpowiada żądanemu plikowi, może być wyświetlany w tym oknie, ale może być również wyświetlany na innym, być może na innej stronie zakładki lub wcale.
W systemie Windows nawigacja między otwartymi plikami staje się zbyt złożona lub zbyt uproszczona, nawet przy pomocy
'switchbuf'
i:sb
. Głównie dlatego, że jesteś zmuszony użyć dwóch zestawów poleceń do tego, co jest w zasadzie to samo: do uzyskania dostępu do bufora.Windows ma swoje zastosowanie, jak opisano poniżej, ale nie mają tyle, ile potrzeba, aby zamienić bufory w czyimś przepływie pracy.
Tutaj pracuję nad schematem kolorów Vim. Dwa okna to różne widoki tego samego bufora: górne służy jako odniesienie, wraz z tabelą kodów kolorów używanych w schemacie kolorów, a dolne to miejsce, w którym pracuję:
Okna nie są zaprojektowane jako proxy plików i nie można ich przekształcić w proxy: są to „kontenery” lub „rzutnie” zaprojektowane tak, aby oferować widok do bufora. Nie więcej nie mniej.
„Sposób zakładki”
Dzięki przepływowi pracy opartemu na kartach zasadniczo próbujesz naśladować wrażenia użytkownika, do których jesteś przyzwyczajony z poprzedniego edytora, całkowicie ignorując samą naturę stron z kartami Vima. Jeśli na chwilę zapomnimy, że ta strategia jest generalnie bardzo nieproduktywna, niemożliwe jest, podobnie jak w przypadku systemu Windows, zmusić 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, tabulacja zajmuje znaczną przestrzeń, praktycznie bez korzyści. Wszystkie moje pliki i wszystkie moje karty są nazywane,
javascript*.vim
więc nie mogę tego zrobić3gt
i mam pewność, że skończę we właściwym miejscu i nie można dotrzeć do konkretnej karty 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 na powiązanie pliku / bufora ze stroną karty, w zasadzie pozostaje ci tylko jeden praktyczny sposób poruszania się między stronami kart / bufory / pliki: cykliczne.I tak, moja tabulatura jest wypełniona tylko 8 zakładkami, wyobraź sobie, że miałbym 20!
Osiem buforów otwartych na ośmiu stronach kart (źle)
Dwie zakładki dla dwóch określonych zadań (po prawej)
Strony kart to „kontenery” lub „rzutnie” zaprojektowane tak, aby zawierały jedno lub więcej okien, same również „kontenery” zaprojektowane do przechowywania buforów.
Podsumowując
„Eksperci Vima” (załóżmy, że mogę mówić tak, jakbym był jednym z nich) nie preferują buforów nad kartami: po prostu używają Vima tak, jak został zaprojektowany i są całkowicie wygodne z tym projektem:
„Eksperci Vima” mają załadowane 2, 30 lub 97 buforów i cieszą się, ż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 Vima” używają okien, ponieważ w taki sposób mają być używane;
kiedy muszą chwilę popracować nad oddzielną częścią projektu, nie zakłócając obecnego widoku, „eksperci Vima” ładują nową stronę z zakładkami.
źródło
*.c
,*.h
,scripts/*
itest/**/*.lua
pliki). Biorąc pod uwagę, że mój terminal ma tylko 239 kolumn, podejście „jeden plik na zakładkę” jest niemożliwe.Kiedyś trzymałem każdy bufor w osobnej zakładce, ale męczyło mnie ciągłe gti gTwszędzie kręcenie się.
Czułem również, że buforowanie jest zbyt trudne do zarządzania.
Oto kilka technik, które całkowicie zmieniły moją wcześniejszą opinię:
:b
. Robisz się w tym zaskakująco szybki. Zobacz vim, szybkie przełączanie między plikami za pomocą waniliowego Vima (bez wtyczek)Oto mój typowy przepływ pracy:
:e
(zwykle z wyrażeniem regularnym:e src/**/F*Bar.js
), aby otworzyć bufor:e
do tego. Jeśli chcę przełączać się między tym buforem a aktualnie otwartym buforem, użyję:sp
lub:vsp
otworzę go w osobnym oknie.Czułem, że po około tygodniu wymuszania tych nowych wzorów znacznie łatwiej było wyobrazić sobie, które bufory miałem otwarte i jak dostać się do jednego z nich za pomocą kilku automatycznych pociągnięć.
źródło
gT
to polecenie przełączania kart, szukałem zamiennikactrl+tab
. Więc dziękuję, że naprawdę pomogłeś nowemu użytkownikowi, a nie tylko poczułeś się głupio.nnoremap <leader>b :ls<CR>:b<space>
jest całkiem fajny do szybkiego przełączania buforów, ponieważ pokazuje listę aktualnie otwartych buforów. Akceptowane są także częściowe nazwy (o ile istnieje tylko jedno dopasowanie).ctrl N
lubctrl P
(P to zwykle używam), da ci listę słów, aby zakończyć to, co wpisujesz ... Jest inteligentny na podstawie twojego obecnego bufor, podzielone, te, na które właśnie patrzyłeś, i każdy inny otwarty plik!Minusem kart jest to, że można wyświetlić tylko jedną zawartość na raz. Więc jeśli używasz ich jak w przeglądarce, tracisz możliwość oglądania wielu buforów obok siebie, a nawet przeglądania oddzielnych części tego samego pliku w podziale. Dlatego wielu zaleca używanie kart tylko do segregacji różnych obszarów roboczych (np. Jeden dla projektu Java, inny dla listy rzeczy do zrobienia, trzeci do zhakowania skryptu z boku).
Opisane problemy sprawiają, że wydaje się, że źle używasz Vima. Albo mają (przeważnie) jedną dedykowaną instancję. Następnie bufory, które zostaną ukryte, po prostu „pojawią się ponownie”, jeśli ponownie je edytujesz (i możesz teraz użyć listy buforów, aby je przywołać) i nie będzie komunikatów wymiany plików. Lub użyj osobnych instancji Vima na sesję projektu / pliku / edycji, ale potem nawyksz do pełnego tworzenia
:quit
każdej instancji, kiedy skończysz z plikiem.źródło
Inna wskazówka, gdy używasz nazwy bufora jako argumentu: bufor, nie musisz podawać całych nazw. Jeśli jednak więcej niż jeden bufor pasuje do podanego argumentu, bufory nie zostaną przełączone.
Można dopasować dowolny fragment nazwy bufora. Na przykład, jeśli masz bufory,
request_manager.java
aqueue_manager.java
następnie:buffer que
lub:b que
pasuje do nich obu, ale przełączy się na queue_manager.java, ponieważ pasuje na początku.źródło
Używam karty, Ctrl- Pi sesje Vima w moim przepływu pracy i mieć przez ponad rok teraz:
Mam )i (zmapowałem odpowiednio do „przejdź do następnej karty” i „przejdź do poprzedniej karty”. tnotwiera nową kartę. Korzystam również z tabm, aby utrzymać porządek.
Używam sesji Vima do grup plików związanych z bieżącą historią / błędem, nad którym pracuję, zwykle według kategorii. Sesje te są nadpisywane w trakcie procesu.
Muszę jeszcze znaleźć coś lepszego niż Ctrl- P, ale przetworzenie wszystkich plików zajmuje trochę czasu.
źródło
Rzuca 2c na stos.
TLDR;
:b *part-of-filename*
to najlepszy sposób na znalezienie potrzebnego pliku na liście buforów, tj. jest SZYBSZY i ma MNIEJSZY ładunek poznawczy niż numery buforów, tabulatory lub okna do śledzenia plików.Nic dla mnie nie ma otwartych 30 buforów (tzn. Nie zajmowałem się sprzątaniem), a piękno używanych buforów - cóż, wcale mnie nie spowalnia. W rzeczywistości przyspiesza to, gdy cztery dni po otwarciu pliku potrzebuję go, zadzwoń
:b *part-of-filename*
i pojawi się magicznie, robiąc wrażenie na współpracownikach i kolektywistach.Bufory są dla plików.
Być efektywnym:
:e
ls
WSZYSTKIE chwile, kiedy po raz pierwszy zaczniesz mieć dobry model mentalny (nie możesz żałować tego, czego nie widzisz, mentalnie lub dosłownie):q
nie wieje:b
do swojej pamięci mięśniowej:b1
jest dobry dla pierwszego pliku, który wiesz, że otworzyłeś, w przeciwnym razie cyfry i litery szybko stają się niezdarne:b#
jest dobry do przejścia do ostatniego pliku, co jest powszechną potrzebą:bd#
jest dobre, gdy przełączyłeś się na plik tymczasowy, zrobiłeś to, co musiałeś zrobić, przełączyłeś się z powrotem:b#
i teraz chcesz zamknąć ten plik tymczasowy:b *part-of-filename*
jest najlepszym sposobem znalezienia potrzebnego pliku na liście, tj. jest SZYBSZY i ma MNIEJSZY ładunek poznawczy niż numery buforów, tabulatory lub okna do śledzenia plików.Jedyną irytacją
:b *part-of-filename*
jest to, że czasami nie otworzyłeś jeszcze pliku i musisz wrócić i:e path/to/full-filename
najpierw.Zakładki służą do rozróżniania naprawdę niepowiązanych plików.
Lub trzymanie pod ręką określonego układu okien (zrzeczenie się: Nigdy sam tego nie używałem).
Lub dla plików rzadko używanych, ale przewidywalnie potrzebnych. Dla mnie jest to zwykle
commitMessage
plik, który adnotuję podczas pracy, więc nie muszę zbyt wiele myśleć, kiedy przychodzi czas na zatwierdzenie.gt
jest szybszy niż:b com<enter>
(jeśli masz szczęście, inaczej:b com<tab><enter>
):tabe commitMessage
gt
lubgT
też ulubieniec pamięci mięśniowejPodziały okien służą do wizualnego porównywania informacji
Lub mając natychmiastowy dostęp do ważnych informacji (prawdę mówiąc, chyba że informacje te są czymś, co muszę aktualizować na żywo,
:e
np. Plikiem dziennika, zwykle po prostu ściągam zawartość do bieżącego pliku i tam sobie z tym radzę).:vsp
lubC-w v
otwiera podział pionowy, tj. lewy | racja, a następnie użyj:b
lub,:e
aby uzyskać żądany plik:sp
lubC-w s
otwórz podział poziomy, tj. góra / dółC-w C-w
tzn. podwójne Ctrl-w, obraca cię wokół dostępnych okienC-w c
zamknij bieżące oknoC-w o
zamknij wszystkie pozostałe okna, zachowaj TYLKO aktualneźródło
:b#
i:bd#
!Dodaj je do swoich
.vimrc
i zacznij kochać bufory:W ten sposób możesz przełączać się między nimi w trybie normalnym za pomocą Tab/ ShiftTab.
źródło
<C-I>
. Map<C-Tab>
zamiast jeśli naprawdę chce.:n
i:N
odnoszą się do listy argumentów, a nie otwarte buforów. Chciałbyś:bn
i:bp
(:bnext
i:bprev
). niezniszczony tpope zapewnia mapowania]b
i[b
do tego (i innych dobrych rzeczy), jeśli chcesz.(
i)
, lub<left>
i<right>
, byłyby prawdopodobnie mniej przydatne klawisze do zastąpienia niż tabulator, jeśli naprawdę chcesz mieć krótkie mapowanie.Ctrl + Tab
ponieważ używa go większość innych edytorów GUI i przeglądarek.Chciałbym zasugerować genialną implementację sprzed wielu lat: kien / tabman.vim . Wyjaśnia następujące kwestie:
To cudowne ponowne odkrycie tej magicznej wtyczki, która powinna była pozostać w mojej konfiguracji Vima również od wielu lat. Podczas gdybym nadal szukał czegoś, co również wyświetla wszystkie ukryte bufory, TabMan jest moim supermanem, jeśli chodzi o widok z lotu ptaka na to, jak bufory były rozmieszczone na różnych kartach.
źródło
Karty i bufory to dwa różne standardy w Vi. Przeczytaj te trzy definicje:
Przeczytaj ten artykuł, aby uzyskać więcej https://joshldavis.com/2014/04/05/vim-tab-madness-buffers-vs-tabs/
źródło
Ładuję „wybrane” bufory jako tabulatory, aby szybko (TAB / S-TAB) przełączać się między nimi. Ramy obszarów roboczych pasują tutaj, ponieważ dla mnie bufory VS tabs to przede wszystkim widoczność. Mogę umieszczać ważne / robocze pliki w oknach i kartach i ukrywać te, których obecnie nie muszę używać w tle, bez konieczności pamiętania ścieżek lub szukania i ładowania ich ponownie, gdy zajdzie taka potrzeba. Pozwala to na obsługę kilku zadań lub projektów w jednej sesji VIM, myślę, że kiedyś było to ważne w maszynach o małej pamięci, ale jest również dobre do skoncentrowania wszystkich zadań edycyjnych w jednej ramce aplikacji. Mam również skróty przesunięcia bufora ustawione na Ctrl-Prawo / Lewo, więc mogę szybko przełączać się między różnymi buforami.
Podsumowując, można podzielić tylko niektóre okna do jego celów, tak jak ekran nieruchomości, ale można przechowywać wiele ustawień okien na kilku kartach, rozszerzając w ten sposób swój obszar roboczy i usprawniając przepływ pracy, umożliwiając wygodny podział skomplikowanych zadań obejmujących więcej niż jeden plik .
W przypadku plików wymiany możesz powiedzieć VIMowi, aby trzymał je wszystkie w jednym folderze swojego oznaczenia. Do tego zastosowania
:set directory
.źródło