Jaki jest twój najbardziej produktywny skrót z Vim?

Wiele słyszałem o Vimie, zarówno za, jak i przeciw. Wydaje się, że powinieneś być (jako deweloper) szybszy z Vimem niż z jakimkolwiek innym edytorem. Używam Vima do podstawowych rzeczy i jestem co najwyżej 10 razy mniej produktywny z Vimem.

Jedyne dwie rzeczy, na których powinieneś dbać, kiedy mówisz o prędkości (możesz nie dbać wystarczająco o nich, ale powinieneś) to: {]}

  1. używając alternatywnie lewej i prawej ręce to najszybszy sposób użycia na klawiatura.
  2. nigdy nie dotykając myszy jest drugi sposób, aby być tak szybko, jak to możliwe. To trwa wieki, zanim ruszysz ręką, chwyć mysz, przesuń ją i przynieś powrót do klawiatury (i często masz aby spojrzeć na klawiaturę, aby mieć pewność, że przywróciła rękę we właściwe miejsce)

Oto dwa przykłady pokazujące, dlaczego jestem znacznie mniej produktywny z Vim.

Kopiuj / Wytnij i wklej.Robię to cały czas. Ze wszystkimi współcześni redaktorzy wy naciśnij Shift lewą ręką i przesuń kursor prawą ręką, aby zaznaczyć tekst. Następnie Ctrl+C kopiuje, przesuwasz kursor i Ctrl+V pasty.

Z Vimem to straszne:

  • yy aby skopiować jedną linię (prawie nigdy nie chcesz całej linii!)
  • [number xx]yy kopiowanie linii xx do bufora. Ale nigdy nie wiesz dokładnie, czy wybrałeś to, czego chciałeś. Często muszę [number xx]dd wtedy u cofnąć!
Kolejny przykład? Search & replace.
  • W PSPad: Ctrl+f następnie wpisz to, czego szukasz, a następnie naciśnij Enter.
  • In Vim: /, następnie wpisz, co chcesz wyszukać, a następnie, jeśli są jakieś znaki specjalne umieścić \ przed każdy znak specjalny, następnie naciśnij Enter .

Oraz wszystko z Vimem jest tak: wygląda na to, że nie wiem, jak sobie z tym poradzić.

NB: już przeczytałem vim cheat arkusz :)

Moje pytanie brzmi:

W jaki sposób używasz Vima, który sprawia, że jesteś bardziej produktywny niż współczesny edytor?

 1127
Author: Olivier Pons, 2009-08-02

30 answers

Twoim problemem z Vim jest to, że nie grok vi .

Wspominasz cięcie yy i narzekasz, że prawie nigdy nie chcesz przecinać całych linii. W rzeczywistości Programiści, Edytujący kod źródłowy, bardzo często chcą pracować na całych liniach, zakresach linii i blokach kodu. Jednak yy jest tylko jednym z wielu sposobów na wbijanie tekstu do anonimowego bufora kopiowania (lub" rejestru", jak to się nazywa w vi ).

" Zen " vi jest że mówisz w jakimś języku. Inicjał y jest czasownikiem. Twierdzenie {[0] } jest synonimem y_. y jest podwojona, aby ułatwić pisanie, ponieważ jest to tak powszechna operacja.

Można to również wyrazić jako dd P (Usuń bieżącą linię i wklej kopię z powrotem na miejsce; pozostawienie kopii w anonimowym rejestrze jako efekt uboczny). y i d "czasowniki" przyjmują dowolny ruch jako swój " podmiot."Tak więc yW jest" yank from here (the cursor) to the end of obecne / następne (duże) słowo " i y'a to "yank from here to the line containing the mark named 'a "."

Jeśli rozumiesz tylko podstawowe ruchy kursora w górę, w dół, w lewo i w prawo, to vi nie będzie bardziej produktywne niż Kopia "notatnika" dla Ciebie. (Ok, nadal będziesz miał podświetlanie składni i możliwość obsługi plików większych niż piddling ~45kb lub tak; ale pracuj ze mną tutaj).

Vi ma 26" znaków "i 26" rejestrów."A mark jest ustawiany na dowolne miejsce kursora za pomocą polecenia m. Każdy znak jest oznaczany jedną małą literą. Tak więc ma ustawia znak' a 'na bieżącą lokalizację, a mz ustawia znak' z'. Do linii zawierającej znak można przejść za pomocą polecenia ' (Single quote). W ten sposób 'a przechodzi do początku linii zawierającej znak " a". Możesz przejść do dokładnej lokalizacji dowolnego znaku za pomocą polecenia ` (backquote). Tak więc `z przeniesie się bezpośrednio do dokładnej lokalizacji znaku " z ".

Ponieważ są to " ruchy "mogą być również używane jako podmioty dla innych" wypowiedzi."

