Filozofia Vima - edycja

10 min read

Jest to druga cz臋艣膰 dotycz膮ca podstaw w u偶ywaniu edytora tekstowego Vim. Pierwsz膮 opisuj膮c膮 tryby i zarz膮dzanie plikami mo偶na przeczyta膰 tutaj.

Najistotniejsze co trzeba zrozumie膰 w u偶ywaniu Vima jest to, 偶e zachowuje si臋 on jak j臋zyk programowania. 馃槉

Edytowanie i poruszanie oparte jest na komendach (commands), kt贸re operuj膮 na obiektach (text objects) lub okre艣lonym ruchu (motions). Dodatkowo taki zestaw mo偶emy poprzedzi膰 ilo艣ci膮 powt贸rze艅. Wa偶ne do zaznaczenie jest to, 偶e wszystkie wymienione wcze艣niej funkcje s膮 odseparowane od siebie.

Poruszanie

Du偶膮 zalet膮 Vima jest mnogo艣膰 operacji pozwalaj膮cych na efektywne przemieszczenie kursora. Mo偶emy zapomnie膰 o u偶ywaniu myszki i syndromie RSI. Poni偶sze skr贸ty dzia艂aj膮 w normalnym trybie.

  • h, j, k, l - klawisze te poruszaj膮 kursorem tak jak odpowiednio strza艂ki: lewo, d贸艂, g贸ra, prawo

  • w, e, b - przej艣cie do pocz膮tku w, ko艅ca nast臋pnego wyrazu e albo do poprzedniego wyrazu b

  • W, E, B - odpowiedniki powy偶szych skr贸t贸w, jednak tym razem wyraz ignorujemy znaki przestankowe. Przyk艂adowo tekst div.nav i text-align b臋d膮 traktowane jako jeden wyraz

  • (,); {,} - przej艣cie na pocz膮tek i koniec zdania () albo akapitu {}

  • 0,$ - skok na pocz膮tek i koniec linii

  • I,A - skok na pocz膮tek i koniec linii i przej艣cie w tryb Insert

  • H, M, L - skok kursora na g贸r臋, 艣rodek lub d贸艂 ekranu

  • zz, zt, zb - wycentrowanie zz tekstu na linii gdzie znajduje si臋 kursor. Przesuni臋cie ekranu tak, aby kursor znajdowa艂 si臋 na g贸rze zt lub dole zb ekranu

  • c-b, c-f - przesuni臋cie ekranu do g贸ry i do艂u,

  • c-u, c-d - przesuni臋cie tylko po艂owy ekranu do g贸ry i do艂u

Prawie wszystkie powy偶sze skr贸ty mo偶na poprzedzi膰 liczb膮 i tak np. 4l przesunie kursor o cztery znaki w prawo, a 2k o dwie linie do g贸ry. Jak chcemy skoczy膰 do konkretnej linii to mo偶emy u偶y膰 gg lub G, poprzedzaj膮c je numerem linii. Skok do linii numer 3 wykonamy przez 3gg. Istniej膮 aliasy to przechodzenia na pocz膮tek i koniec dokumentu, s膮 to odpowiednio gg i G, tylko bez liczb.

Wyszukiwanie

Upraszczaj膮c do cel贸w edukacyjnych, zebra艂em trzy metody przeskakiwania kursora do wyszukiwanego tekstu lub znaku.

  • #, * - przechodzenie do nast臋pnego * lub poprzedniego # wyrazu kt贸ry znajduj臋 si臋 pod kursorem

  • % - szuka brakuj膮cego nawiasu: (,),[,],\{, lub }. Przenosi do miejsca, w kt贸rym wyst臋puje zamykaj膮cy/otwieraj膮cy nawias

  • f{znak}, F{znak} - skok do pierwszego nast臋pnego f lub poprzedniego F wyszukiwanego znaku. Mo偶emy powtarza膰 ten sam skok poprzez ; lub powracaj膮c , do poprzedniego znaku.

  • /{fraza} lub ?{fraza} - wyszukuje nast臋pnej / lub poprzedniej ? frazy w pliku

Dobrze wiedzie膰, 偶e w ostatni sposobie mo偶emy u偶y膰 wyra偶e艅 regularnych na przyk艂ad /nazw.\|login, mo偶e uwzgl臋dni膰 nam wyrazy jak: nazwa, nazwy lub login. Bardziej przydatne wyra偶enia to:

  • . - dowolny znak

  • ^, $ - pocz膮tek i koniec linii

  • \<, \> - pocz膮tek i koniec s艂owa np. \<surykatka\> wyszuka tylko wyraz surykatka

