Vim
Logo programu | |
Autor | Bram Moolenaar i inni |
---|---|
Pierwsze wydanie | 1991 |
Aktualna wersja stabilna | 9.1.0 (2 stycznia 2024) [±] |
Język programowania | C, Vim script |
System operacyjny | Wieloplatformowy |
Rodzaj | edytor tekstu |
Licencja | Charityware |
Strona internetowa |
Vim (skrót od ang. vi improved) – wieloplatformowy klon edytora tekstu vi, napisany przez holenderskiego programistę Brama Moolenaara. Vim należy do grupy wolnego oprogramowania o otwartym kodzie źródłowym. Pierwsza wersja została wydana w 1991 roku.
Vim wydawany jest na własnej licencji typu charityware, kompatybilnej z GPL. Oznacza to, iż użytkownik Vima, otrzymując go nieodpłatnie, jest zachęcany przez autora do dokonywania wpłat na cele charytatywne – tutaj na pomoc ofiarom AIDS w Ugandzie.
Vim w ostatnich latach[kiedy?] był kilkukrotnie wybierany na najpopularniejszy edytor tekstowy wśród czytelników „Linux Journal”, wyprzedzając m.in. Emacsa.
Tryby pracy
[edytuj | edytuj kod]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 Vima 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 Vima. 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
[edytuj | edytuj kod]Dalszy opis skupia się na trybach NORMAL, VISUAL i REPLACE. Tryb INSERT 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 wielkiego R oraz z trybu INSERT po wciśnięciu klawisza Insert.
Wizualna edycja w trybie REPLACE
[edytuj | edytuj kod]Prosty przykład edycji
[edytuj | edytuj kod]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
[edytuj | edytuj kod]Szybka podmiana dłuższego fragmentu tekstu bez zmiany liczby znaków w pliku wynikowym jest trudniejsza, przynajmniej z punktu widzenia użytkownika przyzwyczajonego do intuicyjności edytorów niemodalnych.
- 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ń
[edytuj | edytuj kod]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ąć oczywistych błędów wynikających ze żmudnego przepisywania fraz, a co za tym idzie, przyspieszyć i uprzyjemnić pracę nad tekstem.
Przykład polecenia w trybie Ex
[edytuj | edytuj kod]Typowy przykład najczęściej używanego polecenia trybu Ex:
:%s/wyrażenie regularne lub tekst dotychczasowy/tekst docelowy/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ść
[edytuj | edytuj kod]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 (patrz dla wiki). 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
[edytuj | edytuj kod]Mimo swoich imponujących możliwości – zwłaszcza w zakresie automatycznego przetwarzania tekstu – Vim standardowo 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 – nadającym się głównie do pisania kodu, więc niepraktycznym do tworzenia np. grafiki 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. Chyba że ustawimy to w pliku konfiguracyjnym. Należy umieścić poniższe linie:
map <Down>g<Down> map <Up>g<Up> nmap j gj nmap k gk vmap j gj vmap k gk
Jednakże ogromna konfigurowalność edytora i możliwość stworzenia skryptów zwiększających jego funkcjonalność powodują, że powyższe ograniczenia mogą być zlikwidowane.
W vi klawiszom ruchu w kierunku pionowym odpowiadają litery: k (góra) oraz j (dół). Tak też jest w Vimie, co weteranom trybu tekstowego pozwala zachować np. w GNU/Linuksie przynajmniej część przyzwyczajeń nabytych przy pracy z vi na systemie Unix.
Przykłady poleceń
[edytuj | edytuj kod]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
[edytuj | edytuj kod]- 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 bajta pliku
- 150G – skok do 150. wiersza
- g Ctrl-g – komplet informacji o pliku i położeniu kursora (kolumna, wiersz, słowo, liczba bajtów)
- q: – otwarcie okna z historią poleceń trybu Ex
Tryb ex
[edytuj | edytuj kod]- :Sex – otwarcie okna z widokiem zawartości bieżącego katalogu (Split file explore)
- :as – wartość kodu ASCII znaku spod kursora (dziesiętnie, szesnastkowo, ósemkowo)
- :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 miejsce 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
- :g/^\s*$/d – usunięcie wszystkich pustych linii
- :syntax on – włączenie reguł podświetlania składni (według rozszerzenia pliku)
- :se syn=css – wymuszenie podświetlania składni według reguł „języka” CSS2 (gdy rozszerzenie nie oddaje zawartości – np. .txt zamiast.css)
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 Vimie kodowania UTF-8
- :se tenc=iso-8859-2 – poinformowanie Vima o obowiązującym kodowaniu na konsoli (terminal encoding)
Vim a vi
[edytuj | edytuj kod]Vim został wyposażony w wielokrotne cofanie dokonanych zmian (tzw. undo) – 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 Vima 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, zakres A-Z służy do kopiowania tekstu między plikami. W Vimie 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.