Instrukcja używania edytora vi.

Dlaczego należy znać vi ? Powodów może być wiele, w zależności od systemów jaki używacie. Oto te, które przyszły mi do głowy w kolejności takiej w jakiej przychodziły:

Oto instrukcja (niepełna) przedstawiona w takiej kolejności jaka jest dość wygodna do nauki. Przynajmniej tak mi się wydaje. Najpierw najczęściej używane, na koniec najrzadziej.

Podstawowa informacja:
Edytor może pracować w dwóch trybach: edycji i wydawania komend. W trybie edycji wszystkie klawisze działają zgodnie z intuicją (o ile działają = terminal na to pozwala). W trybie komend niektóre z klawiszy mają szczególne znaczenie. Z ich pomocą wykonujemy komendy. Do trybu komend przechodzimy klawiszem Esc. Do trybu edycji przechodzimy automatycznie po niektórych komendach. Np. edytuj za kursorem (klawisz a).

Porada:
Jeśli nie wiesz co się dzieje z Twoim edytorem wciśnij Esc (możesz nawet kilka razy). Edytor przejdzie do trybu komend - i już wiesz co się dzieje.


Komendy:

esc  - przejście do trybu komend
:q!   - wyjście z edytora bez zapisu - nawet jeśli coś zmieniłeś.


:q    - wyjście z edytora bez zapisu.
:wq   - wyjście z edytora z zapisem.


:w!   - zapis bawet jeśli nie masz praw do zapisu (ale masz prawo do zmiany modów)
Jak zapamiętać:
w - write, q - quit, ! - bez pytań, teraz natychmiast rozkaz!


a    - rozpoczęcie edycji za kursorem
A    - rozpoczęcie edycji na końcu wiersza
i    - rozpoczęcie edycji w miejscu kursora
I    - rozpoczęcie edycji na początku wiersza
Jak zapamiętać:
a - apend, A - takie mocniejsze a, i - insert, I takie mocniejsze i


k    - kursor o jedną pozycję do góry
j    - kursor o jedną pozycję na dół
h    - kursor o jedną pozycję w lewo
l    - kursor o jedną pozycję w prawo

Jak zapamiętać: l -jest po lewej (left), h - jest najbardziej po prawej (z tej czwórki klawiszy), j - jest (podobno) podobne do strzałki w dół, k - (tu wyobraźnia musi zadziałać na maxa)- jest podobne do strzałki w górę.


x    - usuwa znak za kursorem (tam gdzie kursor ma postać _ a nie | to usuwa to co kursor podkreśla)(jak klawisz del)
X    - usuwa znak przed kursorem (<-Backspace)
D    - usuwa jak x ale do końca wiersza
dd    - usuwa wiersz, d5d usunie 5 wierszy a d15d piętnaście
dw    - usuwa do końca słowa

To są wszystkie polecenia, które pozwalają używać edytora jako prostego narzędzia. Dalej to wodotryski.

u    - undo
yy    - copy (do schowka / pliku)
p    -  paste (ze schowka / pliku)
/wzorzec    - wyszukuje to co podaliśmy po / 
n    - wyszukuje następne wystąpienie wzorca
.    - powtarza ostatnie polecenie
G    - idzie na koniec pliku (przydatne w przypadku dużych logów)
:%s/wzorzec/string    - czy ktoś tu widzi wyrażenie regularne? Wyszukuje i zamienia wzorzec na string. Po literze s możesz dać g - global
Praktyczny przykład : :%s/^V^M/ - zamienia ^M na nic (usuwa). Nie wiesz co to jest ^M? To jest powrót karetki, jak przegrasz plik tekstowy na unixa binarnie i będziesz miał to na końcu każdego wiersza to przypomnisz sobie tą strone :-). ^V jest po to by ^M nie było interpretowane (taki \) J - klei dwa wiersze w jeden.
ctrl g - pokazuje aktualny numer wiersza w którym stoi kursor


Dalej takie rzeczy których nie pamiętam i szybciej jest mi to zrobić z kilku komend powyżej zaprezentowanch niż sobie przypomnieć.


w    - przenosi kursor na początek następnego wyrazu
b    - przenosi kursor na początek wyrazu (jeśli jest już na początku przechodzi na początek poprzedniego wyrazu)
ge     - przenosi kursor na koniec poprzedniego wyrazu
$     - przenosi kursor na koniec wiersza
^     - przenosi kursor na początek wiersza
r     - zamienia znak na ten co za chwile naciśniesz

Vi ma o wiele bogatsze możliwości. Wszystkie opisane są w man.

Pisałem, że vi można używać w wierszu poleceń. Przydaje się gdy chcemy poprawić coś w długim poleceniu, nie chcemy go kasować, a kursory nie działają. Jak to robimy: Załóżmy, że już cos napisałeś(aś) i widzisz błąd. Wciskasz esc (przechodzisz do trybu poleceń), klawiszami h oraz l przesuwasz się gdzie chcesz, x-em kasujesz i za pomocą np. a przechodzisz do edycji i piszesz poprawnie.
Inna sytuacja: Piszesz długie polecenie, wciskasz enter i shell wyświetla informację, z której wynika, że się pomyliłeś. Wciskasz esc, następnie klawiszem k przechodzisz do linii wyżej (poprzednie polecenie), modyfikujesz co chcesz i uruchamiasz polecenie. Nic nie stoi na przeszkodzie by cofnąć się więcej wierszy do tyłu lub do przodu (klawisz j).

Dodatkowa możliwość. Pamiętasz, że pomiędzy 100 a 1000 poleceń temu użyłeś(aś) polecenia z bardzo trudną, długą i skomplikowaną składnią. Nie chcesz szukać w .history. No to wciskasz esc następnie piszesz /wzorzec (wzorzec to mały fragment, który pamiętasz). Ojej, nie to się wyświetliło - potrzebujesz poprzedniego użycia, wciskasz n i masz poprzednie użycie.

Co zrobić jak to nie działa w Twoim shell-u. Napisz:
set -o vi
i już masz dostęp do vi w wierszu polecenia i dostęp do wszystkich poleceń jakie masz zapisane w historii.

skok do lewandowicz.eu