Vi – edytor tekstu

Ten artykuł pierwotnie ukazał się na naszej stronie w 2004 roku.

Postanowiliśmy jednak odświeżać wartościowe publikacje i ponownie je wyciągać z naszego archiwum. Mamy nadzieję, że nadal znajdziecie w nich sporo przydanych i ciekawych informacji.

Pozwolę sobie, na wprowadzenie Was drodzy Czytelnicy, w świat magii jaki oferuje nam edytor vi. Na pierwszy rzut oka, vi nie jest imponującym edytorem. Ale posiada jedną niezaprzeczalnie wielką zaletę. Edytor vi dostępny jest we wszystkich klonach systemu UNIX. Gorzej, zazwyczaj vi jest domyślnym edytorem dla większości U*nix-ów. Często niektóre programy wykorzystują vi jako swój bazowy edytor opcji. Tym samym jeśli zostaniecie zmuszeni do pracy na jakimś U*nix-ie na pewno będzie tam czekać na was edytor vi. Możecie mi wierzyć lub nie, ale przekonacie się o tym dość szybko. I proszę mi tu nie pisać w komentarzach, że wam to nie potrzebne bo używacie mcedit, pico, joe… tak zgadzam się używacie tego na tym określonym komputerze/serwerze… na innym już nie koniecznie 😉

Vi jako edytor z lat 70 ubiegłego stulecia doczekał się kilku młodszych braci. Najpopularniejszym jest VIM (mianem VIM-a często określa się również wszystkie edytory vi podobne). Jak można zobaczyć po odpaleniu VIM-a jest to edytor bardziej rozbudowany, posiadający więcej opcji, więcej możliwości. Prawdopodobnie VIM jest najbardziej lubianym edytorem programistów, ze względu na dostępne opcje podświetlania tekstu/składni języków (kolor AND/OR pogrubienie) oraz przyjazny system pomocy.

1. To, co każdy powinien wiedzieć o vi

Zaczynamy (z linii poleceń):
$ vi

Jak widzisz odpalany z linii poleceń, bez menu, bez podpowiedzi. Po prostu czarny ekran! Na tym czarnym ekranie można wydzielić dwa obszary robocze: obszar edycji tekstu i obszar poleceń. Obszar poleceń to tak naprawdę ostatnia linia na dole ekranu, a obszar edycji tekstu to pozostałe linie.

Tym samym możemy powiedzieć, że vi posiada dwa tryby pracy:
TRYB POLECEŃ i TRYB EDYCJI:
– w trybie poleceń wydajesz polecenia określające, co chcesz zrobić;
– w trybie edycji wpisujesz tekst do pliku, który aktualnie edytujemy.

Po uruchomieniu vi domyślnie znajdujemy się w trybie poleceń.
Przechodzenie do trybu edycji odbywa się w następujący sposób:

UWAGA: [ESC] – mam tu na myśli przycisk w górnym lewym rogu klawiatury “Escape” nie musisz go wciskać za każdym razem jak chcesz wykonać jakieś polecenie pod warunkiem że już jesteś w “trybie poleceń”, jeśli nie jesteś pewny wciśnij [ESC] 😉

[ESC] i
--> teraz możemy pisać ;)

lub przez wciśnięcie przycisku [Insert]
--> teraz również możemy pisać....

Koniec tekstu (pliku) oznaczony jest znakiem “~” (tylda) na początku linii.

Jeśli pragniesz powrócić do trybu poleceń, bezwzględnie wciśnij przycisk [ESC]
Przygotuj się na to, że [ESC] będzie najczęściej używanym przyciskiem, tak jak i “i” 😉

Aby wyjść z vi:

bez zapisu tekstu do pliku
[ESC] :q!

z zapisem tekstu do pliku
[ESC] :wq nazwa_pliku

2. NIEKONIECZNIE zaawansowane polecenia.

UWAGA: vi rozróżnia wielkość Znaków!!!

Opcje przydatne:

[ESC] :set list
--> Znaki '$', które się pojawiły, pokazują koniec każdej linii.

[ESC] :set nolist
--> wyłącza :set list

[ESC] :set number
--> włączenie numeracji linii

[ESC] :set nonumber
--> wyłącza :set number

[ESC] :set showmode
--> włącza pokazywanie trybów pracy

[ESC] :set noshowmode
--> wyłącza :set showmode


a) Przemieszczanie się po tekście.

Przemieszczanie się po tekście odbywa się przy pomocy kursorów w obu 
trybach pracy. Dodatkowo w trybie poleceń można użyć przycisków [h] [j] [k] [l] ,
chociaż ja wolę kursory ;)

Inne opcje umożliwiające przemieszczanie się po tekście.