Tak więc, jednym ze sposobów, aby wyciąć dowolny wybór tekstu, byłoby zrzucenie znaku (zwykle używam 'a' jako mojego "pierwszego" znaku, 'z' jako następnego znaku, 'b' jako innego, i 'e {127]}' jako jeszcze innego (nie przypominam sobie, aby kiedykolwiek interaktywnie używałem więcej niż cztery znaki w 15 lat używania vi ; tworzy się własne konwencje dotyczące tego, jak znaki i rejestry są używane przez makra, które nie zakłócają interaktywnego kontekstu). Następnie przechodzimy na drugi koniec naszego pożądanego tekstu; możemy zacząć na każdym końcu, to nie ma znaczenia. Następnie możemy po prostu użyć d`a do cięcia lub y`a do kopiowania. Tak więc cały proces ma 5 naciśnięć klawiszy nad głową (sześć, jeśli zaczęliśmy w trybie "insert" i potrzebowaliśmy Esc out command mode). Gdy już wytniemy lub skopiujemy to wklejanie w kopii jest pojedynczym naciśnięciem klawisza: p.

Mówię, że jest to jeden ze sposobów na wycinanie lub kopiowanie 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ć ruchów { i } odpowiednio do początku lub końca akapitu. Tak więc, aby przenieść akapit tekstu wycinam go za pomocą { d} (3 klawiszy). (Jeśli zdarzy mi się już w pierwszej lub ostatniej linijce akapitu mogę po prostu użyć odpowiednio d} lub d{.

Pojęcie" paragrafu " domyślnie odnosi się do czegoś, co jest zwykle intuicyjnie rozsądne. Dlatego często sprawdza się zarówno w kodowaniu, jak i prozie.

Często znamy jakiś wzór (Wyrażenie regularne) oznaczający jeden lub drugi koniec tekstu, którym jesteśmy zainteresowani. Szukanie do przodu lub do tyłu to ruchy w vi . Dzięki temu mogą być również wykorzystywane jako "tematy" w naszych " wypowiedziach."Więc mogę użyć d/foo aby wyciąć z bieżącej linii do następnej linii zawierającej łańcuch" foo " i y?bar aby skopiować z bieżącej linii do najnowszej (poprzedniej) linii zawierającej "bar."Jeśli nie chcę całych linii, nadal mogę używać ruchów wyszukiwania( jako własnych poleceń), upuść moje znaczniki i użyj poleceń `x, jak opisano wcześniej.

Oprócz "czasowników" i "przedmiotów" vi posiada również "przedmioty" (w gramatyce sens tego terminu). Do tej pory opisałem tylko Korzystanie z anonimowego rejestru. Jednakże, mogę użyć dowolnego z 26 rejestrów nazwanych przez prefiks odniesienie "object" z " (modyfikator podwójnego cudzysłowu). Tak więc, jeśli użyję "add tnę bieżącą linię do rejestru 'a', a jeśli użyję "by/foo to wyciągnę kopię tekstu stąd do następnej linii zawierającej "foo" do rejestru 'b'. Aby wkleić z rejestru wystarczy przedrostek wklejanie tą samą sekwencją modyfikatorów: "apwkleja kopię rejestru ' a' do tekstu za kursorem i "bPwkleja kopię z ' b' przed bieżącą linią.

To pojęcie " przedrostków "dodaje również analogi gramatycznych" przymiotników "i "przysłówków" do naszego języka manipulacji tekstem."Większość poleceń (czasowników) i ruchu (czasowników lub obiektów, w zależności od kontekstu) może również przyjmować prefiksy numeryczne. Tak więc 3J oznacza " dołącz do następnego trzy linie "i d5} oznacza" usuń z bieżącej linii przez koniec piątego akapitu w dół stąd."

To jest poziom średniozaawansowany vi . Nic z tego nie jest vim specyficzne i są znacznie bardziej zaawansowane triki w vi jeśli jesteś gotowy, aby się ich nauczyć. Gdybyś miał opanować tylko te pośrednie pojęcia, prawdopodobnie zauważyłbyś, że rzadko musisz pisać jakiekolwiek makra, ponieważ język manipulacji tekstem jest wystarczająco zwięzły i ekspresyjne, aby zrobić większość rzeczy wystarczająco łatwo, używając "rodzimego" języka edytora.


Próbkowanie bardziej zaawansowanych trików:

Istnieje wiele poleceń :, w szczególności :% s/foo/bar/g globalna technika zastępowania. (To nie jest zaawansowane, ale inne polecenia : mogą być). Cały : zestaw komend był historycznie dziedziczony przez VI w poprzednich wcieleniach jako ed (edytor linii), a później ex (rozszerzona linia edytor). W rzeczywistości vi jest tak nazwany, ponieważ jest wizualnym interfejsem ex .

: polecenia normalnie działają nad wierszami tekstu. ed i ex zostały napisane w czasach, gdy ekrany terminali były rzadkie i wiele terminali było urządzeniami "teletype" (TTY). Tak więc powszechnie było pracować z drukowanych kopii tekstu, używając poleceń za pośrednictwem niezwykle zwięzłego interfejsu (wspólne prędkości połączenia wynosiły 110 baud, lub, mniej więcej, 11 znaków na sekundę-co jest wolniejsze niż szybka maszynistka; lagi były powszechne na interaktywnych sesjach dla wielu użytkowników; dodatkowo często była motywacja do oszczędzania papieru).

Tak więc składnia większości poleceń : zawiera 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" bar " w każdej linii między 127 a 215. Można też użyć niektórych skrótów, takich jak . lub $ odpowiednio dla bieżącego i ostatniego wiersza. Można również użyć prefiksów względnych + i -, aby odnosić się odpowiednio do offsetów po lub przed linią curent. Tak więc: :.,$j co oznacza "od bieżącej linii do ostatniej linii, połącz je wszystkie w jedną linię". {[50] } jest synonimem :1,$ (wszystkie linie).

Polecenia :... g i :... v zawierają pewne wyjaśnienia, ponieważ są niezwykle potężne. :... g jest prefiksem "globalnie" stosującym kolejne polecenie do wszystkich linie, które pasują do wzorca (wyrażenia regularnego), podczas gdy :... v stosuje takie polecenie do wszystkich linii, które nie pasują do podanego wzorca ("v "od"conVerse"). Podobnie jak w przypadku innych poleceń ex mogą one być poprzedzone referencjami adresowania/zakresu. Tak więc :.,+21g/foo/d oznacza "usuń wszystkie linie zawierające łańcuch" foo "od bieżącego przez następne 21 linii", podczas gdy :.,$v/bar/d oznacza "od tego miejsca do końca pliku usuń wszystkie linie, które nie zawierają łańcucha"."

To ciekawe, że common UNIX command grep został zainspirowany tym ex poleceniem (a nazwa pochodzi od sposobu, w jaki zostało udokumentowane). Polecenie ex :g/re/p (grep) było sposobem udokumentowania, jak "globalnie" "drukować" linie zawierające "Wyrażenie regularne" (re). Gdy ed i ex zostały użyte, polecenie :p było jednym z pierwszych, których ktoś się nauczył i często pierwszym używanym podczas edycji dowolnego pliku. To było jak ty drukuje bieżącą zawartość (zwykle tylko jedną stronę PEŁNĄ na raz za pomocą :.,+25p lub czegoś takiego).

Zauważ, że :% g/.../d or (jego odwrotny/conVerse odpowiednik: :% v/.../d są najczęstszymi wzorami użycia. Jednak istnieje kilka innych poleceń ex, które warto zapamiętać:

Możemy użyć m do przesuwania linii wokół, i j Do łączenia linii. Na przykład, jeśli masz listę i chcesz oddzielić wszystkie rzeczy pasujące (lub odwrotnie nie pasujące do jakiegoś wzorca) bez ich usuwania możesz użyć czegoś takiego jak: :% g/foo/m$... wszystkie linie " foo " zostaną przeniesione na koniec pliku. (Zwróć uwagę na drugą wskazówkę dotyczącą używania końca pliku jako spacji scratch). Spowoduje to zachowanie względnej kolejności wszystkich linii " foo " podczas wyodrębniania ich z reszty listy. (Byłoby to równoznaczne z wykonaniem czegoś takiego jak: 1G!GGmap!Ggrep foo<ENTER>1G:1,'a g/foo'/d (skopiuj plik do własnego ogona, przefiltruj go przez grep i usuń wszystkie rzeczy z Głowa).

Aby połączyć linie Zwykle mogę znaleźć wzór dla wszystkich linii, które muszą być połączone z poprzednikiem(wszystkie linie, które zaczynają się od"^", A nie "^ * " w niektórych listach punktorów, na przykład). W tym przypadku użyłbym: :% g/^ /-1j (dla każdej pasującej linii, idź w górę o jedną linię I dołącz do nich). (BTW: w przypadku list punktorów próba wyszukania linii punktorów i dołączenia do następnej nie działa z kilku powodów ... może dołączyć jedną linię punktora do drugiej i nie połączy się z żadnym punktem linia do wszystkich jego kontynuacji; będzie działać tylko parami na dopasowaniach).

Prawie nie trzeba wspominać, że możesz użyć naszego starego przyjaciela s (substitute) z g i v (global/converse-global) poleceń. Zazwyczaj nie musisz tego robić. Rozważ jednak przypadek, w którym chcesz wykonać podstawianie tylko na liniach pasujących do innego wzorca. Często można użyć skomplikowanego wzorca z przechwytami i użyć odniesień wstecznych, aby zachować części linie, których nie chcesz zmieniać. Jednak często łatwiej będzie oddzielić dopasowanie od substytucji: :% g/foo/s/bar/zzz/g -- dla każdej linii zawierającej " foo "Zastąp wszystkie" bar "przez " zzz"."(Coś w rodzaju :% s/\(.*foo.*\)bar\(.*\)/\1zzz\2/g działałoby tylko dla przypadków, w których "bar" poprzedzał "foo" w tej samej linii; jest już wystarczająco bezbożne i musiałoby zostać zniekształcone dalej, aby złapać wszystkie przypadki, w których "bar" poprzedzał "foo") {120]}

Chodzi o to, że jest coś więcej niż tylko p, s, i d wiersze w zestawie poleceń ex.

Adresy : mogą również odnosić się do znaków. W ten sposób możesz użyć: :'a,'bg/foo/j, aby połączyć dowolną linię zawierającą łańcuch foo z jej kolejną linią, jeśli leży pomiędzy liniami między znakami "a " i " b". (Tak, wszystkie poprzednie przykłady poleceń ex mogą być ograniczone do podzbiorów linii pliku poprzez prefiks z tego rodzaju wyrażeniami adresującymi).

To dość niejasne (Używałem czegoś takiego tylko kilka razy w ciągu ostatnich 15 lat). Przyznam jednak, że często robiłem rzeczy iteracyjnie i interaktywnie, które prawdopodobnie można by było zrobić bardziej efektywnie, gdybym miał czas na przemyślenie właściwej inkantacji.

Kolejnym bardzo przydatnym vi lub ex poleceniem jest :r do odczytu zawartości innego pliku. Tak więc: :r foo wstawia zawartość pliku o nazwie " foo " w bieżącej linii.

Potężniejsze jest :r! polecenie. To odczytuje wyniki polecenia. To tak samo, jak zawieszanie sesji vi , uruchamianie polecenia, przekierowywanie wyjścia do pliku tymczasowego, wznawianie sesji vi i odczytywanie zawartości z pliku tymczasowego. plik.

Jeszcze potężniejsze są ! (bang) i :... ! (ex bang) komendy. Wykonują one również zewnętrzne polecenia i odczytują wyniki do bieżącego tekstu. Jednak oni filtruj również za pomocą polecenia wybór naszego tekstu! To możemy sortować wszystkie linie w naszym Pliku za pomocą 1G!Gsort (G jest komendą vi "goto"; domyślnie przechodzi do ostatniej linii pliku, ale może być poprzedzona numerem linii, np. 1, Pierwsza linia). Jest to odpowiednik ex wariant :1,$!sort. Pisarze często używają !z Uniksem fmtlub fold narzędzi do zmiany lub "zawijania słów" zaznaczenia tekstu. Bardzo często makro to {!}fmt (sformatuj bieżący akapit). Programiści czasami używają go do uruchamiania swojego kodu, lub tylko jego części, za pomocą indent lub innych narzędzi do formatowania kodu.

Użycie poleceń :r! i ! oznacza, że każde zewnętrzne narzędzie lub filtr może być traktowane jako rozszerzenie naszego edytora. Czasami używałem ich ze skryptami, które pobierały dane z bazy danych, lub z wget lub lynx poleceniami, które pobierały dane ze strony internetowej, lub polecenia ssh pobierające dane ze zdalnych systemów.

Innym użytecznym ex poleceniem jest :so (skrót od :source). Odczytuje zawartość pliku jako serię poleceń. Po uruchomieniu vi normalnie, domyślnie, wykonuje :source na ~/.exinitrc pliku (i Vim {113]} zwykle robi to na ~/.vimrc, naturalnie). Korzystanie z tego polega na tym, że możesz zmienić swój profil edytora w locie, po prostu pozyskując nowy zestaw makr, skróty i ustawienia edytora. Jeśli jesteś podstępny, możesz nawet użyć tego jako sztuczki do przechowywania sekwencji ex poleceń edycyjnych, 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 na górze pliku zawierającego dane o liczbie słów. Mogę zastosować to "makro" do pliku za pomocą polecenia typu: vim +'so mymacro.ex' ./mytarget

(opcja linii poleceń + do vi i Vim jest zwykle używany do rozpoczęcia sesji edycji pod danym numerem linii. Jest jednak mało znanym faktem, że można podążać za + za pomocą dowolnego ważnego ex polecenia/wyrażenia, takiego jak polecenie "source", Jak to zrobiłem 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 nie-interaktywnie, podczas gdy ponownie obrazuję zestaw serwerów).

Zwykle o wiele łatwiej jest napisać takie " makra" korzystanie z Perl, AWK, sed (co w rzeczywistości jest jak grep narzędzie inspirowane poleceniem ed).

Polecenie @ jest prawdopodobnie najbardziej niejasnym VI poleceniem. W okazjonalnym nauczaniu advanced systems administration przez blisko dekadę spotkałem bardzo niewielu ludzi, którzy kiedykolwiek z niego korzystali. @ wykonuje zawartość rejestru tak, jakby była to vi lub ex Komenda.
Przykład: często używam: :r!locate ... aby znaleźć jakiś plik w moim systemie i odczytać jego nazwę w moim dokumencie. Stamtąd usuwam wszelkie obce trafienia, pozostawiając tylko pełną ścieżkę do pliku, który mnie interesuje. Zamiast mozolnie Tab -przechodząc przez każdy komponent ścieżki (lub co gorsza, jeśli zdarzy mi się utknąć na maszynie bez wsparcia wypełniania kart w kopii vi ) używam tylko:

  1. 0i:r (aby zmienić bieżącą linię na poprawną :r polecenie),
  2. "cdd (aby usunąć wiersz do rejestru "c") i
  3. @c wykonaj to polecenie.

To tylko 10 naciśnięć klawiszy (i wyrażenie "cdd @c jest dla mnie makro palcem, więc mogę go wpisać prawie tak szybko, jak każde zwykłe słowo sześcioliterowe).


Otrzeźwiająca myśl

Podrapałem się tylko na powierzchnię VI i Żadne z tego, co tu opisałem, nie jest nawet częścią "ulepszenia" dla których vim jest nazwany! Wszystko to, co tu opisałem powinno działać na każdym starym egzemplarzu vi sprzed 20 czy 30 lat.

Są ludzie, którzy użyli znacznie więcej mocy vi niż ja kiedykolwiek będę.

 2862
Author: Jim Dennis,
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
2011-12-22 11:43:37

Mówisz o zaznaczaniu i kopiowaniu tekstu, myślę, że powinieneś rzucić okiem na Vim Visual Mode .

W trybie wizualnym możesz wybrać tekst za pomocą poleceń Vima, a następnie możesz zrobić co chcesz z zaznaczeniem.

Rozważ następujące wspólne scenariusze:

Musisz wybrać do następnego pasującego nawiasu.

Możesz zrobić:

  • v% jeśli kursor znajduje się na początku/końcu nawias
  • vib jeśli kursor znajduje się wewnątrz bloku nawiasów

Chcesz wybrać tekst pomiędzy cudzysłowami:

  • vi " {[20] } dla cudzysłowów podwójnych
  • vi ' dla pojedynczych cudzysłowów

Chcesz wybrać Blok nawiasów klamrowych (bardzo często w językach C):

  • viB
  • vi{

Chcesz wybrać cały plik:

  • ggVG

Visual block selection to kolejna bardzo przydatna funkcja, pozwala na zaznaczenie prostokątnego obszaru tekstu, wystarczy nacisnąć Ctrl-V aby go uruchomić, a następnie wybrać żądany blok tekstowy i wykonać dowolny rodzaj operacji, takich jak yank, delete, paste, edit, itp. Świetnie jest edytować zorientowany na kolumny tekst.

 505
Author: CMS,
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-02-08 14:14:05

Kilka wskazówek dotyczących wydajności:

Inteligentne ruchy

  • * i # Szukaj słowa pod kursorem do przodu/do tyłu.
  • w do następnego słowa
  • W do następnego słowa oddzielonego spacjami
  • b / e do początku / końca bieżącego słowa. (B / E tylko dla rozdzielonych spacji)
  • gg / G przejdź do początku / końca pliku.
  • % przejdź do pasującego { .. } lub ( .. ), itd..
  • { / } przejdź do następnego akapitu.
  • '. wróć do ostatnio edytowanej linii.
  • g; wróć 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 wybrać tekst!)
  • Shift+R zastąp tekst
  • C Zmień pozostałą część linii.

Łączenie poleceń

Większość poleceń akceptuje ilość i kierunek, na przykład:

  • cW = zmiana do końca wyrazu
  • 3cW = Zmień 3 słowa
  • BcW = aby rozpocząć pełne słowo, Zmień pełne słowo
  • ciW = Zmień wewnętrzne słowo.
  • ci" = Zmień wewnętrzny pomiędzy".."
  • ci( = Zmiana tekstu pomiędzy ( .. )
  • ci< = Zmiana tekstu pomiędzy (needs set matchpairs+=<:> in vimrc)
  • 4dd = Usuń 4 linie
  • 3x = usuń 3 znaki.
  • 3s = zastąp 3 znaki.

Przydatne polecenia programisty

  • r zastępuje jeden znak (np. rd zastępuje bieżący znak d).
  • ~ zmienia przypadek.
  • J łączy dwie linie
  • Ctrl + A / Ctrl+X zwiększa / zmniejsza liczbę.
  • . powtórz ostatnie polecenie (proste makro)
  • == fix Line indent
  • > indent block (w trybie wizualnym)
  • < blok unindent (w trybie wizualnym)

Zapis Makro

  • naciśnij q[ key ], aby rozpocząć nagrywanie.
  • następnie naciśnij q, Aby zatrzymać nagrywanie.
  • makro można odtwarzać za pomocą @[ key ].

Używając bardzo specyficznych poleceń i ruchów, VIM może odtworzyć dokładnie te działania dla kolejnych linii. (np. A for append-to-end, b / e aby przesunąć kursor odpowiednio na początek lub koniec wyrazu)

Przykład dobrze zbudowanych ustawień

# reset to vim-defaults
if &compatible          # only if not set before:
  set nocompatible      # use vim-defaults instead of vi-defaults (easier, more user friendly)
endif

# display settings
set background=dark     # enable for dark terminals
set nowrap              # dont wrap lines
set scrolloff=2         # 2 lines above/below cursor when scrolling
set number              # show line numbers
set showmatch           # show matching bracket (briefly jump)
set showmode            # show mode in status bar (insert/replace/...)
set showcmd             # show typed command in status bar
set ruler               # show cursor position in status bar
set title               # show file in titlebar
set wildmenu            # completion with menu
set wildignore=*.o,*.obj,*.bak,*.exe,*.py[co],*.swp,*~,*.pyc,.svn
set laststatus=2        # use 2 lines for the status bar
set matchtime=2         # show matching bracket for 0.2 seconds
set matchpairs+=<:>     # specially for html

# editor settings
set esckeys             # map missed escape sequences (enables keypad keys)
set ignorecase          # case insensitive searching
set smartcase           # but become case sensitive if you type uppercase characters
set smartindent         # smart auto indenting
set smarttab            # smart tab handling for indenting
set magic               # change the way backslashes are used in search patterns
set bs=indent,eol,start # Allow backspacing over everything in insert mode

set tabstop=4           # number of spaces a tab counts for
set shiftwidth=4        # spaces for autoindents
#set expandtab           # turn a tabs into spaces

set fileformat=unix     # file mode is unix
#set fileformats=unix,dos    # only detect unix file format, displays that ^M with dos files

# system settings
set lazyredraw          # no redraws in macros
set confirm             # get a dialog when :q, :w, or :wq fails
set nobackup            # no backup~ files.
set viminfo='20,\"500   # remember copy registers after quitting in the .viminfo file -- 20 jump links, regs up to 500 lines'
set hidden              # remember undo after quitting
set history=50          # keep 50 lines of command history
set mouse=v             # use mouse in visual mode (not normal,insert,command,help mode


# color settings (if terminal/gui supports it)
if &t_Co > 2 || has("gui_running")
  syntax on          # enable colors
  set hlsearch       # highlight search (very useful!)
  set incsearch      # search incremently (search while typing)
endif

# paste mode toggle (needed when using autoindent/smartindent)
map <F10> :set paste<CR>
map <F11> :set nopaste<CR>
imap <F10> <C-O>:set paste<CR>
imap <F11> <nop>
set pastetoggle=<F11>

# Use of the filetype plugins, auto completion and indentation support
filetype plugin indent on

# file type specific settings
if has("autocmd")
  # For debugging
  #set verbose=9

  # if bash is sh.
  let bash_is_sh=1

  # change to directory of current file automatically
  autocmd BufEnter * lcd %:p:h

  # Put these in an autocmd group, so that we can delete them easily.
  augroup mysettings
    au FileType xslt,xml,css,html,xhtml,javascript,sh,config,c,cpp,docbook set smartindent shiftwidth=2 softtabstop=2 expandtab
    au FileType tex set wrap shiftwidth=2 softtabstop=2 expandtab

    # Confirm to PEP8
    au FileType python set tabstop=4 softtabstop=4 expandtab shiftwidth=4 cinwords=if,elif,else,for,while,try,except,finally,def,class
  augroup END

  augroup perl
    # reset (disable previous 'augroup perl' settings)
    au!  

    au BufReadPre,BufNewFile
    \ *.pl,*.pm
    \ set formatoptions=croq smartindent shiftwidth=2 softtabstop=2 cindent cinkeys='0{,0},!^F,o,O,e' " tags=./tags,tags,~/devel/tags,~/devel/C
    # formatoption:
    #   t - wrap text using textwidth
    #   c - wrap comments using textwidth (and auto insert comment leader)
    #   r - auto insert comment leader when pressing <return> in insert mode
    #   o - auto insert comment leader when pressing 'o' or 'O'.
    #   q - allow formatting of comments with "gq"
    #   a - auto formatting for paragraphs
    #   n - auto wrap numbered lists
    #   
  augroup END


  # Always jump to the last known cursor position. 
  # Don't do it when the position is invalid or when inside
  # an event handler (happens when dropping a file on gvim). 
  autocmd BufReadPost * 
    \ if line("'\"") > 0 && line("'\"") <= line("$") | 
    \   exe "normal g`\"" | 
    \ endif 

endif # has("autocmd")

Ustawienia można zapisać w ~/.vimrc, lub w całym systemie w /etc/vimrc.local, a następnie odczytać z pliku /etc/vimrc za pomocą:

source /etc/vimrc.local

(będziesz musiał zastąpić # znak komentarza ", aby działał w Vimie, chciałem tutaj podać odpowiednie podświetlenie składni).

Polecenia, które tu wymieniłem, są dość podstawowe, a główne z nich, których używam jak na razie. Już teraz sprawiają, że jestem bardziej produktywny, bez konieczności poznawania wszystkich fantazyjnych rzeczy.

 207
Author: vdboor,
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-10-29 18:51:23

Kontrola +R mechanizm jest bardzo przydatny :-) w trybie wstawiania lub trybie komend (tzn. w linii : podczas wpisywania komend), kontynuuj z numerowanym lub nazwanym rejestrem:

  • a - z nazwane rejestry
  • " rejestr bez nazwy, zawierający tekst ostatniego delete lub yank
  • % aktualna nazwa pliku
  • # plik alternatywny nazwa
  • * zawartość schowka (X11: wybór główny)
  • + zawartość schowka
  • / Ostatni wzorzec wyszukiwania
  • : Ostatnia linia poleceń
  • . Ostatni wstawiony tekst
  • - Ostatni mały (mniej niż wiersz) delete
  • =5*5 Wstaw 25 do tekstu (mini-Kalkulator)

Zobacz :help i_CTRL-R i :help c_CTRL-R Po Więcej szczegóły, i snoop wokół w pobliżu więcej CTRL-R dobroci.

 98
Author: kev,
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-04-12 07:46:31

Wtyczki Vim

Istnieje wiele dobrych odpowiedzi tutaj, i jeden niesamowity jeden o zen vi. jedna rzecz nie widzę wymienione jest to, że vim jest bardzo rozszerzalny poprzez wtyczki. Istnieją skrypty i wtyczki, które sprawiają, że robi wszystkie rodzaje szalonych rzeczy, których oryginalny autor nigdy nie brał pod uwagę. Oto kilka przykładów niezwykle przydatnych wtyczek vim:

Szyny.vim

Szyny.vim to plugin napisany przez tpope. To niesamowite narzędzie dla osób robiących rails rozwój. Robi magiczne rzeczy wrażliwe na kontekst, które pozwalają łatwo przejść z metody w kontrolerze do powiązanego widoku, do modelu i do testów jednostkowych dla tego modelu. Zaoszczędziło dziesiątki, jeśli nie setki godzin jako programista rails.

Gist.vim

Ta wtyczka pozwala wybrać obszar tekstu w trybie wizualnym i wpisać szybkie polecenie, aby go opublikować do 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.

Miejsce.vim

Ta wtyczka zapewnia specjalną funkcjonalność spacji. Zamienia spację w coś analogicznego do okresu, ale zamiast powtarzania czynności powtarza ruchy. Może to być bardzo przydatne do szybkiego przechodzenia przez plik w sposób, który definiujesz w locie.

Otoczyć.vim

Ta wtyczka daje możliwość pracy z tekstem, który jest rozdzielany w niektórych Moda. Daje Ci przedmioty, które oznaczają rzeczy wewnątrz parenów, rzeczy wewnątrz cudzysłowów itp. Może się przydać do manipulowania oddzielonym tekstem.

Supertab.vim

Ten skrypt wprowadza do Vima funkcjonalność uzupełniania kart. Rzeczy autouzupełnianie jest już tam w rdzeniu Vima, ale to przenosi go do szybkiej karty, a nie wielu różnych skrótów multikey. Bardzo poręczny i niesamowicie przyjemny w użyciu. Chociaż nie jest to intellisense VS, jest to świetny krok i zapewnia wiele funkcji, których można oczekiwać od narzędzia do wypełniania kart.

Syntastic.vim

To narzędzie wprowadza zewnętrzne polecenia sprawdzania składni do Vima. Nie używałem go osobiście, ale słyszałem o nim świetne rzeczy i koncepcja jest trudna do pokonania. Sprawdzanie składni bez konieczności robienia tego ręcznie To świetna oszczędność czasu i może pomóc w wychwytywaniu błędów składniowych, gdy je wprowadzasz, a nie kiedy w końcu zatrzymujesz się na testowanie.

Zbieg.vim

Bezpośredni dostęp do git z wnętrza Vima. Ponownie, nie używałem tej wtyczki, ale widzę narzędzie. Niestety jestem w kulturze, gdzie svn jest uważany za "nowy", więc prawdopodobnie nie zobaczę Gita w pracy przez dłuższy czas.

Nerdtree.vim

Przeglądarka drzewa dla Vima. Zacząłem go używać niedawno i jest bardzo przydatny. Pozwala umieścić widok drzewa w podzieleniu pionowym i łatwo otwierać pliki. To jest Świetne dla projektu z wieloma plikami źródłowymi często przeskakujesz między nimi.

FuzzyFinderTextmate.vim

To jest unmainted plugin, ale nadal niezwykle przydatne. Zapewnia możliwość otwierania plików za pomocą" rozmytej " składni opisowej. Oznacza to, że w nielicznym drzewie plików wystarczy wpisać wystarczającą ilość znaków, aby odróżnić pliki, które Cię interesują od reszty pliku.

Podsumowanie

Istnieje wiele niesamowitych narzędzi dostępnych dla Vima. I ' m oczywiście, że tylko zarysowałem tutaj powierzchnię i warto poszukać narzędzi mających zastosowanie do Twojej domeny. Połączenie potężnego zestawu narzędzi tradycyjnego vi, ulepszeń Vima i wtyczek, które rozszerzają Vima jeszcze bardziej, jest jednym z najpotężniejszych sposobów edycji tekstu, jakie kiedykolwiek stworzono. Vim jest łatwo tak potężny jak emacs, eclipse, visual studio i textmate.

Dzięki

Dziękiduwanis za jego vim configs z których wiele się nauczyłem i pożyczyłem większość wtyczek wymienionych tutaj.

 91
Author: Benson,
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
2010-04-01 03:44:29

. Repeat last text-zmiana polecenia

Dzięki temu oszczędzam dużo czasu.

Tryb Wizualny był wspominany wcześniej, ale tryb wizualny blokowy oszczędził mi dużo czasu podczas edycji kolumn o stałych rozmiarach w pliku tekstowym. (dostęp za pomocą Ctrl-V).

 53
Author: Cooper6581,
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
2010-03-31 23:01:05

Gi

Przejdź do ostatnio edytowanej lokalizacji (bardzo przydatne, jeśli wykonałeś jakieś wyszukiwanie i chcesz wrócić do edycji)

^P I ^N

Uzupełnij poprzedni (^P) lub następny (^N) tekst.

^O I ^I

Idź do poprzedniego (^O - "O" dla starej) lokalizacji lub do następnej (^I - "I" tylko blisko "O"). Podczas wyszukiwania, edycji plików itp., można poruszać się po tych "skokach" do przodu i do tyłu.

 48
Author: dimba,
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-12-24 14:50:03

Niedawno (dostałem) odkryłem tę stronę: http://vimcasts.org/

Jest całkiem nowy i naprawdę dobry. Facet, który prowadzi stronę, przeszedł z textmate na vim i hostuje bardzo dobre i zwięzłe odlewy na konkretne tematy vim. Zobacz!

 46
Author: Ronny Brendel,
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
2010-03-31 19:37:33

CTRL + A zwiększa liczbę, na której stoisz.

 42
Author: hcs42,
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
2010-02-27 11:20:40

Wszystkie w trybie normalnym:

F , aby przejść do następnej instancji określonego znaku w bieżącej linii, oraz ; Powtórz.

F aby przejść do poprzedniej instancji określonego znaku w bieżącej linii i ; Powtórz.

Jeśli są użyte inteligentnie, powyższe dwa mogą sprawić, że będziesz zabójczo szybko poruszał się po linii.

* na słowo, aby wyszukać następną instancję.

# na słowo do wyszukaj poprzednią instancję.

 38
Author: Eric Smith,
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
2009-08-28 15:23:22

Sesja

A. Zapisz sesję

:MKS sessionname

B. Wymuś sesję zapisu

:mks! sessionname

C. load session

Gvim lub vim-s sessionname


Dodawanie i odejmowanie

A. dodawanie i odejmowanie

CTRL-A; Dodaj [count] do liczby lub znaku alfabetycznego w lub za kursorem. {Nie w Vi

CTRL-X; Odejmij [count] od liczby lub alfabetycznie znak na kursorze lub za nim. {Nie w Vi}

B. odmontowanie klucza okna

W oknie, Ctrl-a już zmapowane dla całego wyboru pliku musisz odmapować w pliku rc. mark mswin.vim CTRL-część mapowania jako komentarz lub dodaj swój plik rc za pomocą unmap

C. Z Makro

Polecenie CTRL-A jest bardzo przydatne w makrach. Przykład: Wykonaj następujące czynności aby zrobić numerowaną listę.

  1. Utwórz pierwszy wpis listy, upewnij się, że zaczyna się od liczby.
  2. qa-Rozpocznij nagrywanie do bufora " a "
  3. y - yank the entry
  4. P-umieść kopię wpisu pod pierwszym
  5. CTRL-A-Zwiększ liczbę
  6. Q - stop nagrywanie
  7. @a-powtórz yank, put i increment razy
 34
Author: agfe2,
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
2010-08-19 08:08:28

W zeszłym tygodniu w pracy nasz projekt odziedziczył wiele kodu Pythona z innego projektu. Niestety kod nie pasował do naszej istniejącej architektury - wszystko to było robione z globalnych zmiennych i funkcji, które nie działały w środowisku wielowątkowym.

Mieliśmy ~80 plików, które wymagały przerobienia, aby były zorientowane obiektowo - wszystkie funkcje zostały przeniesione do klas, zmieniono parametry, Dodano instrukcje importu itp. Mieliśmy listę około 20 rodzajów poprawek, które trzeba było zrobić do każdego pliku. Szacuję, że robiąc to ręcznie jedna osoba może zrobić może 2-4 dziennie.

Więc pierwszy zrobiłem ręcznie, a następnie napisałem skrypt Vima, aby zautomatyzować zmiany. Większość z nich to lista komend Vima, np.

" delete an un-needed function "
g/someFunction(/ d

" add wibble parameter to function foo "
%s/foo(/foo( wibble,/

" convert all function calls bar(thing) into method calls thing.bar() "
g/bar(/ normal nmaf(ldi(`aPa.

Ostatni zasługuje na Wyjaśnienie:

g/bar(/  executes the following command on every line that contains "bar("
normal   execute the following text as if it was typed in in normal mode
n        goes to the next match of "bar(" (since the :g command leaves the cursor position at the start of the line)
ma       saves the cursor position in mark a
f(       moves forward to the next opening bracket
l        moves right one character, so the cursor is now inside the brackets
di(      delete all the text inside the brackets
`a       go back to the position saved as mark a (i.e. the first character of "bar")
P        paste the deleted text before the current cursor position
a.       go into insert mode and add a "." 

Dla kilku bardziej złożonych przekształceń, takich jak generowanie wszystkich poleceń importu, wbudowałem trochę Pythona w skrypt Vima.

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 {[2] } i plik jest przekształcany w mgnieniu oka.

Wciąż mamy prace nad zmianą pozostałych 5%, które nie było warte automatyzacji i testowania wyników, ale spędzając dzień na pisaniu tego skryptu szacuję, że zaoszczędziliśmy tygodnie pracy.

Oczywiście byłoby możliwe zautomatyzowanie tego za pomocą języka skryptowego, takiego jak Python lub Ruby, ale zajęłoby to znacznie więcej czasu pisanie i byłoby mniej elastyczne - ostatni przykład byłby trudny, ponieważ same regex nie byłyby w stanie obsłużyć zagnieżdżonych nawiasów, np. przekonwertować bar(foo(xxx)) na foo(xxx).bar(). Vim był idealny do tego zadania.

 32
Author: Dave Kirby,
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-08-18 21:44:40

Użyj wbudowanego eksploratora plików! Komenda :Explore pozwala na bardzo szybkie poruszanie się po kodzie źródłowym. Mam takie mapowanie w moim .vimrc:

map <silent> <F8>   :Explore<CR>
map <silent> <S-F8> :sp +Explore<CR>

Eksplorator pozwala również na modyfikacje plików. Wrzucę kilka moich ulubionych klawiszy, naciśnięcie <F1> da ci pełną listę:

  • -: najbardziej przydatne: Zmień na górny katalog (cd ..)
  • mf : zaznacz plik
  • D : Usuń zaznaczone pliki lub plik, na którym znajduje się kursor, jeśli nic nie jest zaznaczone.
  • R : Zmień nazwę pliku, na którym znajduje się kursor.
  • d : Utwórz nowy katalog w bieżącym katalogu
  • %: Tworzenie nowego pliku w bieżącym katalogu
 28
Author: soulmerge,
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
2009-08-02 11:17:12

Jestem członkiem American Cryptogram Association. Dwumiesięcznik zawiera ponad 100 różnego rodzaju kryptogramów. Około 15 z nich to "kryptarytmy" - różnego rodzaju problemy arytmetyczne z literami zastępowanymi cyframi. Dwa lub trzy z nich to sudokus, z wyjątkiem liter zamiast cyfr. Kiedy siatka jest zakończona, dziewięć odrębnych liter będzie literować słowo lub słowa, na jakiejś linii, przekątnej, spirali, itp. gdzieś w sieci.

Raczej niż praca z ołówkiem lub pisanie problemów ręcznie, pobieram problemy z obszaru członków ich strony internetowej.

Podczas pracy z tymi sudokusami, używam vi, po prostu dlatego, że używam udogodnień, które vi Ma, które mają nieliczni inni edytorzy. Głównie w konwersji literowej siatki na siatkę numerowaną, ponieważ uważam, że łatwiej jest rozwiązać, a następnie ukończona numerowana siatka z powrotem do literowej siatki, aby znaleźć rozwiązanie słowo lub słowa.

Problem jest sformatowany jako dziewięć grup po dziewięć liter, z -s reprezentujących spacje, napisane w dwóch linijkach. Pierwszym krokiem jest sformatowanie ich na dziewięć linii po dziewięć znaków. Nie ma w tym nic specjalnego, wystarczy wstawić osiem linebreaks w odpowiednich miejscach.

Wynik będzie wyglądał następująco:

T-O-----C
-E-----S-
--AT--N-L
---NASO--
---E-T---
--SPCL---
E-T--OS--
-A-----P-
S-----C-T

Więc pierwszym krokiem w konwersji tego na liczby jest utworzenie listy odrębnych liter. Najpierw zrobię kopię bloku. Umieszczam kursor na górze bloku, następnie wpisz :y}}p. : przełącza mnie w tryb rozkazujący, y wykonuje następny ruch. Ponieważ } jest przejściem do końca następnego akapitu, y} yanks akapit. } następnie przesuwa kursor na koniec akapitu i p wkleja to, co szarpaliśmy tuż za kursorem. Tak więc y}}p tworzy kopię następnego akapitu i kończy się kursorem pomiędzy tymi dwoma kopiami.

Następnie zamienię jedną z tych kopii w listę odrębnych liter. To polecenie jest trochę bardziej złożone:

:!}tr -cd A-Z | sed 's/\(.\)/\1\n/g' | sort -u | tr -d '\n'

: znowu przełącza mnie w tryb dowodzenia. ! wskazuje, że zawartość następnego yank powinna być przekazywana przez wiersz poleceń. } yanks następny akapit, a następnie wiersz poleceń używa polecenia tr, aby usunąć wszystko z wyjątkiem wielkich liter, polecenia sed, aby wydrukować każdą literę w jednym wierszu, i polecenia sort, aby posortować te wiersze, usuwając duplikaty, a następnie tr usuwa nowe linie, pozostawiając dziewięć odrębnych liter w jednym wierszu, zastępując dziewięć wierszy, które pierwotnie składały się na akapit. W tym przypadku literami są: ACELNOPST.

