0xcafebabe -- per aspera ad astra

Dokument pobrany z: http://www.anadoxin.org/blog/comment/reply/14

Tagi:  •  

Takim nic nie znaczącym tytułem zatytułowałem nowy post poświęcony najlepszemu edytorowi jaki kiedykolwiek miał okazję być używany, konkretnie chodzi o vim'a. Nie da się ukryć, że początki nauki obsługi tego edytora są raczej cierpkie a wyniki rachityczne, lecz z odrobiną determinacji można przezwyciężyć te umysłowe niedyspozycje, a wtedy każde uderzenie klawisza przypominające szelest upadającego dębowego liścia przybliżać nas będzie do osiągnięcia Zen.

Podstawy jego używania można poznać korzystając z polecenia vimtutor, jednak jest kilka punktów, których vimtutor nie porusza; mianowicie współpraca z zewnętrznymi plikami i/lub strumieniami (no dobra, można znaleźć szczątkowe informacje na ten temat, ale są one tak słabo wyeksponowane, że czytający praktycznie nie zwraca na nie uwagi).

Pierwszy punkt to doklejanie istniejącego pliku do aktualnie edytowanego. Po otwarciu vim'a i otrzymaniu pustej sesji (lub podczas edycji innego pliku), można w prosty sposób wstawić zawartość innego pliku przy pomocy polecenia :r <nazwapliku> - plik zostanie wstawiony od początku następnej linijki. W ten sam sposób można manipulować danymi wygenerowanymi jako wyjście jakiegoś polecenia, np. załóżmy, że do maila chcemy dołączyć listę plików mp3 w naszej kolekcji (niezbyt udany przykład z praktycznego punktu widzenia, ale demonstruje co ma zademonstrować): :r ! find ~/data/mp3 -iname '*.mp3' -type f. Polecenie r służy do wklejania czegoś w miejsce pod kursorem, wykrzyknikiem ! precyzujemy, że chodzi o włączenie do pliku wyjścia polecenia wpisanego po wykrzykniku. Polecenie to find ~/data/mp3 -iname '*.mp3' -type f, które odnajduje wszystkie pliki (-type f) o nazwie *.mp3 (-iname '*.mp3') znajdujące się w katalogu ~/data/mp3 (i podkatalogach).

Wstawianie pliku to jednak tylko jedna forma interakcji vim'a z otoczeniem charakteryzująca się komunikacją jednostronną (z powłoki do vim'a), istnieje też wersja full-duplex :). Przykład: obliczanie hasha sha1 prosto z vim'a. Uruchom vim'a i stwórz bufor o takiej treści:

  1. ala
  2. ma
  3. kota

ustawiając kursor na pierwszym znaku pierwszej linii (aby umieścić tam kursor, wystarczy że wyjdziesz z trybu pisania za pomocą <ESC> i przejdziesz do pierwszej linii pisząc gg). Jak obliczyć hash stringa "ala\nma"? Wejdź do trybu wizualnego klikając v, wciśnij j aby przejść linijkę liżej, $ aby przejść na koniec drugiej linii i : (dwukropek), aby zacząć wpisywać polecenie. Vim wstawi od razu ciąg znaków :'<,'>, co jest po prostu zakresem, na którym będzie operować sprecyzowana przez nas operacja. Wpisz więc ! sha1sum i kliknij enter, a zaznaczony fragment zostanie zamieniony przez jego hash SHA1.

  1. e685fcabcc3058e29ce14edff6bfe03c00c06121  -
  2. kota

Fajnie, nie? Spróbuj potrenować z kodowaniem/dekodowaniem danych za pomocą programu base64 - to jest właśnie siła konsoli w połączeniu z siłą vim'a. :)

Przy okazji, ucząc się obsługi vim'a napotkałem interesujący feature. Po wpisaniu polecenia :h! pokazuje się taki komunikat:

Nie panikuj! :)

Zastanawiający jest tylko fakt, co konkretnie skłoniło autora programu do zaimplementowania takiego jajka. Resztki frustracji po początkach nauki Vi? :)

Komentuj

Zawartość tego pola nie będzie udostępniana publicznie.
  • Adresy internetowe są automatycznie zamieniane w klikalne odnośniki.
  • Use <!--pagebreak--> to create page breaks.
  • You may post block code using <blockcode [type="language"]>...</blockcode> tags. You may also post inline code using <code [type="language"]>...</code> tags.
  • Use <fn>...</fn> to insert automatically numbered footnotes.

Więcej informacji na temat formatowania