[ESC] [CTRL] + f
--> przejście o 1 stronę do przodu

[ESC] [CTRL] + b
--> przejście o 1 stronę do tyłu

[ESC] G
--> przejście na koniec pliku(tekstu)
możesz również użyć [ESC] :$

[ESC] [CTRL] u 
--> przechodzi w górę o pół ekranu

[ESC] [CTRL] d
--> przechodzi w dół o pół ekranu

[ESC] [CTRL] y
--> przesuwa ekran w górę, nie przemieszczając kursora

[ESC] [CTRL] e
--> przesuwa ekran w dół, nie przemieszczając kursrora

[ESC] M
--> skocz do środka ekranu.

[ESC] L 
--> skocz do końca ekranu.

[ESC] H 
--> skocz do początku ekranu.

[ESC] } 
--> paragraf w dół.

[ESC] { 
--> paragraf w górę.

[ESC] 0 (zero)
--> przenosi kursor na początek linii

[ESC] $ 
--> przenosi kursor na koniec linii

[ESC] ^
--> przenosi kursor do pierwszego znaku w linii 
(pomijając tzw. białe znaki)

[ESC] w
--> przesuwa kursor do początku następnego słowa

[ESC] b
--> przesuwa kursor do początku poprzedniego słowa

[ESC] e
--> przesuwa kursor na koniec następnego słowa

[ESC] :9
--> przenosi kursor na początek 9 linii

[ESC] 18|
--> przenosi kursor na 18 znak w aktualnej linii



b) Wycinanie, kasowanie, dodawanie tekstu.

[ESC] ITekst
--> wstawia ciąg "Tekst" na początku aktualnej linii.

[ESC] iTekst
--> wstawia ciąg "Tekst" w aktualnej pozycji kursora.

[ESC] ATekst
--> dodaje ciąg "Tekst" na końcu aktualnej linii.

[ESC] aTekst
--> dodaje łańcuch znaków "Tekst"

[ESC] oTekst
--> otwiera nowa pustą linię poniżej kursora i wstawia "Tekst".

[ESC] OTekst
--> otwiera nowa pustą linię powyżej kursora i wstawia "Tekst".

[ESC] u
--> cofa ostatnią modyfikację.

[ESC] . (kropka)
--> powtarza ostatnią modyfikację

[ESC] J
--> Łączy aktualną linię (gdzie jest kursor) z następująca po niej.

[ESC] x
--> usuwa znak, na którym znajduje się kursor.

[ESC] 4x
--> usuwa 4 znaków zaczynając od pozycji kursora.

[ESC] dd
--> usuwa aktualną linie.

[ESC] 7dd
--> usuwa 7 linii, zaczynając od bieżącej linii.

[ESC] :10,35d
--> usuwa 25 linii (od 10 do 35 włącznie)

[ESC] D
--> usuwa tekst od pozycji kursora do końca linii

[ESC] yw
--> zapisuje do bufora aktualne słowo.

[ESC] yy
--> zapisuje do bufora aktualną linię.

[ESC] 9yy
--> zapisuje do bufora 9 linii, zaczynając od aktualnej.

[ESC] p
--> wstawianie zawartości bufora.

[ESC] dw
--> usuwa aktualne słowo, zaczynając od pozycji kursora 
(pozostajesz w trybie poleceń).

[ESC] 15dw
--> usuwa 15 słów

[ESC] cw
--> zamienia aktualne słowo, poczynając od pozycji kursora 
(przełącza w tryb edycji).

[ESC] 25cw
--> zmienia 25 słów

[ESC] cc
--> zmienia tekst w aktualnej linii (kasuje linię i przechodzi do trybu edycji, skasowany tekst znajduje się w buforze)

[ESC] 7cc
--> zmienia 7 linii, zaczynając od aktualnej

[ESC] :10,35cc
--> zmienia linie od 10 do 35 włącznie

[ESC] C
--> zmienia pozostałą część linii

[ESC] s 
--> zamienia znak, wskazywany przez kursor (przełącza w tryb edycji)

[ESC] 10s 
--> zamienia 10 znaków poczynając od pozycji kursora


c) Przeszukiwanie tekstu.

[ESC] /slowo
--> przeszukuje tekst w poszukiwaniu słowa "slowo".
n - następne wystąpienie.
N - poprzednie wystąpienie.

[ESC] ?slowo
--> szukanie wstecz (zostaje zamienione znaczenie poleceń n i N)


W przeszukiwaniu warto również pamiętać o tym że:
. (kropka) zastępuje dowolny znak.

[ESC] /slow.
--> zostaną znalezione słowa zaczynające się na "slow" zakończone 
dowolnym znakiem nie specjalnym.