Następnym krokiem jest wykonanie kolejnej kopii siatki. A potem użyć liter, które właśnie zidentyfikowałem, aby zastąpić każdą z tych liter cyfrą od 1 do 9. To proste: :!}tr ACELNOPST 0-9. Wynik jest następujący:

8-5-----1
-2-----7-
--08--4-3
---4075--
---2-8---
--7613---
2-8--57--
-0-----6-
7-----1-8

Można to rozwiązać w zwykły sposób lub wprowadzić do dowolnego rozwiązania sudoku, które wolisz. Gotowe rozwiązanie można następnie przekonwertować z powrotem do liter z :!}tr 1-9 ACELNOPST.

W vi jest moc, którą dorównuje niewielu innym. Największym problemem jest to, że tylko kilka z VI poradników, stron internetowych, plików pomocy, itp., zrobić więcej niż ledwie dotknąć powierzchni tego, co jest możliwe.

 25
Author: Jeff Dege,
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
2011-06-15 13:39:45

Masowe manipulacje tekstem!

Albo przez makra:

  • zacznij od nagrania: qq
  • Do stuff
  • Zatrzymaj nagrywanie: q
  • Repeat: @q (Pierwszy raz), @@ after that.
  • powtórz 20 razy: 20@@

Lub poprzez wyrażenia regularne:

  • Zastąp rzeczy: :%s/[fo]+/bar/g

