Dużo słyszałem o Vimie , zarówno o zaletach, jak i wadach. Wydaje się, że powinieneś być (jako programista) szybszy w Vimie niż w jakimkolwiek innym edytorze. Używam Vima do robienia podstawowych rzeczy i jestem co najmniej 10 razy mniej wydajny z Vimem.
Jedyne dwie rzeczy, na które powinieneś zwrócić uwagę, gdy mówisz o prędkości (możesz nie dbać o nie wystarczająco, ale powinieneś) to:
- Używanie alternatywnie lewej i prawej ręki jest najszybszym sposobem korzystania z klawiatury.
- Nigdy nie dotykaj myszy, to drugi sposób na jak najszybsze. Przesunięcie ręki, złapanie myszy, przesunięcie i przywrócenie jej z powrotem na klawiaturę zajmuje wieki (często trzeba patrzeć na klawiaturę, aby upewnić się, że prawidłowo ułożyła ona rękę we właściwym miejscu)
Oto dwa przykłady pokazujące, dlaczego jestem mniej produktywny w Vimie.
Kopiuj / Wytnij i wklej. Ciągle to robię. We wszystkich współczesnych edytorach naciskasz Shift lewą ręką i przesuwasz kursor prawą ręką, aby zaznaczyć tekst. Następnie Ctrl+ Ckopie, należy przesunąć kursor i Ctrl+ Vpast.
Z Vimem to okropne:
yy
aby skopiować jedną linię (prawie nigdy nie chcesz całej linii!)[number xx]yy
aby skopiowaćxx
linie do bufora. Ale nigdy nie wiesz dokładnie, czy wybrałeś to, czego chciałeś. Często muszę[number xx]dd
wtedyu
cofnąć!
Inny przykład? Wyszukaj i zamień.
- W PSPad : Ctrl+ fnastępnie wpisz to, czego szukasz, a następnie naciśnij Enter.
- W Vim:
/
wpisz, co chcesz wyszukać, a jeśli\
przed każdym znakiem specjalnym są jakieś znaki specjalne, naciśnij Enter.
I wszystko w Vimie jest takie: wydaje się, że nie wiem, jak sobie z tym poradzić.
NB: Już odczytać Vima oszukiwać arkusz :)
Moje pytanie brzmi:
W jaki sposób korzystasz z Vima, dzięki czemu jesteś bardziej produktywny niż we współczesnym edytorze?
Odpowiedzi:
Twój problem z Vimem polega na tym, że nie grokujesz vi .
Wspominasz o cięciu
yy
i narzekasz, że prawie nigdy nie chcesz przecinać całych linii. W rzeczywistości programiści, edytując kod źródłowy, bardzo często chcą pracować na całych liniach, zakresach linii i blokach kodu. Jest to jednakyy
tylko jeden z wielu sposobów wciągnięcia tekstu do anonimowego bufora kopii (lub „rejestracji”, jak to się nazywa w vi ).„Zen” vi polega na tym, że mówisz językiem. Inicjał
y
jest czasownikiem. Oświadczenieyy
jest synonimemy_
.y
Jest podwojona do ułatwienia pisania, ponieważ jest to takie wspólne działanie.Można to również wyrazić jako
dd
P
(usuń bieżący wiersz i wklej kopię z powrotem na miejsce; pozostawiając kopię w rejestrze anonimowym jako efekt uboczny). Tey
id
„Czasowniki” wziąć każdy ruch jako „podmiot”. ZatemyW
„ciągnij stąd (kursor) do końca bieżącego / następnego (dużego) słowa” iy'a
„ciągnij stąd do wiersza zawierającego znak o nazwie„ a ”.Jeśli rozumiesz tylko podstawowe ruchy kursora w górę, w dół, w lewo i w prawo, vi nie będzie dla ciebie bardziej produktywne niż kopia „notatnika”. (W porządku, nadal będziesz miał podświetlanie składni i możliwość obsługi plików większych niż piddling ~ 45 KB lub więcej; ale pracuj tutaj ze mną).
vi ma 26 „znaków” i 26 „rejestrów”. Znak jest ustawiany w dowolnym miejscu kursora za pomocą
m
polecenia. Każdy znak jest oznaczony pojedynczą małą literą. W ten sposóbma
ustawia znak „ a ” na bieżącą lokalizację imz
ustawia znak „ z ”. Możesz przejść do wiersza zawierającego znak, używając polecenia'
(pojedynczy cudzysłów). W ten sposób'a
przechodzi na początek linii zawierającej znak „ a ”. Możesz przejść do dokładnej lokalizacji dowolnego znaku za pomocą polecenia`
(cudzysłów). W ten sposób`z
przejdzie bezpośrednio do dokładnej lokalizacji znaku „ z ”.Ponieważ są to „ruchy”, można je również wykorzystać jako tematy innych „stwierdzeń”.
Tak więc jednym ze sposobów wycinania dowolnego tekstu byłoby upuszczenie znaku (zwykle używam „ a ” jako mojego „pierwszego” znaku, „ z ” jako mojego następnego znaku, „ b ” jako innego, a „ e ” jako innego jeszcze inny (nie przypominam sobie, aby kiedykolwiek interaktywnie używać więcej niż czterech znaków w ciągu 15 lat używania vi ; jeden tworzy własne konwencje dotyczące używania znaków i rejestrów przez makra, które nie zakłócają interaktywnego kontekstu). na drugim końcu pożądanego tekstu; możemy zacząć od drugiego końca, to nie ma znaczenia. Następnie możemy po prostu użyć
d`a
do wycięcia lub .y`a
kopiowania. W ten sposób cały proces ma narzut 5 naciśnięć klawiszy (sześć, jeśli zaczęliśmy od „insert” „tryb i potrzebneEsctryb komend out). Po wycięciu lub skopiowaniu wklejanie kopii jest jednym naciśnięciem klawisza:p
Mówię, że jest to jeden ze sposobów wycinania lub kopiowania tekstu. Jest to jednak tylko jeden z wielu. Często możemy bardziej zwięźle opisać zakres tekstu bez przesuwania kursora i upuszczania znaku. Na przykład, jeśli jestem w akapicie tekstu, mogę użyć
{
i}
przejść odpowiednio na początek lub koniec akapitu. Aby przenieść akapit tekstu, wycinam go{
d}
(3 naciśnięcia klawiszy). (Jeśli zdarzyło mi się być w pierwszej lub ostatniej linii akapitu, mogę po prostu użyć odpowiedniod}
lubd{
.Pojęcie „akapit” domyślnie przyjmuje coś, co zwykle jest intuicyjnie uzasadnione. Dlatego często działa zarówno dla kodu, jak i dla prozy.
Często znamy jakiś wzorzec (wyrażenie regularne), który oznacza jeden lub drugi tekst, który nas interesuje. Wyszukiwanie do przodu lub do tyłu to ruchy w vi . Dlatego mogą być również używane jako „podmioty” w naszych „oświadczeniach”. Więc mogę użyć,
d/foo
aby wyciąć z bieżącej linii do następnej linii zawierającej ciąg „foo” iy?bar
skopiować z bieżącej linii do najnowszej (poprzedniej) linii zawierającej „pasek”. Jeśli nie chcę całych linii, nadal mogę korzystać z ruchów wyszukiwania (jako własnych instrukcji), porzucić moje znaki i używać`x
poleceń w sposób opisany wcześniej.Oprócz „czasowników” i „przedmiotów” vi ma także „przedmioty” (w gramatycznym znaczeniu tego terminu). Do tej pory opisałem tylko użycie anonimowego rejestru. Jednak mogę użyć dowolnego z 26 rejestrów „nazwanych”, poprzedzając odwołanie do „obiektu”
"
(modyfikatorem podwójnego cudzysłowu). Zatem jeśli"add
używam, wycinam bieżącą linię do rejestru „ a ”, a jeśli"by/foo
używam, szarpię kopię tekstu stąd do następnego wiersza zawierającego „foo” do rejestru „ b ”. Aby wkleić z rejestru po prostu poprzedzić pastę z tej samej sekwencji Modyfikator:"ap
wkleja Kopię „ ” zarejestrować”"bP
wkleja kopię z „ b ” do przed bieżącą linią.To pojęcie „przedrostków” dodaje także analogi gramatyczne „przymiotniki” i „przysłówki” do naszego języka „manipulacji tekstem”. Większość poleceń (czasowników) i ruchów (czasowników lub obiektów, w zależności od kontekstu) może również przyjmować przedrostki numeryczne.
3J
oznacza „połącz trzy kolejne wiersze” id5}
„usuń z bieżącego wiersza do końca piątego akapitu stąd”.To wszystko poziom pośredni vi . Żaden z nich nie jest specyficzny dla Vima i istnieją vi bardziej zaawansowane sztuczki w vi, jeśli jesteś gotowy, aby się ich nauczyć. Jeśli opanujesz tylko te pośrednie pojęcia, prawdopodobnie odkryjesz, że rzadko musisz pisać makra, ponieważ język manipulacji tekstem jest wystarczająco zwięzły i ekspresyjny, aby robić większość rzeczy z łatwością za pomocą „rodzimego” języka edytora.
Próbki bardziej zaawansowanych sztuczek:
Istnieje wiele
:
poleceń, w szczególności:% s/foo/bar/g
technika globalnego zastępowania. (To nie jest zaawansowane, ale:
mogą być inne polecenia). Cały:
zestaw poleceń historycznie odziedziczył poprzednie wcielenia vi jako narzędzia ed (edytor linii), a później ex (rozszerzony edytor linii). W rzeczywistości vi jest tak nazwany, ponieważ jest to interfejs wizualny ex .:
polecenia zwykle działają nad wierszami tekstu. ed i ex zostały napisane w czasach, gdy ekrany terminali były rzadkie, a wiele terminali było urządzeniami typu „teletype” (TTY). Dlatego często drukowano kopie tekstu przy użyciu poleceń za pomocą bardzo zwięzłego interfejsu (częste prędkości połączenia wynosiły 110 bodów lub mniej więcej 11 znaków na sekundę - co jest wolniejsze niż szybka maszyna do pisania; opóźnienia występowały często na interaktywne sesje dla wielu użytkowników; dodatkowo często motywowano się do oszczędzania papieru).Tak więc składnia większości
:
poleceń obejmuje adres lub zakres adresów (numer linii), po którym następuje polecenie. Oczywiście można użyć literalnych numerów linii::127,215 s/foo/bar
aby zmienić pierwsze wystąpienie „foo” na „słupek” na każdej linii między 127 a 215. Można również użyć niektórych skrótów, takich jak.
lub odpowiednio$
dla bieżącej i ostatniej linii. Można również użyć względnych prefiksów+
i-
odnieść się do przesunięć odpowiednio przed lub przed linią bieżącą. A zatem::.,$j
oznacza „od bieżącej linii do ostatniej linii, połącz je wszystkie w jedną linię”.:%
jest synonimem:1,$
(wszystkie linie).:... g
I:... v
polecenia ponieść jakieś wytłumaczenie, ponieważ są one bardzo silne.:... g
jest prefiksem dla „globalnie” zastosowania kolejnego polecenia do wszystkich wierszy, które pasują do wzorca (wyrażenie regularne), podczas gdy:... v
stosuje takie polecenie do wszystkich wierszy, które NIE pasują do danego wzorca („v” z „conVerse”). Podobnie jak w przypadku innych komend ex , można je poprzedzić adresowaniem / odniesieniami zakresu. Oznacza:.,+21g/foo/d
to zatem „usuń wszystkie wiersze zawierające ciąg„ foo ”z bieżącego do kolejnych 21 wierszy”, a jednocześnie:.,$v/bar/d
„od tego miejsca do końca pliku usuń wszystkie wiersze, które NIE zawierają ciągu„ pasek ”.Interesujące jest to, że popularna komenda uniksowa grep została zainspirowana tym poleceniem ex (i nosi nazwę po sposobie, w jaki została udokumentowana). Ex komenda
:g/re/p
(grep) był sposób udokumentowane, jak „globalnie” „Drukuj” linie zawierające „wyrażenia regularnego” (RE). Kiedy użyto ed i ex ,:p
polecenie było jednym z pierwszych, które ktokolwiek się nauczył, i często pierwszym, którego użyto podczas edycji dowolnego pliku. W ten sposób wydrukowałeś bieżącą zawartość (zwykle tylko jedną stronę zapełnioną na raz za pomocą:.,+25p
lub jakąś taką).Zauważ, że
:% g/.../d
lub (jego odpowiednik reVerse / conVerse::% v/.../d
są najczęstszymi wzorcami użytkowania. Istnieje jednak kilka innychex
poleceń, o których warto pamiętać:Możemy używać
m
do przesuwania linii ij
łączenia linii. Na przykład, jeśli masz listę i chcesz oddzielić wszystkie elementy pasujące (lub odwrotnie NIE pasujące do jakiegoś wzoru) bez ich usuwania, możesz użyć czegoś takiego::% g/foo/m$
... i wszystkie linie „foo” zostaną przeniesione do koniec pliku. (Zwróć uwagę na drugą wskazówkę dotyczącą używania końca pliku jako miejsca na zarysowania). Pozwoli to zachować względną kolejność wszystkich wierszy „foo”, po wyodrębnieniu ich z reszty listy. (Byłoby to równoważne z zrobieniem czegoś takiego:1G!GGmap!Ggrep foo<ENTER>1G:1,'a g/foo'/d
(skopiuj plik do własnego ogona, przefiltruj ogongrep
i usuń wszystkie rzeczy z głowy).Aby połączyć linie zwykle, mogę znaleźć wzór dla wszystkich linii, które muszą być połączone z ich poprzednikiem (na przykład wszystkie linie, które zaczynają się od „^” zamiast „^ *” na niektórych listach punktowanych). W takim przypadku użyłbym:
:% g/^ /-1j
(dla każdej pasującej linii, przejdź o jedną linię w górę i dołącz do nich). (BTW: na listach kulach próbuje szukać linii kulach i przystąpić do następnego nie praca dla paru powodów ... może przyłączyć jedną linię kula do drugiego, a nie będzie dołączyć dowolną linię kula do wszystkich z jego kontynuacje; będzie działać tylko parami na meczach).Prawie nie trzeba wspominać, że możesz użyć naszego starego przyjaciela
s
(zamiennik) z poleceniamig
iv
(global / converse-global). Zwykle nie musisz tego robić. Zastanów się jednak nad przypadkiem, w którym chcesz wykonać podstawienie tylko w wierszach pasujących do innego wzorca. Często możesz użyć skomplikowanego wzorca z przechwytywaniem i użyć referencji wstecznych, aby zachować fragmenty linii, których NIE chcesz zmienić. Jednak często łatwiej będzie oddzielić dopasowanie od podstawienia::% g/foo/s/bar/zzz/g
- dla każdej linii zawierającej „foo” zamień wszystkie „bar” na „zzz”. (Coś jak:% s/\(.*foo.*\)bar\(.*\)/\1zzz\2/g
działałby tylko w przypadkach tych przypadków „bar”, które WSTĘPNE były przez „foo” w tej samej linii; jest już dość niewygodny i musiałby zostać zmasakrowany, aby złapać wszystkie przypadki, w których „bar” poprzedzał „foo”)Chodzi o to, że istnieje więcej niż tylko
p
,s
id
linii wex
zestawie poleceń.Te
:
adresy mogą również odnosić się do znaków. Zatem możesz użyć::'a,'bg/foo/j
do połączenia dowolnej linii zawierającej ciąg foo z kolejną linią, jeśli leży ona między liniami między znakami „ a ” i „ b ”. (Tak, wszystkie powyższeex
przykłady poleceń można ograniczyć do podzbiorów wierszy pliku, poprzedzając je tego rodzaju wyrażeniami adresującymi).To dość niejasne (użyłem czegoś takiego tylko kilka razy w ciągu ostatnich 15 lat). Przyznam jednak, że często robiłem rzeczy iteracyjnie i interaktywnie, co prawdopodobnie można by zrobić bardziej efektywnie, gdybym poświęcił czas na wymyślenie właściwej inkantacji.
Innym bardzo przydatnym poleceniem vi lub ex jest
:r
odczytanie zawartości innego pliku. Zatem::r foo
wstawia zawartość pliku o nazwie „foo” w bieżącym wierszu.Potężniejsze jest
:r!
polecenie. To odczytuje wyniki polecenia. To tak samo, jak zawieszanie sesji vi , uruchamianie polecenia, przekierowywanie danych wyjściowych do pliku tymczasowego, wznawianie sesji vi i wczytywanie zawartości z temp. plik.Jeszcze bardziej potężny jesteś
!
(huk) i:... !
( ex huk) poleceń. Wykonują one również zewnętrzne polecenia i odczytują wyniki w bieżącym tekście. Jednak filtrują również zaznaczenie naszego tekstu za pomocą polecenia! W ten sposób możemy posortować wszystkie wiersze w naszym pliku za pomocą1G!Gsort
(G
jest to polecenie vi „goto”; domyślnie przechodzi do ostatniego wiersza pliku, ale może być poprzedzone numerem wiersza, takim jak 1, pierwszy wiersz). Jest to równoważne wariantowi ex:1,$!sort
. Pisarze często używają!
uniksowych narzędzi fmt lub fold do przekształcania lub „zawijania tekstu” zaznaczeń tekstu. Bardzo częstym makrem jest{!}fmt
(ponownie sformatuj obecny akapit). Programiści czasami używają go do uruchamiania kodu lub tylko jego części za pomocą wcięć lub innych narzędzi do formatowania kodu.Użycie poleceń
:r!
i!
oznacza, że każde zewnętrzne narzędzie lub filtr można traktować jako rozszerzenie naszego edytora. Czasami używałem ich ze skryptami, które wyciągały dane z bazy danych, lub z poleceniami wget lub lynx , które ściągały dane ze strony internetowej, lub poleceniami ssh , które wyciągały dane ze zdalnych systemów.Innym przydatnym poleceniem ex jest
:so
(skrót od:source
). Czyta zawartość pliku jako serię poleceń. Kiedy zaczynasz vi normalnie, domyślnie, wykonuje on:source
na~/.exinitrc
pliku (a Vim zwykle robi to na~/.vimrc
, oczywiście). Wykorzystanie tego polega na tym, że możesz zmienić profil edytora w locie, po prostu pozyskując nowy zestaw makr, skrótów i ustawień edytora. Jeśli jesteś podstępny, możesz nawet użyć tego jako sztuczki do przechowywania sekwencji poleceń ex edycji, aby zastosować je do plików na żądanie.Na przykład mam plik z siedmioma wierszami (36 znaków), który uruchamia plik przez wc i wstawia komentarz w stylu C u góry pliku zawierającego dane o liczbie słów. Mogę zastosować to „makro” do pliku za pomocą polecenia takiego jak:
vim +'so mymacro.ex' ./mytarget
(
+
Opcja vi i Vim z wiersza poleceń jest zwykle używana do rozpoczęcia sesji edytowania pod danym numerem wiersza. Jednak mało znany jest fakt, że można podążać+
za dowolnym prawidłowym poleceniem / wyrażeniem ex , takim jak polecenie „źródło” jako Zrobiłem to tutaj; dla prostego przykładu mam skrypty, które wywołują:vi +'/foo/d|wq!' ~/.ssh/known_hosts
aby usunąć wpis z mojego znanego pliku hostów SSH w sposób nieinteraktywny, gdy ponownie obrazuję zestaw serwerów).Zazwyczaj o wiele łatwiej jest pisać takie „makra” przy użyciu Perla, AWK, sed (co w rzeczywistości przypomina grep, narzędzie zainspirowane poleceniem ed ).
@
Komenda jest prawdopodobnie najbardziej niejasny vi poleceń. Od czasu do czasu ucząc zaawansowanych kursów administracji systemów przez prawie dekadę, spotkałem bardzo mało osób, które kiedykolwiek z nich korzystały.@
wykonuje zawartość rejestru tak, jakby to była komenda vi lub ex .Przykład: często używam:
:r!locate ...
do znalezienia jakiegoś pliku w moim systemie i odczytania jego nazwy do mojego dokumentu. Stamtąd usuwam wszelkie obce trafienia, pozostawiając tylko pełną ścieżkę do pliku, który mnie interesuje. Zamiast żmudnego Tabprzeszukiwania każdego elementu ścieżki (lub gorzej, jeśli utknąłem na komputerze bez obsługi uzupełniania tabulacji w kopii vi ) Używam po prostu:0i:r
(aby zmienić bieżącą linię w poprawną komendę : r ),"cdd
(aby usunąć wiersz z rejestru „c”) i@c
wykonać to polecenie.To tylko 10 naciśnięć klawiszy (a wyrażenie
"cdd
@c
to dla mnie makro palca, więc mogę wpisać je prawie tak szybko, jak każde zwykłe sześcioliterowe słowo).Trzeźwa myśl
Podszedłem tylko na powierzchnię mocy vi i nic z tego, co tu opisałem, nie jest nawet częścią „ulepszeń”, od których pochodzi vim ! Wszystko, co tu opisałem, powinno działać na każdej starej kopii vi sprzed 20 lub 30 lat.
Są ludzie, którzy wykorzystali znacznie więcej mocy vi niż kiedykolwiek.
źródło
@
często używam polecenia (w połączeniu zq
: rekordem makro)Mówisz o zaznaczaniu i kopiowaniu tekstu, myślę, że powinieneś spojrzeć na tryb wizualny Vima .
W trybie wizualnym możesz zaznaczać tekst za pomocą poleceń Vima, a następnie możesz robić, co chcesz z zaznaczeniem.
Rozważ następujące typowe scenariusze:
Musisz wybrać następny pasujący nawias.
Mógłbyś:
v%
jeśli kursor znajduje się w nawiasie początkowym / końcowymvib
jeśli kursor znajduje się w bloku nawiasuChcesz zaznaczyć tekst między cytatami:
Chcesz wybrać nawias klamrowy (bardzo powszechny w językach w stylu C):
viB
vi{
Chcesz wybrać cały plik:
ggVG
Wizualny wybór bloku to kolejna bardzo przydatna funkcja, która pozwala wybrać prostokątny obszar tekstu, wystarczy nacisnąć Ctrl- Vaby go uruchomić, a następnie wybrać żądany blok tekstu i wykonać dowolną operację, taką jak szarpnięcie, usunięcie, wklej, edytuj itp. Świetnie jest edytować tekst zorientowany na kolumny .
źródło
o
przeskoczy na drugi koniec. Możesz więc dowolnie przesuwać początek i koniec zaznaczenia.Kilka wskazówek dotyczących wydajności:
Inteligentne ruchy
*
i#
wyszukaj słowo pod kursorem do przodu / do tyłu.w
do następnego słowaW
do następnego słowa oddzielonego spacjąb
/e
do początku / końca bieżącego słowa. (B
/ tylkoE
dla spacji oddzielonych)gg
/G
przeskocz na początek / koniec pliku.%
przejdź do pasującego {..} lub (..) itp.{
/}
przejdź do następnego akapitu.'.
przeskocz z powrotem do ostatnio edytowanej linii.g;
przeskocz z powrotem do ostatnio edytowanej pozycji.Szybkie polecenia edycji
I
wstaw na początku.A
dołącz do końca.o
/O
otwórz nową linię po / przed bieżącym.v
/V
/Ctrl+V
tryb wizualny (aby zaznaczyć tekst!)Shift+R
zamień tekstC
zmień pozostałą część linii.Łączenie poleceń
Większość poleceń akceptuje wielkość i kierunek, na przykład:
cW
= zmiana do końca słowa3cW
= zmień 3 słowaBcW
= aby rozpocząć pełne słowo, zmień pełne słowociW
= zmień wewnętrzne słowo.ci"
= zmiana wewnętrzna pomiędzy „..”ci(
= zmień tekst pomiędzy (..)ci<
= zmień tekst pomiędzy <..> (wymagaset matchpairs+=<:>
vimrc)4dd
= usuń 4 linie3x
= usuń 3 znaki3s
= zamień 3 znaki.Przydatne polecenia programisty
r
zamień jeden znak (np.rd
zamienia bieżący znak nad
).~
zmienia wielkość liter.J
łączy dwie linie.
powtórz ostatnie polecenie (proste makro)==
napraw wcięcie linii>
blok wcięcia (w trybie wizualnym)<
nieindent blok (w trybie wizualnym)Nagrywanie makr
q[ key ]
aby rozpocząć nagrywanie.q
aby zatrzymać nagrywanie.@[ key ]
.Używając bardzo specyficznych poleceń i ruchów, VIM może odtworzyć dokładnie te akcje dla następnych linii. (np. A dla append-to-end,
b
/e
aby przesunąć kursor odpowiednio na początek lub koniec słowa)Przykład dobrze zbudowanych ustawień
Ustawienia można zapisać w
~/.vimrc
systemie lub w/etc/vimrc.local
całym systemie, a następnie odczytać z/etc/vimrc
pliku za pomocą:(będziesz musiał zamienić
#
znak komentarza"
na, aby działał w VIM, chciałem tutaj odpowiednio podświetlić składnię).Polecenia, które tu wymieniłem, są dość podstawowe, a głównych z nich używam do tej pory. Już teraz sprawiają, że jestem bardziej produktywny, bez konieczności poznawania wszystkich wymyślnych rzeczy.
źródło
'.
jestg;
, co skacze z powrotem przezchangelist
. Przechodzi do ostatnio edytowanej pozycji, zamiast ostatnio edytowanej liniiControl+ RMechanizm jest bardzo przydatna :-) W każdym wkładka trybie lub trybie poleceń (czyli na
:
linii komend podczas typowania), przejdź do numerowaną lub nazwie zarejestrować:Zobacz
:help i_CTRL-R
i:help c_CTRL-R
więcej szczegółów, i węsz w pobliżu, aby uzyskać więcej dobroci CTRL-R.źródło
Control-A
działa również w trybie wstawiania ostatniego wstawionego tekstu, a takżeControl-@
do wstawiania ostatnio wstawionego tekstu i natychmiastowego przejścia do trybu normalnego.Wtyczki Vima
Jest tu wiele dobrych odpowiedzi i jedna niesamowita o zen vi. Jednej rzeczy, o której nie widzę, to to, że vim jest wyjątkowo rozszerzalny poprzez wtyczki. Istnieją skrypty i wtyczki, dzięki którym robi różne szalone rzeczy, których autor nigdy nie rozważał. Oto kilka przykładów niezwykle przydatnych wtyczek vim:
rails.vim
Rails.vim to wtyczka napisana przez tpope. To niesamowite narzędzie dla osób rozwijających szyny. Robi magiczne kontekstowe rzeczy, które pozwalają łatwo przejść z metody w kontrolerze do powiązanego widoku, do modelu, a następnie do testów jednostkowych dla tego modelu. Zaoszczędził dziesiątki, jeśli nie setki godzin, jako programista szyn.
gist.vim
Ta wtyczka pozwala wybrać region tekstu w trybie wizualnym i wpisać szybkie polecenie, aby opublikować go na gist.github.com . Pozwala to na łatwy dostęp do pastebin, co jest niezwykle przydatne, jeśli współpracujesz z kimś przez IRC lub IM.
space.vim
Ta wtyczka zapewnia specjalną funkcjonalność spacji. Zmienia spację w coś analogicznego do kropki, ale zamiast powtarzania akcji powtarza ruchy. Może to być bardzo przydatne do szybkiego poruszania się po pliku w sposób zdefiniowany na bieżąco.
surround.vim
Ta wtyczka umożliwia pracę z tekstem, który jest w pewien sposób rozdzielany. Daje ci obiekty, które oznaczają rzeczy w parenach, rzeczy w cudzysłowach itp. Może się przydać do manipulowania tekstem ograniczonym.
supertab.vim
Ten skrypt zapewnia fantazyjną funkcjonalność uzupełniania tabulatorów. Funkcje autouzupełniania są już w rdzeniu vima, ale dzięki temu można przejść do szybkiej karty, a nie do wielu różnych skrótów. Bardzo poręczny i niezwykle przyjemny w użyciu. Chociaż nie jest to inteligencja VS, jest to świetny krok i zapewnia wiele funkcji, których można oczekiwać od narzędzia do uzupełniania kart.
syntastic.vim
To narzędzie przenosi zewnętrzne polecenia sprawdzania składni do vima. Nie korzystałem z niego osobiście, ale słyszałem o nim świetne rzeczy, a koncepcja jest trudna do pokonania. Sprawdzanie składni bez konieczności ręcznego wykonywania tej czynności pozwala zaoszczędzić czas i może pomóc w wychwyceniu błędów składniowych podczas ich wprowadzania, a nie kiedy w końcu przestajesz testować.
fugitive.vim
Bezpośredni dostęp do git od wewnątrz vima. Ponownie nie użyłem tej wtyczki, ale widzę narzędzie. Niestety jestem w kulturze, w której svn jest uważany za „nowy”, więc prawdopodobnie nie zobaczę gita w pracy przez dłuższy czas.
nerdtree.vim
Przeglądarka drzew dla vima. Zacząłem używać tego niedawno i jest to naprawdę przydatne. Pozwala na umieszczenie widoku drzewa w pionowym podziale i łatwe otwieranie plików. Jest to idealne rozwiązanie dla projektu z dużą ilością plików źródłowych, między którymi często przeskakujesz.
FuzzyFinderTextmate.vim
Jest to nieobsługiwana wtyczka, ale nadal niezwykle przydatna. Umożliwia otwieranie plików przy użyciu „rozmytej” składni opisowej. Oznacza to, że w rzadkim drzewie plików wystarczy wpisać wystarczającą liczbę znaków, aby rozróżnić pliki, które są zainteresowane od reszty cruft.
Wniosek
Istnieje wiele niesamowitych narzędzi dostępnych dla vima. Jestem pewien, że zarysowałem tu tylko powierzchnię i warto poszukać narzędzi odpowiednich dla Twojej domeny. Połączenie tradycyjnego potężnego zestawu narzędzi vi, ulepszeń vima i wtyczek, które rozszerzają vim jeszcze bardziej, jest to jeden z najpotężniejszych sposobów edycji tekstu, jaki kiedykolwiek wymyślono. Vim jest równie potężny jak emacs, eclipse, studio graficzne i partner tekstowy.
Dzięki
Dzięki duwanis za jego konfiguracje vim, z których wiele się nauczyłem i pożyczyłem większość wymienionych tutaj wtyczek.
źródło
.
Powtórz ostatnie polecenie zmiany tekstuZ tym oszczędzam dużo czasu.
Tryb wizualny został wspomniany wcześniej, ale tryb wizualny blokowy zaoszczędził mi dużo czasu podczas edycji kolumn o stałym rozmiarze w pliku tekstowym. (dostępne za pomocą Ctrl-V).
źródło
.
klawisz.żołnierz amerykański
Przejdź do ostatnio edytowanej lokalizacji (bardzo przydatne, jeśli przeprowadziłeś wyszukiwanie i chcesz wrócić do edycji)
^ P i ^ N
Uzupełnij poprzedni (^ P) lub następny (^ N) tekst.
^ O i ^ I
Przejdź do poprzedniej (
^O
-"O"
dla starej) lokalizacji lub do następnej (^I
-"I"
tuż obok"O"
). Podczas wyszukiwania, edycji plików itp. Możesz poruszać się po tych „skokach” do przodu i do tyłu.źródło
Niedawno (mam) odkryłem tę stronę: http://vimcasts.org/
Jest całkiem nowy i naprawdę bardzo dobry. Facet, który prowadzi witrynę, przeszedł z textmate na vim i organizuje bardzo dobre i zwięzłe wypowiedzi na określone tematy vim. Sprawdź to!
źródło
CTRL+A zwiększa liczbę, na której stoisz.
źródło
Wszystko w trybie normalnym:
f <char>, aby przejść do następnego wystąpienia określonego znaku w bieżącym wierszu, oraz ; powtarzać.
F <char>, aby przejść do poprzedniego wystąpienia określonego znaku w bieżącym wierszu i ;powtarzać.
Jeśli użyjesz ich inteligentnie, powyższe dwa mogą sprawić, że zabijesz się szybko w linii.
* na słowie, aby wyszukać następną instancję.
# na słowie, aby wyszukać poprzednie wystąpienie.
źródło
ct(
usuwa słowo i wprowadza cię w tryb wstawiania, ale zachowaj nawiasy!Sesja
za. Zapisz sesję
b. wymuś sesję oszczędzania
do. ładowanie sesji
Dodawanie i odejmowanie
za. Dodawanie i odejmowanie
b. Odznaczanie klucza okna
do. Z Makro
źródło
W zeszłym tygodniu w pracy nasz projekt odziedziczył wiele kodu Python z innego projektu. Niestety kod nie pasował do naszej istniejącej architektury - wszystko zostało wykonane przy użyciu globalnych zmiennych i funkcji, które nie działałyby w środowisku wielowątkowym.
Mieliśmy ~ 80 plików, które należało przerobić, aby były zorientowane obiektowo - wszystkie funkcje przeniesiono do klas, zmieniono parametry, dodano instrukcje importu itp. Mieliśmy listę około 20 rodzajów poprawek, które należało wykonać w każdym pliku. Oceniłbym, że robiąc to ręcznie jedna osoba mogłaby zrobić może 2-4 dziennie.
Więc zrobiłem pierwszy ręcznie, a potem napisałem skrypt vim, aby zautomatyzować zmiany. Większość z nich to lista poleceń vima, np
Ten ostatni zasługuje na trochę wyjaśnienia:
Dla kilku bardziej złożonych transformacji, takich jak generowanie wszystkich instrukcji importu, osadziłem trochę Pythona w skrypcie vim.
Po kilku godzinach pracy nad nim miałem skrypt, który wykona co najmniej 95% konwersji. Po prostu otwieram plik w vimie, a następnie uruchamiam,
:source fixit.vim
a plik jest przekształcany w mgnieniu oka.Nadal pracujemy nad zmianą pozostałych 5%, co nie było warte automatyzacji i testowaniem wyników, ale spędzając dzień na pisaniu tego skryptu, szacuję, że zaoszczędziliśmy tygodnie pracy.
Oczywiście możliwe byłoby zautomatyzowanie tego za pomocą języka skryptowego, takiego jak Python lub Ruby, ale pisanie zajęłoby znacznie więcej czasu i byłoby mniej elastyczne - ostatni przykład byłby trudny, ponieważ sam regex nie byłby w stanie obsłużyć wsporniki zagnieżdżone, na przykład konwertować
bar(foo(xxx))
dofoo(xxx).bar()
. Vim był idealny do tego zadania.źródło
%s/\(bar\)(\(.\+\))/\2.\1()/
też by to zrobił. (Ucieczki są kompatybilne:set magic
.) Tylko dla nagrania. :)%s/\v(bar)\((.+)\)/\2.\1()/
if bar(foo(xxx)) or wibble(xxx):
stajeif foo(xxx)) or wibble(xxx.bar():
się całkowicie błędne.Skorzystaj z wbudowanego eksploratora plików! Polecenie
:Explore
to pozwala bardzo szybko poruszać się po kodzie źródłowym. Mam te mapowania w moim.vimrc
:Eksplorator umożliwia także modyfikowanie plików. Wyślę niektóre z moich ulubionych klawiszy, naciśnięcie
<F1>
da ci pełną listę:cd ..
)źródło
:find
,:tag
i różnych związanych z klawiszy, aby skakać. (Może to dlatego, że drzewa źródłowe, nad którymi pracuję, są duże i zorganizowane inaczej niż bym to zrobił? :))Jestem członkiem American Cryptogram Association. Dwumiesięcznik zawiera ponad 100 różnych kryptogramów. Około 15 z nich to „kryptowaluty” - różne rodzaje problemów arytmetycznych z literami zastępowanymi cyframi. Dwa lub trzy z nich to sudokus, z wyjątkiem liter zamiast cyfr. Po zakończeniu siatki dziewięć różnych liter przeliteruje słowo lub słowa, w pewnej linii, po przekątnej, spirali itp., Gdzieś na siatce.
Zamiast pracować ołówkiem lub ręcznie wpisywać problemy, pobieram problemy z obszaru członków ich witryny.
Podczas pracy z tymi sudokusami używam vi, po prostu dlatego, że korzystam z udogodnień, które vi ma tak niewiele innych edytorów. Głównie podczas przekształcania literowanej siatki w numerowaną siatkę, ponieważ łatwiej mi rozwiązać, a następnie wypełnioną numerowaną siatkę z powrotem w siatkę z literami, aby znaleźć słowo lub słowa rozwiązania.
Problem jest sformatowany jako dziewięć grup po dziewięć liter, z
-
s oznacza puste miejsca, zapisane w dwóch wierszach. Pierwszym krokiem jest sformatowanie ich w dziewięć wierszy po dziewięć znaków każdy. Nie ma w tym nic specjalnego, wystarczy wstawić osiem podziałów wierszy w odpowiednich miejscach.Wynik będzie wyglądał następująco:
Pierwszym krokiem w konwersji tego na liczby jest utworzenie listy różnych liter. Najpierw robię kopię bloku. Ustawiam kursor na górze bloku, a następnie piszę
:y}}p
.:
przełącza mnie w tryb dowodzenia,y
szarpnie następne polecenie ruchu. Ponieważ}
jest to przejście do końca następnego akapitu,y}
ciągnie akapit.}
następnie przesuwa kursor na koniec akapitu ip
wkleja to, co szarpnęliśmy tuż za kursorem. Więcy}}p
tworzy kopię następnym akapicie, a kończy się z kursorem między dwiema kopiami.Następnie przekształcam jedną z tych kopii w listę wyraźnych liter. To polecenie jest nieco bardziej złożone:
:
ponownie wprowadza mnie w tryb poleceń.!
wskazuje, że zawartość następnego szarpnięcia powinna być poprowadzona przez linię poleceń.}
yankuje następny akapit, a linia poleceń następnie używatr
komendy rozebrać się wszystkiego z wyjątkiem dużych liter,sed
polecenie, aby wydrukować każdą literę na jednej linii, asort
polecenie, aby uporządkować te linie, usuwanie duplikatów, a następnietr
wycina znaki nowej linii, pozostawiając dziewięć różnych liter w jednym wierszu, zastępując dziewięć linii, które pierwotnie stanowiły akapit. W takim przypadku litery to:ACELNOPST
.Następnym krokiem jest zrobienie kolejnej kopii siatki. A następnie użyć litery Właśnie zidentyfikowanych zastąpić każdego z tych listów od cyfry od 1 do 9. To proste:
:!}tr ACELNOPST 0-9
. Wynik to:Można to rozwiązać w zwykły sposób lub wprowadzić dowolny solver sudoku. Gotowe rozwiązanie można następnie przekonwertować na litery za pomocą
:!}tr 1-9 ACELNOPST
.W vi jest moc, którą dopasowuje bardzo niewiele innych. Największym problemem jest to, że tylko bardzo niewiele samouczków vi, stron internetowych, plików pomocy itp. Robi więcej niż ledwo dotyka powierzchni tego, co jest możliwe.
źródło
:
przejść do trybu poleceń, ale niezmiennie określasz polecenia trybu normalnego (jaky}}p
), które nie mogą działać z trybu poleceń ?!:se tw=1 fo=
(przygotowanie)VG:s/./& /g
(wstawianie spacji),gvgq
(podział na osobne linie),V{:sort u
(sortowanie i usuwanie duplikatów)Masowe manipulacje tekstem!
Albo poprzez makra:
qq
q
@q
(po raz pierwszy),@@
potem.20@@
Lub poprzez wyrażenia regularne:
:%s/[fo]+/bar/g
(Ale uwaga: jeśli zrobisz to drugie, będziesz mieć 2 problemy :).)
źródło
:% g/foo/-1j
lub:'a,'z v/bar/-1j
na przykład (gdzie pierwsza to „wszystkie linie i pasujące do wzorca” podczas gdy ten ostatni to „linie między znakiem a i znakiem z, które nie pasują do wzorca”). Część po tupot w komendzie ag
lubv
ex może być dowolną inną komendą ex, -1j to tylko względny ruch linii i polecenie łączenia.Niedawno odkryłem
q:
. Otwiera „okno poleceń” i pokazuje ostatnie polecenia w trybie ex (tryb poleceń). Możesz poruszać się jak zwykle w oknie, a naciśnięcie<CR>
powoduje wykonanie polecenia. Możesz także edytować itp. Bezcenne, gdy masz do czynienia z jakimś skomplikowanym poleceniem lub wyrażeniem regularnym i nie chcesz przepisać całej rzeczy lub jeśli złożona rzecz, którą chcesz zrobić, to 3 polecenia wstecz. To prawie jak bashset -o vi
, ale dla samego vima (he!).Zobacz
:help q:
więcej interesujących fragmentów dotyczących przechodzenia tam i z powrotem.źródło
Niedawno odkryłem omijanie Vima i choć przyznaję, że jestem trochę mętny w tym, co robi, miałem zaskakująco dobre wyniki, łącząc Ctrl+ x Ctrl+ ulub Ctrl+ n/ Ctrl+ pw trybie wstawiania. To nie jest całkiem IntelliSense , ale wciąż się tego uczę.
Wypróbuj to!
:help ins-completion
źródło
Nie są to skróty, ale są powiązane:
Zwiększają moją wydajność.
źródło
Capslock::Escape
Innym przydatnym „skrótem” vi, którego często używam, jest „xp”. Spowoduje to zamianę znaku pod kursorem na następny znak.
źródło
Xp
iść w drugą stronę<Ctrl> + W, V, aby podzielić ekran w pionie
<Ctrl> + W, W, aby przełączać się między oknami
! python% [args], aby uruchomić skrypt, który edytuję w tym oknie
ZF w trybie wizualnym do składania dowolnych linii
źródło
<C-w>n
albo<C-w>s
jest nowe okno poziomy,<C-w>b
jest w prawym dolnym rogu okna,<C-w>c
lub<C-w>q
znajduje się w pobliżu okna,<C-w>x
jest wzrost, a następnie zmniejszyć szerokość okna (??),<C-w>p
to ostatnie okno,<C-w>backspace
jest okno ruch w lewo (owski):help ctrl-w
FTW ... zrób sobie przysługę i zmuś się do wypróbowania tych rzeczy przez co najmniej 15 minut!Tryb wizualny
Jak powiedziało kilka innych osób, tryb wizualny jest odpowiedzią na problem z kopiowaniem / wycinaniem i wklejaniem. Vim daje ci „v”, „V” i Cv. Małe litery „v” w vimie są zasadniczo takie same, jak klawisz Shift w notatniku. Zaletą jest to, że nie musisz tego przytrzymywać. Możesz użyć dowolnej techniki ruchu, aby skutecznie nawigować do początkowego (lub końcowego) punktu swojego wyboru. Następnie naciśnij „v” i ponownie skorzystaj z wydajnych technik ruchu, aby przejść do drugiego końca swojego wyboru. Następnie „d” lub „y” pozwala wyciąć lub skopiować ten wybór.
Zaletą trybu wizualnego vima w stosunku do opisu wycinania / kopiowania / wklejania w vi przez Jima Dennisa jest to, że nie musisz dokładnie ustalać lokalizacji. Czasami bardziej efektywne jest użycie szybkiego ruchu, aby dostać się do ogólnego miejsca, w którym chcesz się udać, a następnie udoskonalenie go innymi ruchami, niż wymyślenie bardziej złożonego polecenia pojedynczego ruchu, który doprowadzi cię dokładnie tam, gdzie chcesz się udać.
Minusem szerokiego korzystania z trybu wizualnego w ten sposób jest to, że może on stać się kulą, której używasz przez cały czas, co uniemożliwia naukę nowych poleceń vi (m), które mogą pozwolić ci robić rzeczy bardziej wydajnie. Jeśli jednak jesteś bardzo proaktywny w uczeniu się nowych aspektów vi (m), prawdopodobnie nie wpłynie to zbytnio na ciebie.
Podkreślę również, że tryby wizualnej linii i bloków wizualnych dają odmiany tego samego motywu, który może być bardzo potężny ... zwłaszcza tryb blokowania wizualnego.
Efektywne korzystanie z klawiatury
Nie zgadzam się również z twoim twierdzeniem, że naprzemienne ręce to najszybszy sposób korzystania z klawiatury. Ma w sobie element prawdy. Mówiąc bardzo ogólnie, wielokrotne używanie tego samego jest powolne. Najbardziej znaczącym przykładem tej zasady jest to, że kolejne naciśnięcia tego samego palca są bardzo powolne. Twoje twierdzenie prawdopodobnie wynika z naturalnej tendencji do używania s / palca / dłoni / transformacji na tym wzorze. W pewnym stopniu jest to poprawne, ale na skrajnie wysokim spektrum wydajności jest nieprawidłowe.
Zapytaj dowolnego pianisty. Zapytaj ich, czy szybciej jest zagrać kilka kolejnych nut naprzemiennie rękami, czy też używać kolejno kolejnych palców jednej ręki. Najszybszym sposobem na wpisanie 4 naciśnięć klawiszy nie jest naprzemienne układanie rąk, ale pisanie ich 4 palcami tej samej ręki w kolejności rosnącej lub malejącej (nazwij to „biegiem”). Powinno to być oczywiste po rozważeniu tej możliwości.
Trudniejszym problemem jest optymalizacja w tym celu. Optymalizacja pod kątem absolutnej odległości na klawiaturze jest dość łatwa. Vim to robi. Dużo trudniej jest zoptymalizować na poziomie „uruchamiania”, ale vi (m) dzięki edycji modalnej daje większą szansę na to, aby to zrobić, niż jakiekolwiek inne podejście niemodalne (emhem, emacs).
Na Emacsie
Aby fanatycy emacsa całkowicie zignorowali cały mój post ze względu na ostatni komentarz w nawiasie, czuję, że muszę opisać źródło różnicy między religiami emacs i vim. Nigdy nie wypowiadałem się w wojnach redaktorów i prawdopodobnie już tego nie zrobię, ale nigdy nie słyszałem, żeby ktoś tak opisywał różnice, więc proszę bardzo. Różnica polega na następującym kompromisie:
Vim zapewnia niezrównaną wydajność edycji surowego tekstu Emacs daje niezrównaną możliwość dostosowywania i programowania edytora
Niewidomi fanatyki vim twierdzą, że vim ma język skryptowy. Ale jest to niejasny, doraźny język, który został zaprojektowany, by służyć redaktorowi. Emacs ma Lisp! Wystarczająco powiedziane. Jeśli nie doceniasz znaczenia tych dwóch ostatnich zdań lub chcesz nauczyć się wystarczająco dużo o programowaniu funkcjonalnym i Lisp, aby rozwinąć to uznanie, powinieneś użyć vim.
Zealoci emacsa twierdzą, że emacs ma tryb vipera, a więc jest nadzbiorem vim. Ale tryb vipera nie jest standardem. Rozumiem, że większość użytkowników emacsa nie używa trybu vipera. Ponieważ nie jest to domyślne, większość użytkowników emacsa prawdopodobnie nie docenia prawdziwych korzyści płynących z paradygmatu modalnego.
Moim zdaniem różnice te są ortogonalne. Wierzę, że korzyści z vima i emacsa, jak już powiedziałem, są ważne. Oznacza to, że ostateczny edytor jeszcze nie istnieje. Prawdopodobnie to prawda, że emacs byłby najłatwiejszą platformą, na której można oprzeć ostatecznego edytora. Ale edycja modalna nie jest zakorzeniona w sposobie myślenia emacsa. Społeczność emacsa mogłaby się w przyszłości zmienić, ale nie wydaje się to zbyt prawdopodobne.
Więc jeśli chcesz surowej wydajności edycji, użyj vim. Jeśli chcesz mieć najlepsze środowisko do tworzenia skryptów i programowania, użyj edytora emacs. Jeśli chcesz niektóre z nich z naciskiem na programowalność, użyj emacsa w trybie vipera (lub zaprogramuj własny tryb). Jeśli chcesz tego, co najlepsze z obu światów, na razie nie masz szczęścia.
źródło
Poświęć 30 minut na samouczek vim (uruchom vimtutor zamiast vim w terminalu). Nauczysz się podstawowych ruchów i niektórych naciśnięć klawiszy, dzięki czemu będziesz przynajmniej tak produktywny dzięki vimowi, jak w edytorze tekstu, którego używałeś wcześniej. Potem dobrze przeczytaj odpowiedź Jima Dennisa :)
źródło
Możliwość wykonywania złożonych, powtarzalnych edycji przy bardzo niewielu naciśnięciach klawiszy (często przy użyciu makr ). Spójrz na VimGolf aby zobaczyć moc Vima!
Po ponad dziesięciu latach niemal codziennego użytkowania trudno wyobrazić sobie używanie innego edytora.
źródło
Użyj
\c
dowolnego miejsca w wyszukiwaniu, aby zignorować wielkość liter (zastępując ustawienia ignorowania lub inteligentnej). Np/\cfoo
czy/foo\c
będą pasowaćfoo
,Foo
,fOO
,FOO
, itd.Użyj w
\C
dowolnym miejscu wyszukiwania, aby wymusić dopasowanie wielkości liter. Np./\Cfoo
Lub/foo\C
będzie pasować tylko do foo.źródło
Byłem zaskoczony, gdy nikt nie wspomniał o
t
ruchu. Często używam go z listami parametrów w postacidt,
lubyt,
źródło
Dziwne, nikt nie wspominał o tagach. Pobierz „żywiołowe ctagi” i umieść je przed gównianą, wstępnie zainstalowaną wersją, którą już masz na ścieżce wyszukiwania. Cd do katalogu głównego tego, nad czym pracujesz; na przykład dystrybucja jądra Androida. Wpisz „ctags -R”. aby zbudować indeks plików źródłowych w dowolnym miejscu poniżej tego katalogu w pliku o nazwie „znaczniki”. Zawiera wszystkie tagi, nie zmienia języka ani miejsca w katalogu, w jednym pliku, więc praca w różnych językach jest łatwa.
Następnie otwórz vim w tym folderze i przeczytaj: help ctags dla niektórych poleceń. Z tych, których często używam:
Umieść kursor na wywołaniu metody i wpisz CTRL-], aby przejść do definicji metody.
Wpisz: ta nazwa, aby przejść do definicji nazwy.
źródło
Automatyczne wcięcie:
gg
(przejdź do początku dokumentu)=
(wcięcie!)shift-g
(przejdź do końca dokumentu)Będziesz potrzebował wcięcia wtyczki typu pliku w
.vimrc
pliku i prawdopodobnie odpowiednich ustawień „shiftwidth” i „expandtab”.źródło
Pytałeś o produktywne skróty, ale myślę, że twoje prawdziwe pytanie brzmi: czy vim jest tego wart? Odpowiedź na to pytanie dotyczące przepełnienia stosu to -> „Tak”
Pewnie zauważyłeś dwie rzeczy. Vim jest potężny, a vim jest trudny do nauczenia. Duża część jego mocy polega na rozszerzalności i nieskończonej kombinacji poleceń. Nie czuj się przytłoczony. Idź powoli. Jedno polecenie, jedna wtyczka na raz. Nie przesadzaj.
Cała inwestycja, którą włożysz w vima, zwróci tysiąc razy. Będziesz w edytorze tekstów przez wiele, wiele godzin przed śmiercią. Vim będzie twoim towarzyszem.
źródło
Wiele buforów, w szczególności szybkie przeskakiwanie między nimi w celu porównania dwóch plików z
:bp
i:bn
(odpowiednio odwzorowane na pojedynczy Shift+ plub Shift+ n)vimdiff
tryb (dzieli się na dwa pionowe bufory, z kolorami pokazującymi różnice)Kopiowanie obszaru za pomocą Ctrl+v
I na koniec uzupełnij tabulatorami identyfikatory (wyszukaj „mosh_tab_or_complete”). To zmienia życie.
źródło
Uzgodniony z najwyższym plakatem - : r! polecenie jest bardzo przydatne.
Najczęściej używam go do „wklejania” rzeczy:
W ten sposób nie muszę się bawić
:set paste
.źródło
clipboard
opcjęunnamed
(set clipboard=unnamed
w .vimrc), aby domyślnie korzystać ze schowka systemowego. Lub jeśli nadal chcesz system schowku oddzielić od bezimiennego rejestru, należy odpowiednio nazwany rejestr Schowek:"*p
.:set paste
nie działa tak dobrze, jeśli włączona jest funkcja autoindent.