W czasie wyszukiwania mo偶emy skaka膰 pomi臋dzy znalezionymi frazami, i tak n znajduje nam nast臋pne wyst膮pienie, a N poprzednie. Jak chcemy przeskoczy膰 kilka trafie艅 musimy poprzedzi膰 komend臋 liczb膮 np. 10n.

Komendy

Jak do tej pory nauczyli艣my si臋 skaka膰 po dokumencie, co nie jest zbytnio produktywne. 馃槈 Komendy (commands) s艂u偶膮 nam do edytowania dokumentu, do podstawowych operacji nale偶膮:

  • y, yy (yank) - kopiowanie tekstu lub ca艂ej linii yy

  • d, dd (delete) - usuni臋cie (wycinanie) zaznaczonego tekstu d lub ca艂ej linii dd

  • c, cc (change) - zmienianie tekstu, komenda ta wycina znaki i przechodzi do Insert mode. polecenie cc zmienia ca艂膮 linie.

  • p, p (paste) - wklejanie tekstu po kursorze p lub przed p

  • gu, gu - opcja dodana troch臋 na si艂臋 maj膮ca na celu podmian臋 wyraz贸w na du偶e gu lub ma艂e gu litery

  • >, >> - zrobienie wci臋cia jednej linii >> lub kilku >, przy dodaniu parametru ruchu

Gratuluj臋 wytrwa艂o艣ci, jak dotrwa艂e艣 do tego miejsca. Mam dobr膮 wiadomo艣膰, jakby艣 mia艂 m臋tlik w g艂owie od wszystkich poznanych skr贸t贸w. Z powy偶szymi funkcjami mo偶esz wykona膰 wi臋kszo艣膰 operacji na tek艣cie. Vim idzie dalej, umo偶liwiaj膮c nam bardziej ergonomiczne jego manipulowanie. Cz臋sto takimi u艂atwieniami s膮 aliasy do podstawowych skr贸t贸w (te b臋d膮 podane w nawiasach).

  • x (dl), X (dh) - wycinanie znaku spod kursora x lub jeden znak wcze艣niej X - du偶e x

  • d (d$) - wycinanie tekstu od miejsca, gdzie znajduje si臋 kursor do ko艅ca linii

  • y (y$) - kopiowanie naisu od miejsca, gdzie znajduje si臋 kursor do ko艅ca linii

  • C (c$) - zmiana tekstu od miejsca, gdzie znajduje si臋 kursor do ko艅ca linii

  • s (cl), S (cc) - zmienianie tekstu, komenda ta wycina znak spod kursora i przechodzi do Insert mode. Polecenie S zmienia ca艂膮 linie.

  • ~ (gUl i gul) - (tylda) zamiana wielko艣ci znaku spod kursora

  • r{x} - dzia艂a jak cl, jednak pozostaje w Normal mode. Zamienia znak na pozycji kursora na wybrany znak

smart guy Jestem Wam winien wyja艣nienie, dlaczego operacje d (delete) przet艂umaczy艂em na wycinanie. Vim domy艣lnie niczego nie kasuje, komendy takie jak d, c, S przenosz膮 tekst do rejestru. Vim przechowuje historie wyci臋tego tekstu w rejestrach pod cyframi 1-9. Je艣li usun臋li艣my dwa r贸偶ne stringi i chcemy wklei膰 ten pierwszy, to musimy wywo艂a膰 rejestr o cyfrze 2 przez "2, aby wklei膰 dodajemy jeszcze literk臋 p (paste) - "2p. Dodatkowo po kolejnych wyci臋tych obiektach, tekst przesuwa si臋 do rejestr贸w o wy偶szych numeracjach. Nast臋pn膮 spraw膮 jest fakt, i偶 skopiowany tekst (y) posiada specjalny rejestr 0.

Podsumowuj膮c, je艣li skopiujemy napis (y) i potem przejdziemy w inne miejsce pliku oraz usuniemy inny fragment, to pod klawiszem p b臋dzie ten usuni臋ty tekst. Je艣li chcemy wklei膰 to co kopiowali艣my, to musimy u偶y膰 komend臋 "0p.

Cofanie i powtarzanie

Ka偶de polecenie mo偶na powt贸rzy膰 - robi si臋 to przez . kropk臋. Oczywi艣cie mamy te偶 mo偶liwo艣膰 cofni臋cia edycji lub wykonania jej ponownie. Nic nie szkodzi nam, aby takie cofni臋cia powtarza膰 kilkukrotnie np. 5u.

  • u - cofa skutki ostatniego polecenia

  • U - cofa dla ca艂ej linii

  • c-r - operacja ``wykonaj ponownie'' - cofa cofni臋cia