(ale ostrzegam: jeśli zrobisz to drugie, będziesz miał 2 problemy :).)

 23
Author: jqno,
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
2009-08-02 08:59:30

Niedawno odkryłem q:. Otwiera "okno poleceń" i pokazuje najnowsze polecenia ex-mode (command-mode). Możesz poruszać się jak zwykle w oknie, a naciśnięcie <CR> spowoduje wykonanie polecenia. Możesz edytować itp. też. Bezcenne, gdy zadzierasz z jakimś złożonym poleceniem lub regex i nie chcesz ponownie wpisywać całej rzeczy, lub jeśli złożona rzecz, którą chcesz zrobić, to 3 polecenia z powrotem. To prawie jak bash set -o vi, ale dla samego Vima (heh!).

Zobacz :help q: dla więcej ciekawych bitów do chodzenia tam iz powrotem.

 23
Author: David Pope,
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-04-02 07:56:22

Niedawno odkryłem omnicompleksowanie Vima i choć przyznam, że jestem trochę zamglony, co robi co, to miałem zaskakująco dobre wyniki po prostu wyciskanie albo Ctrl + x Ctrl + u lub Ctrl + n/Ctrl +p w trybie insert. Nie jest to do końca IntelliSense , ale wciąż się tego uczę.

Wypróbuj! :help ins-completion
 22
