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ę:

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:

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ś.
.