Wikipedysta:Klapaucjusz/VIM
Z Wikipedii
VIM | |
![]() |
|
Rodzaj | edytor tekstu |
Pierwsze wydanie | 1991 |
Aktualna wersja | 6.4 15 października 2005 |
Producent | Bram Moolenaar i inni programiści |
Licencja | VIM License, kompatybilna z GPL |
Platforma systemowa | Linux, FreeBSD, MS Windows, AmigaOS, Atari MiNT, BeOS, DOS, MacOS, NextStep, OS/2, OSF, RiscOS, SGI, UNIX, VMS |
http://www.vim.org |
VIM według oficjalnej interpretacji oznacza VI iMproved. Jest to najpopularniejszy, najbardziej rozbudowany, wieloplatformowy klon edytora tekstu vi, napisany przez Brama Moolenaara, holenderskiego programistę.
vim kontra vi
VIM został wyposażony w wielokrotne wycofywanie dokonanych zmian - domyślnie aż tysiąckrotne, podczas gdy vi pozostał przy... jednokrotnym. Możliwe stało się wreszcie przewijanie ekranu w poziomie, przydatne przy edycji wierszy dłuższych niż szerokość ekranu. Brak też jest obecnie ograniczeń (odczuwalnych) na długość wierszy, ich liczbę czy rozmiar pliku.
Polecenia VIM-a i ich składnia są w pełni zgodne z vi, więc VIM oprócz tego samego przypisania klawiszy ma również system rejestrów (schowków) przeznaczonych do przechowywania fragmentów tekstu; tekst można kopiować do 26 rejestrów nazwanych dowolną literą alfabetu. Tak jak w vi, "wysoki" zakres A-Z służy do kopiowania tekstu między plikami. W VIM-ie jest to jednak znacznie wygodniejsze dzięki możliwości edycji pliku/plików w osobnych oknach (tzw. buforach). VIM potrafi znacznie więcej, oferując na przykład podświetlanie składni (prócz kilkuset "języków" programowania także dla HTML i CSS) oraz wsparcie dla narzędzi programistycznych takich jak ctags, make, CVS czy GCC.
Z pozostałych usprawnień wymienić można między innymi: przeglądanie katalogów (w osobnym oknie także na konsoli tekstowej i bez opuszczania edytowanego pliku), dostęp do historii wiersza poleceń trybu Ex, budowanie rozszerzeń, makr, zmianę w przypisaniach klawiszy, zapisywanie/otwieranie pliku w postaci zaszyfrowanej oraz obsługa rozszerzonych wyrażeń regularnych. To ostatnie w stopniu zbliżonym do wyspecjalizowanych, uniksowych narzędzi.
Chociaż VIM jest zasadniczo edytorem konsolowym, to istnieje wersja pod nazwą gvim, działająca w środowisku graficznym (również w systemach firmy Microsoft)
W odróżnieniu od vi, VIM może pracować zarówno w sposób modalny jak i w trybie ciągłej edycji.
Spis treści |
tryby pracy
VIM jest przede wszystkim edytorem modalnym tzn. mającym więcej niż jeden tryb pracy. Zależnie od sposobu liczenia, VIM ma od trzech trybów "elementarnych" (NORMAL, INSERT i COMMAND-LINE/EX) do jedenastu... Według twórcy VIM-a można wyróżnić aż 6 trybów podstawowych (basic modes) i 5 dodatkowych (additional modes). Ich opis znajduje się w bardzo obszernej dokumentacji podręcznej, dostępnej z poziomu VIM-a. Wprowadzenie w terminologię i specyfikę trybów uzyskuje się po wpisaniu :help vim-modes w tzw. trybie Ex. Przejście w tryb Ex zawsze zaczyna się od dwukropka (poprzedzonego wciśnięciem klawisza Esc w przypadku trybu wyjściowego innego niż NORMAL).
zmiana trybu
Dalszy opis skupia się na trybach NORMAL, VISUAL i REPLACE. Tryb INSERT jest dość oczywisty i nie wymaga osobnego opisu jako wspólny wszystkim edytorom pełnoekranowym.
Domyślnie edytor VIM wita użytkownika trybem NORMAL. Zmiana trybu NORMAL na VISUAL wymaga wpisania małej litery v (należy zwracać uwagę na stan klawisza Caps Lock). Z kolei zmiana na tryb REPLACE możliwa jest z dwóch trybów: z trybu NORMAL przez wpisanie dużego R oraz z trybu INSERT po wciśnięciu klawisza Insert.
vizualna edycja w trybie REPLACE
prosty przykład edycji
Nietypowe (niespotykane gdzie indziej) zasady edycji w edytorze VIM zostaną zademonstrowane na przykładzie trybu REPLACE, formalnie będącego rozszerzeniem trybu INSERT.
Najpierw proste zastępowanie (ang. replace) kolejnych, pojedynczych znaków innymi znakami: jest to zadanie stosunkowo intuicyjne, ponieważ po przejściu w tryb REPLACE każdy wpisany znak nadpisuje inny znak. Tak aż do naciśnięcia klawisza Esc czyli opuszczenia trybu.
trudniejszy przykład edycji
Szybka podmiana dłuższego fragmentu tekstu bez zmiany liczby znaków w pliku wynikowym jest mniej trywialna. Przynajmniej z punktu widzenia użytkownika przyzwyczajonego do pozornej intuicyjności edytorów nie-modalnych.
- włączyć tryb VISUAL (v).
- w dowolny sposób zaznaczyć ciąg znaków do skopiowania, który ma zastąpić ciąg dotychczasowy. Źródło ciągu docelowego nie jest w tym momencie istotne - może to być nawet zewnętrzny plik wyświetlony w innym oknie edytora. W trybie VISUAL, do zaznaczenia można użyć zarówno myszki jak i jednego z czterech klawiszy kierunkowych na klawiaturze. W obu przypadkach skopiowanie zaznaczonego ciągu do pamięci podręcznej edytora (rejestru) następuje po wciśnięciu litery y (yank). Uwaga: maksymalnie można zaznaczyć do 26. fragmentów, ale wtedy każdy z nich musi zostać skopiowany do osobnego, nazwanego rejestru sekwencją trzech znaków: cudzysłowu, dowolnie wybranej litery alfabetu oraz - jak poprzednio - litery y.
- zmienić tryb na REPLACE (R).
- ustawić kursor edytora w miejscu, od którego ma nastąpić podmiana ciągu znaków. Aby uzyskać dostęp do pamięci rejestru należy przytrzymać jednocześnie klawisze Ctrl oraz r (w dokumentacji ta kombinacja oznaczana jest jako CTRL-R). W rezultacie, znak stojący pod kursorem zostanie chwilowo (tylko na ekranie) zastąpiony znakiem podwójnego cudzysłowu. Na kolorowym terminalu będzie on wyróżniony kolorem niebieskim dla podkreślenia jego tymczasowego charakteru.
- ręcznie wpisać znak cudzysłowu (ostatnio skopiowany fragment zawsze trafia do tak oznaczonego, domyślnego rejestru). Ciąg znaków zostanie wklejony, co w trybie REPLACE oznacza jego podmianę. Edycja dobiegła końca.
Uwaga: w przypadku potrzeby odwołania się do innej pozycji w rejestrze trzeba podać przyporządkowaną tej pozycji literę alfabetu. Lista wszystkich rejestrów pamięci wraz z ich zawartością dostępna jest w 2. identycznych poleceniach trybu Ex: :registers (krótko :reg) oraz :display (:di).
wklejanie w wierszu poleceń
Kombinacja CTRL-R + litera (a-z) jest pomocna także przy wklejaniu skopiowanego tekstu w wiersz poleceń (COMMAND-LINE/Ex) edytora VIM. Pozwala to skutecznie uniknąć prozaicznych błędów wynikających ze żmudnego przepisywania fraz, a co za tym idzie przyspieszyć i uczynić przyjemniejszą pracę nad tekstem.
przykład polecenia w trybie Ex
Typowy przykład najczęściej używanego polecenia trybu Ex:
:%s/wyrażenie regularne lub tekst docelowy/tekst dotychczasowy/gc
Znak procentu wyznacza cały plik jako zakres działania dla polecenia zamiany tekstu. Ukośniki separują poszczególne części polecenia. Przedostatnie g (od global) nakazuje wykonać polecenie maksymalną liczbę razy (domyślnie tylko raz dla każdego z wierszy). Końcowe, opcjonalne c wymusza interaktywność - potwierdzanie wykonania polecenia w przypadku odnalezienia ciągu spełniającego podane kryterium.
konfigurowalność
VIM jest edytorem dającym się w dużym stopniu konfigurować. W efekcie VIM może być surowy i nieprzyjazny jak jego protoplasta lub przeciwnie: cieszyć intelekt i oko bogactwem funkcji czy kolorów. Informacja o bieżącym trybie pracy wyświetlana jest w ostatniej linii ekranu. Można ją włączyć specjalną zmienną. Odpowiednie polecenie wydaje się w trybie Ex :set showmode (lub krócej: :se smd) - zobacz :h smd). Powyższe polecenie, jak i większość innych, można dopisać do pliku konfiguracyjnego wczytywanego w czasie inicjalizacji. W systemach klasy GNU/Linux i Unix plik .vimrc znajduje się w katalogu domowym użytkownika. W systemach MS-DOS i Win32 odpowiada mu _vimrc (zob. :h vimrc).
ograniczenia edytora
Mimo swoich imponujących możliwości - zwłaszcza w zakresie automatycznego przetwarzania tekstu - VIM oferuje dość ograniczone wsparcie dla operacji na pionowych blokach. Przy czym o ile skopiowanie pionowego bloku tekstu nie jest żadnym problemem (w trybie VISUAL BLOCK, włączanym kombinacją Ctrl-V względnie Ctrl-Q w trybie symulowania klawiszy edytorów firmy Microsoft), to już zastąpienie takim blokiem w trybie REPLACE innego bloku z reguły nie przynosi spodziewanego rezultatu. Wynika to z faktu, że VIM w swej istocie pozostał edytorem wierszowym - silnym, ale nadającym się głównie do pisania kodu, więc niepraktycznym do zabawy np. grafiką ASCII (gdzie swobodne manipulacje na pionowych blokach tekstu wymagają traktowania ekranu raczej jak matrycy znaków niż zbioru wierszy).
Z tego samego powodu nie należy do szczególnie wygodnych poruszanie się w pionie po długich, zawiniętych wierszach. Klawisze kierunku Up/Down (strzałki góra/dół) są w takim przypadku mało przydatne, powodując zbyt długie skoki o tyle wierszy ekranowych, ile wymagało wyświetlenie fizycznego, zawiniętego do szerokości ekranu wiersza. Zgodne z oczekiwaniami działanie tych klawiszy można wymusić dopiero poprzedzając je literą g, przed którą, opcjonalnie, podaje się liczbę ekranowych wierszy, o jaką kursor ma się przemieścić.
W vi klawiszom ruchu w kierunku pionowym odpowiadają litery: k (góra) oraz j (dół). Tak też jest w VIM-ie, co weteranom trybu tekstowego pozwala zachować np. w GNU/Linuksie przynajmniej część przyzwyczajeń nabytych przy pracy z vi na systemie Unix.
VIM: przykłady poleceń
Podstawowe polecenia są identyczne jak w vi. VIM jednak nie byłby tym, czym jest, gdyby nie miał setek nowych. Poniżej przykłady tych najciekawszych i najbardziej użytecznych (w wersjach najkrótszych, co oznacza: najpraktyczniejszych). Ich pełnobrzmiące nazwy można poznać wpisując :h nazwa_polecenia
tryb NORMAL
- ga - wartość kodu ASCII znaku spod kursora (dziesiętnie, szesnastkowo, ósemkowo)
- g8 - wartość kodu znaku spod kursora przy założeniu, że jest to UTF-8
- 50% - skok na połowę pliku
- 10000go - skok do dziesięciotysięcznego bajtu pliku
- g Ctrl-g - komplet informacji o pliku i położeniu kursora (kolumna, wiersz, słowo, liczba bajtów)
Sex w trybie Ex
- :Sex - otwarcie okna z widokiem zawartości bieżącego katalogu (Split file explore)
- :as - wartość kodu ASCII znaku spod kursora (dziesiętnie, szesnastkowo, ósemkowo)
- :syntax on - włączenie reguł podświetlania składni (wg rozszerzenia pliku)
- :se syntax=HTML - wymuszenie podświetlania składni wg reguł "języka" HTML
- :se wrap | se nolist | se lbr - zawinięcie długich wierszy z eleganckim łamaniem na granicy słów
- :se noma - skuteczna blokada pliku (bufora) przed modyfikacją
- :se ff=unix - wymuszenie uniksowego, pojedynczego znaku końca wierszy (spod dowolnego systemu)
- :se is | se hls - włączenie przyrostowego podświetlenia wystąpień znaków spełniających kryterium wyszukiwania
- :se vb - włączenie sygnału optycznego (visual bell) w miejce akustycznego
- :sp nazwa_pliku - otwarcie nowego okna (bufora) edycyjnego w poziomie
- :vsp nazwa_pliku - otwarcie nowego okna (bufora) edycyjnego w pionie
- :%s/<[^>\n]*>//g - "oczyszczenie" pliku z kodu HTML
A oto para poleceń pomocna przy edycji Wikipedii na konsoli o zestawie znaków innym niż unikod (np. ISO-8859-2):
- :se enc=utf8 - ustawienie w VIM-ie kodowania UTF-8
- :se tenc=iso-8859-2 - poinformowanie VIM-a o obowiązującym kodowaniu na konsoli (terminal encoding)
Linki zewnętrzne