Author: Peter Mortensen,
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
2010-02-27 11:29:17

To nie są skróty, ale są powiązane:

  1. Uczyń capslock dodatkowym ESC (lub Ctrl)
  2. map leader to", " (przecinek), z tą komendą: let mapleader=", "
Zwiększają moją produktywność.
 20
Author: tfmoraes,
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
2010-03-14 19:49:18

Innym użytecznym "skrótem" vi, którego często używam, jest 'xp'. Spowoduje to zamianę znaku pod kursorem na następny znak.

 19
Author: Costyn,
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
2010-09-20 10:34:50

+ W, V aby podzielić ekran w pionie
+ W, W aby przejść między oknami

!python % [args] aby uruchomić skrypt, który edytuję w tym oknie

ZF w trybie wizualnym do składania dowolnych linii

 18
Author: Peter Ellis,
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
2009-08-02 09:47:38

Tryb Wizualny

Jak kilka innych osób powiedziało, tryb wizualny jest odpowiedzią na problem z kopiowaniem/wycinaniem i wklejaniem. Vim daje 'v', 'V' i C-v. małe litery 'v' w Vimie są zasadniczo takie same jak klawisz shift w notatniku. Najfajniejsze jest to, że nie musisz tego trzymać. Możesz użyć dowolnej techniki ruchu, aby efektywnie przejść do początkowego (lub końcowego) punktu wyboru. Następnie naciśnij "v" i ponownie użyj efektywnych technik ruchu, aby przejść na drugi koniec twój wybór. Następnie 'd ' lub' y ' pozwala wyciąć lub skopiować ten wybór.