Gdy pragniesz znaleźć słowo zawierające znaki specjalne ( * /  . ! itd...) należy przed znakiem specjalnym wstawić znak '\'

[ESC] /s.12
--> zostanie znalezione słowo "s.12"


Można również szukać znaków:

[ESC] fz
--> szuka następnego znaku "z" w aktualnej linii
; - szuka następnego znaku "z" w aktualnej linii
, - szuka poprzedniego znaku "z" w aktualnej linii

[ESC] Fz
--> szuka poprzedniego znaku "z" w aktualnej linii
; - szuka poprzedniego znaku "z" w aktualnej linii
, - szuka następnego znaku "z" w aktualnej linii



d) Zmiana tekstu.

Aby zamienić "stare slowa" na "nowe słowa" :

[ESC] :s/stare slowa /nowe słowa
--> jeśli w aktualnej linii znajdują się ciągi "stare slowa", zostanie 
zamieniony tylko pierwszy.

[ESC] :s/stare slowa /nowe słowa/g
--> zamienia wszystkie wystąpienia ciągu  "stare slowa" w aktualnej linii

[ESC] :1,9s/stare slowa /nowe słowa/g
--> zamienia wszystkie wystąpienia ciągu "stare slowa" w liniach od 1 do 9

[ESC] :10,$s/stare slowa /nowe słowa/g
--> zamienia wszystkie wystąpienia ciągu "stare slowa" w liniach od 10
 do końca pliku

[ESC] :%s/stare slowa /nowe słowa/g
--> zamienia wszystkie wystąpienia ciągu "stare slowa" w pliku



e) Zapisywanie i odczytywanie plików.

Polecenie:

$ vi plik.txt
--> zostanie odpalony edytor vi i wczytany plik "plik.txt" lub jeśli nie istnieje zostanie utworzony.

$ vi -R plik.txt
--> opcja -R "readonly" umożliwia nam jedynie czytanie pliku, bez możliwości zapisywania ewentualnie dokonanych zmian.

[ESC] :q!
--> wyjście z edytora bez zapisu tekstu.

[ESC] :w
--> zapisuje modyfikacje w aktualnym pliku.

[ESC] :w inny_plik
--> zapisuje zawartość aktualnego pliku do pliku o nazwie "inny_plik"

[ESC] :2,15w inny_pliczek
--> zapisuje linie od 2 do 15 włącznie aktualnego pliku do pliku o nazwie "inny_pliczek"

[ESC] :w! inny_plik
--> nadpisuje istniejący plik "inny_plik"

[ESC] :w >> inny_pliczek
--> dopisuje zawartość aktualnego pliku na koniec pliku "inny_pliczek"

[ESC] :2,15w>>inny_plik
--> dopisuje na koniec pliku "inny_plik" linie od 2 do 15

[ESC] :wq
--> wyjście z edytora z zapisem tekstu do pliku.

[ESC] :e inny_pliczek
--> wczytuje do edycji plik "inny_pliczek"



f) Inne przydatne polecenia.

[ESC] :r inny_pliczek.txt 
--> wstawienie w miejscu kursora(i w dół) pliku "inny_pliczek.txt"

[ESC] :r! [polecenie shell]
--> wstawianie w miejscu kursora(i w dół) wyniku polecenia powłoki.
np. :r! pwd

[ESC] :! ls
--> wykonanie polecenia powłoki, bez wpisywania wyniku do tekstu edytowanego.
Bardzo przydatne polecenie gdy potrzebujemy jakiejś informacji 
a nie chcemy opuszczać edytora.
np. :!date 
np. :!ls -la | more

[ESC] [CTRL] g
--> wypisuje informacje o aktualnym pliku.

[ESC] :help
--> Pomoc edytora vi.

Prawda, że bardzo przyjemny edytor? 😉


Przedstawiłem Ci drogi Czytelniku zaledwie część poleceń dostępnych w vi i tak sobie myślę, że wystarczą Ci w codziennej pracy z vi.

W ramach podsumowania warto zauważyć:
– vi jest edytorem tekstowym, który na pewno znajdziesz na komputerze z systemem UNIX/Linux;
– vi posiada wyjątkowo duże możliwości;
– vi umożliwia edycję bardzo wielkich plików;
– vi pozwala na szybkie i efektywne wykonanie wielu złożonych operacji.

Data pierwotnej publikacji:  2004-04-07

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Poprzedni post
Deepin 20.2 aktualizacja

Nowy Deepin 20.2 z wsparciem dwóch kerneli

Następny post
Ubuntu 21.04 Hirsute Hippo

Ubuntu 21.04 Hirsute Hippo w wersji beta zostało właśnie wydane

Powiązane posty