Obiekty tekstowe

Dobr膮 praktyk膮 jest, aby podczas edycji dokumentu u偶ywa膰 obiekt贸w tekstowych, a nie komend ruchu (motions). Obiektami tymi s膮 m.in. wyraz w, zdanie s, paragraf p, napis zawarty w cudzys艂owach ", nawiasach b lub tagach HTML t. Cz臋sto klawisz odpowiadaj膮cy za dany ruch jest taki sam w obiektach tekstowych. W takim wypadku r贸偶nica polegaj膮ca na zaznaczeniu obiektu, to dodanie jednej z dw贸ch liter:

  • i - operuje tylko na danym obiekcie

  • a - operuje na danym obiekcie wraz z spacjami poprzedzaj膮cymi nast臋pny obiekt. Je艣li mamy cudzys艂owy lub nawiasy to zaznaczamy je oraz tekst pomi臋dzy nimi.

Za艂贸偶my, 偶e nasz kursor znajduje si臋 na 艣rodku wyrazu i chcieliby艣my go usun膮膰. Je艣li u偶yjemy dw usuniemy tylko po艂ow臋 wyrazu (od kursora do nast臋pnego s艂owa). Musimy w takim razie przej艣膰 do pocz膮tku tego wyrazu (przez np.b) i dopiero zastosowa膰 komendy dw. U偶ywaj膮c obiekt贸w tekstowych nie musimy by膰 na pocz膮tku tego obiektu. Nast臋pn膮 przewag膮 w tej metodzie jest zdolno艣膰 do powtarzania komend, niezale偶nie od pozycji kursora. Wydaje si臋 to skomplikowane, ale po poni偶szym przyk艂adzie wszystko stanie si臋 jasne. Pogrubiony znak oznacza pozycj臋 kursora.

  1. surykatka 鈫 pr贸bujemy usun膮膰 s艂owo przez dw

  2. sury 鈫 wynikiem jest usuni臋cie tylko fragmentu wyrazu

  3. surykatka 鈫 bdw musimy przej艣膰 na pocz膮tek wyrazu i dopiero go wyci膮膰

  4. Konstantynopol 鈫 jeste艣my w po艂owie drugiego s艂owa, i chcieliby艣my powt贸rzy膰 poprzedni膮 komend臋 przez . kropk臋

  5. Konst 鈫 niestety ucinamy tylko fragment od pozycji kursora

Teraz powt贸rzmy to u偶ywaj膮c obiekt贸w tekstowych:

  1. surykatka 鈫 daw usuwa ca艂e s艂owo

  2. Konstantynopol 鈫 kropka . powtarza nam polecenie ``usu艅 ca艂y wyraz''

Dodatkowo nie trzeba by膰 na danym obiekcie, aby go edytowa膰. Vim wyszuka pierwsze wyst膮pienie tego obiektu.

Wyodr臋bni艂bym kilka rodzaj贸w obiekt贸w. W pieszym znajduj膮 si臋:

  • w - wyraz

  • W - wyrazy po艂膮czone znakami przestankowymi

  • s - zdanie

  • p - paragraf

  • ', ", ` - tekst pomi臋dzy cudzys艂owami

Napis pomi臋dzy nawiasami. Obiekty te mo偶emy zaznacza膰 niezale偶nie czy u偶yjemy znak otwarcia lub zamkni臋cia nawiasu. Niekt贸re z nich maj膮 alias:

  • (, ) lub b - nawias okr膮g艂y

  • {, } lub B - nawias w膮saty

  • [, ] - nawias kwadratowy

  • <, > - nawias ostry

Dla programist贸w s膮 zdefiniowane obiekty HTML. Znak t to tekst pomi臋dzy tagami, dzi臋ki > mo偶emy zmieni膰 sam znacznik (tak jakby to by艂 zwyk艂y nawias ostry) np.: <span>surykatka<span> 鈫 dit skasuje wyraz ``surykatka''

Dodatkowe obiekty mo偶na samemu zdefiniowa膰 lub zainstalowa膰 odpowiedni plugin.

Po艂膮czenie polece艅

Tak jak wspomina艂em do Vima mo偶na podej艣膰 jak do j臋zyka programowania. Prawie wszystkie wcze艣niej grupy skr贸t贸w mo偶na ze sob膮 komponowa膰 w jedno polecenie, kt贸re ma poni偶sz膮 struktur臋:

[liczba][komenda][obiekt tekstowy lub ruch]

Sk艂adowe tego polecenia s膮 opcjonalne. Nie musimy powtarza膰 lub manipulowa膰 kilkoma obiektami, bez komendy edycyjnej b臋dziemy jedynie porusza膰 si臋 po dokumencie. W tym momencie mo偶na zauwa偶y膰, 偶e nie potrzebujemy uczy膰 si臋 wszystkich skr贸t贸w. Kilka polece艅 daje nam ogromne mo偶liwo艣ci i sposoby manipulacji dokumentem. Oto przyk艂ady:

  • 3w - przej艣cie o 3 wyrazy do przodu

  • 3pb - skopiowanie 3 poprzednich wyraz贸w

  • ci[ - zamiana znak贸w w nawiasie kwadratowym

  • 2dap - usuni臋cie 2 paragraf贸w

  • d/{text} - kasowanie tekstu od kursora do wyszukiwanego wzorca

  • vfz - przej艣cie do trybu wizualnego i zaznaczenie tekstu do pierwszego wyst膮pienia litery z

  • xp - zamiana miejscami dw贸ch liter

  • guH - zamiana wszystkich liter na ma艂e, od kursora do g贸rnej kraw臋dzi ekranu

  • dG - usuni臋cie wszystkiego od kursora do ko艅ca dokumentu

  • 4>j - wci臋cie 4 nast臋pnych linii

  • 2. - dwukrotne powt贸rzenie ostatniego polecenia

  • d鈥檃 - dzi臋ki takiej konstrukcji, Vim usuwa wszystko od miejsca zak艂adki a do miejsca, w kt贸rym znajduje si臋 kursor

  • 5c-w+ - zwi臋kszenie okna o 5 wierszy

Porady

Na sam koniec tego wst臋pu do Vima, mam dla Was kilka porad, kt贸re mog膮 by膰 przydatne. Pierwsza z nich wydaje si臋 by膰 dziwna. Proponuj臋 zamiast Vima zainstalowa膰 jego fork NeoVim. Program ten ma kilka dodatkowych funkcji i wydaje mi si臋, 偶e jest bardzie dostosowany do pracy od razu po zainstalowaniu. M贸wi膮c o ustawieniach, na stronie vim-bootstrap znajdziemy przygotowane pliki konfiguracyjne. Podczas pisania mo偶emy korzysta膰 z autouzupe艂niania. List臋 s艂贸w, kt贸re wyst膮pi艂y w dokumencie otworzymy przez Ctrl+n lub Ctrl+p, skr贸ty te odpowiadaj膮 te偶 za ich wyb贸r.

Zach臋t膮 do nauki Vima jest fakt, i偶 w innych programach zaimplementowane s膮 poznane nam skr贸ty. Praktycznie wi臋kszo艣膰 popularnych IDE ma wtyczk臋, kt贸ra umo偶liwi nam operowaniem tekstem w ten sam spos贸b jak w Vime. W pow艂okach systemowych bash i zsh jest mo偶liwo艣膰 w艂膮czenia Vi mode. Surfingkeys to jedno z rozszerze艅 do Firefox i przegl膮darek bazuj膮cych na Chromium, kt贸re pozwalaj膮 nawigowa膰 po stronach internetowych. Niekt贸re aplikacje, zorientowane na produktywno艣膰 pozwalaj膮 na 艂atw膮 zamian臋 lub wspieraj膮, skr贸ty podobne do tych z Vima.

vimiv
Img 1. VimVi przegl膮darka zdj臋膰
  • vifm i ranger 鈫 Przegl膮darki plik贸w

  • termite 鈫 Terminal linuksowy, kt贸ry posiada tryby jak w Vim.

  • vimiv, feh i sxiv 鈫 Lekkie przegl膮darki zdj臋膰

  • cmus i PMS 鈫 Odtwarzacze muzyczne

  • zathura i apvlv 鈫 Przegl膮darki pdf

  • i3wm 鈫 Window manager

  • VNote 鈫 Aplikacja do robienia notatek w Markdown

  • mutt 鈫 Klient e-mail

  • TuDu 鈫 Lista zada艅 w terminalu

  • qutebrowser 鈫 Lekka przegl膮darka internetowa

  • vibreoffice 鈫 Plugin do LibreOffice i OpenOffice

  • Vimpressing 鈫 Tworzenie prezentacji w Vim

  • viemu - emulatora Vima

Poni偶ej zamieszczam przydatn膮 grafik臋 z skr贸tami klawiaturowymi.

cheat sheet
Img 2. Vim cheat sheet