Zaletą trybu wizualnego Vima nad opisem wycinania/kopiowania/wklejania Jima Dennisa w vi jest to, że nie musisz dokładnie ustalać lokalizacji. Czasami bardziej wydajne jest użycie szybkiego ruchu, aby dotrzeć do miejsca, w którym chcesz się udać, a następnie udoskonalić to za pomocą innych ruchów, niż wymyślenie bardziej złożonego polecenia pojedynczego ruchu, które zaprowadzi cię dokładnie tam, gdzie chcesz idź.

Minusem intensywnego 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 Ci naukę nowych poleceń vi(m), które mogą pozwolić ci robić rzeczy bardziej efektywnie. Jeśli jednak jesteś bardzo proaktywny w poznawaniu nowych aspektów vi (m), prawdopodobnie nie wpłynie to na Ciebie zbytnio.

Ponownie podkreślę, że tryby visual line i visual block dają wariacje na ten sam temat, który może być bardzo potężny...szczególnie w trybie wizualnej blokady.

O efektywnym korzystaniu z klawiatury

Nie zgadzam się również z Twoim twierdzeniem, że naprzemienne ręce to najszybszy sposób na użycie klawiatury. Zawiera w sobie element prawdy. Mówiąc bardzo ogólnie, wielokrotne używanie tej samej rzeczy jest powolne. Najbardziej znaczącym przykładem tej zasady jest to, że kolejne naciśnięcia klawiszy pisane tym samym palcem są bardzo powolne. Twoje twierdzenie wynika prawdopodobnie z naturalnej skłonności do używania s/finger/ hand / transformation na tym wzorze. Do pewnego stopnia jest to poprawne, ale na skrajnie wysokim końcu spektrum wydajności jest niepoprawne.

