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:
- Na każdym Unixie jest i działa nawet w najgorszej, awaryjnej sytuacji.
- Wiele narzędzi wywołuje vi jako domyślny edytor.
- Jest szybki i niezawodny.
- Pozwala na wiele zaawansowanych operacji.
- Można go stosować w wierszu poleceń.
- Jak go poznasz jest łatwy w użyciu.
- Możesz go używać na najgorszych konsolach, w nie do końca kompatybilnych terminalach, na klawiaturach bez kursorów itp.
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