Co? Jeszcze jeden tryb w Vimie? Już jest tryb normalny(komend), tryb wizualny i tryb wprowadzania. Nie chcę się uczyć nowego trybu!!!!
:)
Tak na prawdę to musisz się go nauczyć, ale to nic strasznego. Generalnie niektórzy użytkownicy nawet nie wiedzą, że taki tryb istnieje (albo nie wiedzą, że się tak nazywa – po prostu z niego korzystają)
Tryb ten poszerza możliwości zwykłego trybu komend. W trybie normalnym, komendy są bezargumentowe, co trochę ogranicza możliwości edycyjne. W trybie rozszerzonym wszystkie komendy są wykonywane dopiero po wciśnięciu ENTER, więc możemy pisać trochę bardziej złożone.
Aby przejść do trybu rozszerzonego (ex) wciskamy :
dwukropek w trybie normalnym, kursor przeniesie się do liniji pod ekranem edytora i tam możemy wpisywać komendy. Po zakończeniu wciskamy ENTER i całość zostanie wykonana.
Edycja w trybie rozszerzonym
Tryb Ex powiela niektóre funkcjonalności trybu normalnego i umożliwia edycję dokumentu z wykorzystaniem tego trybu Główną różnicą jest to, że w trybie rozszerzonym pracujemy na całych linijkach tekstu. Wszystkie komendy edycyjne składają się z dwóch części: co chcemy zrobić i z czym , czyli podać zasięg edytowanego fragmentu. Jeżeli nie podamy zasięgu to edytor uzna, że chodzi nam o linijkę, w której znajduje się kursor.
Zacznijmy od najprosztych komend:
d
– usuwanie linijki
m
– przesunięcie linijki
co
– kopiowanie linijki
t
– synonim „co” czyli także kopiowanie
Jako parametr kopiowania może być podany numer linii do której kopiowany tekst ma być od razy wklejony, w przeciwnym wypadku tekst zostanie skopiowany do schowka(rejestru).
Jako parametr przenoszenia MUSI być podana linijka do której zostanie tekst przenoszony.
Dla przykładu :
:dENTER
spowoduje usunięcie bieżącej linijki
:1co5
– skopiowanie linijki nr 1 do linijki nr 5
Dla czytelności zapisu nie będę wypisywał już więcej, że komendę kończymy ENTER’em.
Zanim pójdziemy dalej powinniśmy wiedzieć jak włączyć numerację linii w Edytorze, służą do tego komendy:
:numbers
lub :nu
Przejdźmy zatem do określenia zasięgu
- Jeżeli nic nie podamy to komenda zostanie wykonana na bieżącej linijce,
- Jeżeli podamy jedną liczbę to określa ona numer linijki na której chcemy wykonać komendę,
:12d
– usunięcie linijki nr 12 -
Jeżeli przecinkiem możemy rozdzielić zasięg od której linijki do której linijki .
:1,3d
– usuwanie linijek 1 do 3
:5,10mv11
przeniesienie linijek od 5 do 10 do linijki 11(i dalszych)
Można użyć kilka specjalnych symboli:
.
– bieżąca linijka,
$
– ostatnia linijka dokumentu,
%
– cały plik,
*
– zawartość obszaru widocznego,
Śmiało możemy je wykorzystywać przy naszych operacjach
:1,2co.
– kopiowanie linijek od 1 do 2 do bieżącej
:.,$d
– usuwaj z tąd do końca pliku ;)
Możemy także działać relatywnie, wystarczy liczbę oznaczyć znakiem + lub -
:-,+d
– usunięcie linijek od poprzedniej do następnej
:-3co+5
– skopiowanie linijki 3 przed bieżącą do linijki 5 za bieżącą.
:.,.+20d
– usunięcie linijek od bieżącej do 20 za bieżącą.
Problemem może być to, że relatywne określanie pozycji jest liczone wobec bieżącej linijki. Zatem jeżeli jesteśmy w linijce 1 i wykonamy komendę:
1 2 |
:100,+5d |
możemy się spodziewać, że usunie linie od 100 do 105. Jednak w rzeczywistości wyskoczy nam błąd. Bo komenda ta oznacza chęć usunięcia linijek od 100 do 6!.
Jeżeli chcemy aby relatywne pozycjonowanie drugie argumentu było liczone wobec pierwszego – do rozdzielenia ich nie korzystamy z przecinka tylko ze średnika. Zatem komenda:
1 2 |
:100;+5d |
spowoduje usunięcie linijek od 100 do 105.
Kolejną możliwością, określania zasięgu jest wykorzystanie wzorców wyszukiwania.
:/wzorzec/d
usunięcie linijki zawierającą ten wzorzec
:/wzorzec/+d
usunięcie linijki kolejnej po tej zawierającą wskazany wzorzec
:/wzorzec1/,/wzorzec2/d
usunięcie linijek do wzorca 1 do wzorca 2
To wsio na dziś.
.