Zapytaj każdego pianistę. Zapytaj ich, czy jest to szybsze, aby odtworzyć kilka nut naprzemienne ręce lub za pomocą kolejnych palców jednej ręki w kolejności. Najszybszym sposobem na wpisanie 4 naciśnięć klawiszy nie jest naprzemienne ręce, ale wpisanie ich 4 palcami tej samej ręki w kolejności rosnącej lub malejącej (nazwij to "run"). Powinno to być oczywiste po rozważeniu tej możliwości.

Trudniejszym problemem jest optymalizacja do tego. Jest to dość łatwe do zoptymalizowania dla absolutnej odległości na klawiaturze. Vim tak robi. O wiele trudniej jest zoptymalizować na poziomie "run" , ale VI (m) z modalną edycją daje większą szansę na to, że jest w stanie to zrobić, niż jakiekolwiek podejście niemodalne (ahem, emacs) kiedykolwiek mogłoby.

Na Emacs

Żeby fanatycy Emacsa nie lekceważyli całej mojej post ze względu na ten ostatni nawiasowy komentarz, czuję, że muszę opisać przyczynę różnicy między religiami emacs i vim. Nigdy nie wypowiadałem się w wojnach edytorów i pewnie więcej tego nie zrobię, ale nigdy nie słyszałem, żeby ktoś tak opisywał różnice, więc proszę bardzo. Różnica jest następująca:

Vim zapewnia niezrównaną wydajność edycji tekstu raw Emacs daje niezrównaną możliwość dostosowania i zaprogramowania edytora

The blind vim fanatycy będą twierdzić, że vim ma język skryptowy. Ale to niejasny, ad hoc język, który został zaprojektowany, aby służyć redaktorowi. Emacs ma Lisp! Wystarczy. Jeśli nie doceniasz znaczenia tych dwóch ostatnich zdań lub pragniesz nauczyć się wystarczająco dużo o programowaniu funkcyjnym i Lispie, aby rozwinąć to uznanie, powinieneś użyć Vima.

Fanatycy Emacsa będą twierdzić, że emacs ma tryb Vipera, a więc jest to superset Vima. Ale tryb Vipera nie jest standardowy. My rozumie się, że tryb viper nie jest używany przez większość użytkowników Emacsa. Ponieważ nie jest to domyślne, większość użytkowników Emacsa prawdopodobnie nie rozwija prawdziwego uznania dla korzyści płynących z paradygmatu modalnego.

Moim zdaniem te różnice są ortogonalne. Wierzę, że korzyści z vim i emacs, jak już powiedziałem, są ważne. Oznacza to, że ostateczny edytor jeszcze nie istnieje. To chyba prawda, że emacs byłby najprostszą platformą, na której można oprzeć ostateczny edytor. Ale edycja modalna nie jest zakorzeniona w Emacsie. Społeczność emacs może się tak poruszać w przyszłości, ale nie wydaje się to zbyt prawdopodobne.

Więc jeśli chcesz wydajność edycji raw, użyj vim. Jeśli chcesz mieć najlepsze środowisko do tworzenia skryptów i programowania, użyj emacs. Jeśli chcesz niektóre z obu z naciskiem na programowalność, użyj emacs z trybem viper (lub zaprogramować własny tryb). Jeśli chcesz tego, co najlepsze z obu światów, na razie nie masz szczęścia.

 18
Author: user307058,
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
2010-04-01 17:00:28

Poświęć 30 minut na samouczek Vima (Uruchom vimtutor zamiast Vima w terminalu). Nauczysz się podstawowych ruchów i niektórych naciśnięć klawiszy, dzięki czemu będziesz co najmniej tak produktywny z Vimem, jak z edytorem tekstu, którego używałeś wcześniej. Po tym, cóż, przeczytaj odpowiedź Jima Dennisa jeszcze raz:)

 17
Author: konryd,
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
2010-03-31 22:44:38

Jaki jest sposób korzystania z Vima, który sprawia, że jesteś bardziej produktywny niż z współcześni redaktorzy?

Możliwość wykonywania złożonych, powtarzalnych edycji za pomocą bardzo niewielu naciśnięć klawiszy (często przy użyciu makr ). Spójrz naVimGolf , aby być świadkiem mocy Vima!

Po ponad dziesięciu latach niemal codziennego użytkowania, trudno sobie wyobrazić używanie jakiegokolwiek innego edytora.

 16
Author: Johnsyweb,
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
2011-01-12 22:52:32

Użyj \c w dowolnym miejscu wyszukiwania, aby zignorować przypadek(nadpisując ustawienia ignorecase lub smartcase). Np. /\cfoo lub /foo\c dopasuje foo, Foo, fOO, FOO, itd.

Użyj \C w dowolnym miejscu wyszukiwania, aby wymusić dopasowanie wielkości liter. Np. /\Cfoo lub /foo\C będą pasowały tylko do foo.

 16
Author: kev,
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
2011-06-15 13:42:51

Byłem zaskoczony, że nikt nie wspomniał o ruchu. Często używam go z listami parametrów w postaci dt, lub yt,

 16
Author: David Corbin,
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
2011-06-15 13:44:13

Dziwne, że nikt nie wspomniał o ctags. Pobierz "exuberant ctags" i umieść go przed gównianą preinstalowaną wersją, którą już masz w ścieżce wyszukiwania. Cd do katalogu głównego tego, nad czym pracujesz; na przykład Dystrybucja Jądra Androida. Rodzaj " ctags-R ."aby utworzyć indeks plików źródłowych w dowolnym miejscu pod tym katalogiem w pliku o nazwie "tags". To zawiera wszystkie tagi, nomatter języka ani gdzie w katalogu, w jednym pliku, więc praca między językami jest łatwa.

Następnie otwórz vim w tym folder i przeczytaj: help ctags dla niektórych poleceń. Kilka często używam:

  • Umieść kursor na wywołaniu metody i wpisz CTRL -], aby przejść do metody definicja.

  • Wpisz: ta nazwa aby przejść do definicji nazwy.

 16
Author: Bradjcox,
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-05-06 20:50:49

Automatyczne wcięcia:

gg (przejdź do początku dokumentu)
= ( / align = "left" / )
shift-g (Przejdź do końca dokumentu)

Będziesz potrzebował 'filetype plugin indent on' w pliku .vimrc i prawdopodobnie odpowiednich ustawień' shiftwidth 'i' expandtab'.

 14
Author: David Claridge,
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
2010-02-27 11:19:21

Pytałeś o produktywne skróty, ale myślę, że twoje prawdziwe pytanie brzmi: czy Vim jest tego wart? Odpowiedź na to pytanie stackoverflow brzmi - > " tak "

Musiałeś zauważyć dwie rzeczy. Vim jest potężny, a Vim jest trudny do nauczenia. Duża część jego mocy polega na jego możliwości rozbudowy i niekończącej się kombinacji poleceń. Nie czuj się przytłoczony. Powoli. Jedno polecenie, jedna wtyczka na raz. Nie przesadzaj.

Wszystkie inwestycje, które włożysz w vim zwrócą się tysiąckrotnie. Jesteś będziesz w edytorze tekstu przez wiele, wiele godzin przed śmiercią. Vim będzie twoim towarzyszem.

 14
Author: autodidakto,
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
2010-07-24 05:41:20

Wiele buforów, a w szczególności szybkie przeskakiwanie między nimi w celu porównania dwóch plików z :bp i :bn (odpowiednio przerobione na single Shift + P lub Shift + n )

vimdiff mode (dzieli się na dwa pionowe bufory, z kolorami pokazującymi różnice)

Area-Kopiuj za pomocą Ctrl + v

I na koniec uzupełnianie identyfikatorów w zakładce (szukaj "mosh_tab_or_complete"). To zmienia życie.

 13
Author: Stefano Borini,
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
2010-02-27 11:23:25

Zgadzam się z topowym plakatem - : r! polecenie jest bardzo użyteczne.

Najczęściej używam go do "wklejania" rzeczy:

:r!cat
**Ctrl-V to paste from the OS clipboard**
^D

W ten sposób nie muszę się bawić :set paste.

 12
Author: David Wolever,
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
2009-08-28 16:07:18