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,10mv11przeniesienie 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ś.
.