Komputery, oprogramowanie, internet i okolice
Blog > Komentarze do wpisu

Vim, lub jak przestałem się martwić i pokochałem edytor modalny

Do Vima podchodziłem już wiele razy. Po raz pierwszy zakończyło się jak w starym kawale1, zupełnie spanikowałem gdy żaden ze znanych mi skrótów klawiaturowych nie działał jak należy. Potem próba zrobienia tutoriala, dobrnąłem może do połowy. Jakiś czas później kolejna i kolejna. Z jednej strony przerażała mnie wizja nauki tych wszystkich dziwnych komend, z drugiej coś niesamowicie mnie w Vimie fascynowało i przyciągało. Wiedziałem, że w końcu uda mi się go zrozumieć, a może nawet pokochać.

Dawno, dawno temu...

ASR33
Zdjęcie autorstwa DanCentury na licencji CC-BY-SA

Dawno temu, gdy komputer zajmował spory pokój, a dinozaury chodziły po ziemi, do obsługi komputera używano dalekopisów (TeleTYpe). Użytkownik wpisywał na klawiaturze odpowiednie komendy, a komputer za pomocą drukarki wypluwał odpowiedź. Właśnie z myślą o takim sposobie komunikacji z komputerem powstawały wierszowe edytory tekstu. Wierszowe, gdyż pracowało się z nimi na pojedynczych liniach tekstu.Takim właśnie edytorem był napisany na przełomie 1965 i 1966 roku QED.

Na jego podstawie Ken Thompson napisał edytor ed, standardowy edytor tekstowy systemu UNIX. To właśnie sposób implementacji wyrażeń regularnych w edytorze ed wpłynął na powstanie takich narzędzi jak sed (stream editor) czy grep (global/regular expression/print). Ale wróćmy do edytorów tekstu. Rozwinięciem ed'a był napisany przez Billa Joy'a ex (EXtended), zawierał on wiele zmian ułatwiających edycję plików. Najważniejszą z nich było wprowadzenie trybu wizualnego, który wkrótce przerodził się w samodzielny edytor. Tak właśnie, w 1976 roku, powstał vi.

Vi powstawał już dla terminali z monitorami (Bill Joy używał terminala Lear-Siegler ADM-3A), wyświetlanie więcej niż jednej linii tekstu było już więc możliwe. Nadal jednak ograniczeniem była prędkość ówczesnych modemów.

Filozofia ZenVi(m)

Dlaczego tyle miejsca poświęciłem (pre)historii? Bo wydaje mi się, że poznanie kontekstu w jakim powstawał edytor vi pozwala lepiej zrozumieć i docenić dlaczego wygląda on i zachowuje się akurat tak a nie inaczej. Dlaczego jest tak różny od edytorów jakie używane są obecnie.

Tym co najbardziej na początku dziwi to modalność. Po pierwsze trzeba sobie uzmysłowić, że wpisywanie tekstu zajmuje tylko część czasu poświęcanego na edycję tekstu, czy kodu. O wiele więcej czasu spędzamy na poruszaniu się po tekście szukając miejsc, które wymagają poprawek. Dzięki wydzieleniu osobnych trybów do poruszania się po tekście, wykonywania poleceń i wpisywania tekstu, każdy z nich może może posiadać własny zestaw skrótów klawiaturowych i komend. Można więc do poruszania się po tekście wykorzystać klawisze leżące tuż pod palcami (korzystając z vi palce cały czas leżą na rzędzie podstawowym), bez potrzeby tworzenia niewygodnych skrótów z użyciem Ctrl, Shift, Alt.

Drugi problem to mnogość komend. Gdy jednak rozpoczniemy naukę vi przekonamy się, że wszystkie te komendy są do bólu logiczne i bardzo łatwe do zapamiętania. Przyjrzyjmy się przykładom edycji tekstu. Przejście do trybu wpisywania do tekstu to i (jak insert), lub a (jak append), kasowanie słowa to dw (jak delete word), zmiana 3 słów to c3w (jak change 3 words). Poruszanie się po tekście jest równie proste. Przejście do kolejnego słowa to w (jak word), na koniec słowa e (jak end), poprzednie słowo to b (jak back). I tak jest praktycznie ze wszystkimi komendami. Prościej chyba się nie da.

Obsługa vi to tak na prawdę rozmowa. Jak w powyższym przykładzie zmiany słów po prostu mówimy (i to praktycznie pełnym zdaniem!) co chcemy zrobić. Zmień znak, zmień tekst do końca linii, kasuj 2 słowa, kopiuj zdanie, kopiuj linię, idź do następnego zdania, idź do poprzedniego akapitu, ustaw wcięcie dla bloku tekstu objętego nawiasami klamrowymi, przejdź do kolejnego wystąpienia znaku. Wykonujemy polecenie na zakresie tekstu wskazanym przez ruch, lub na obiekcie tekstowym. Zamiast skakać strzałkami pomiędzy znakami możemy operować logicznymi fragmentami edytowanego tekstu. Jednym słowem maksymalna efektywność minimalnym kosztem.

Do tego możliwość zapamiętywania miejsc w tekście, wiele schowków, obsługa wyrażeń regularnych, rozbudowane komendy edytora ex, możliwość tworzenia makr, wielkie możliwości konfiguracyjne i gigantyczna baza pluginów. To wszystko sprawia, że vi jest bardzo uniwersalnym edytorem, który można dostosować do praktycznie każdego zadania. Do tego Vim dodaje szereg nowych możliwości, jak choćby możliwość pracy na wielu plikach jednocześnie (dzielenie okna, praca z kartami).

Jak się nauczyć?

Przede wszystkim nie można się bać vim'a. Owszem, wymaga on trochę czasu na zrozumienie sposobu działania, lecz nie jest taki straszny jak mogłoby się wydawać. Wystarczy kilka razy przerobić vimtutor, by nauczyć się podstaw pozwalających na swobodne poruszanie się po pliku i podstawową edycję. Potem zerknąć na ściągawkę oraz to wprowadzenie do vima. W wolnych chwilach dobrze jest też przeczytać sobie :help (świetnie napisany!). Choć i tak najważniejszy by po prostu zacząć używać vim'a na codzień.

________________
1 Jak wygenerować losowy ciąg znaków? Posadzić laika przed Vim'em i kazać mu wyjść z programu. (powrót)

środa, 07 kwietnia 2010, kosciak1

Polecane wpisy

  • Te przeklęte RSSy

    Niedawno wrzucałem na Buzzie linka do poniższego wykładu z TED Talks. Eli Pariser wskazuje na poważny problem jakim jest stosowanie przez serwisy takie jak Face

  • eTutor.pl, Diki.pl i... KONKURS!

    Czytając tu i ówdzie krytyczne uwagi o projektach powstałych w ramach działania 8.1 programu POIG można odnieść wrażenie, że to głównie wyrzucanie pieniędzy w b

  • O wygodzie i jej granicach słów kilka

    Od zawsze powtarzam, że to komputer jest dla człowieka, a nie człowiek dla komputera. Inaczej mówiąc psim obowiązkiem każdego programu i serwisu jest być nie ty

TrackBack
TrackBack w tym blogu jest moderowany. TrackBack URL do wpisu:
Spis Treści
Kanały RSS
Add to Google
Add to Netvibes