Tomasz Wendlandt Tekst znajduje się pod adresem http://7thGuard.net/news.php?id=1093 To jest wersja oryginalna, przed drobnymi przeróbkami wprowadzonymi przez honey@7thGuard.net. vim vim (Vi IMproved) jest znanym edytorem ekranowym. Używa go spora grupa ludzi, a jeszcze większa pewnie unika. Ten artykuł ma na celu zachęcić nowych użytkowników do korzystania z vima i nauczyć ich obsługi tego edytora. Należy pamiętać, że vim to nie to samo co vi. Ten pierwszy zawiera kilka ulepszem w stosunku do vi, są to między innymi: -wielopoziomowe cofanie ostatniej operacji -kilkakrotne powtarzanie danego polecenia -możliwość korzystania z kursorów w trybie wstawiania -podświetlanie składni Powyżej wypisałem tylko kilka różnic pomiędzy vim, a vi, jeżeli chcesz wiedzieć więcej wpisz: :h diff podczas korzystania z vima w trybie poleceń. Większość kodu edytora napisał Bram Moolenaar, jednak pełną listę ludzi zaangażowanych w jego tworzenie uzyskasz po wpisaniu: :h credits Obecnie vi jest najczęściej dowiązaniem symbolicznym do vim. Pracę możemy rozpocząć na kilka sposobów: $ vi co spowoduje, że edytor otworzy się z pustym buforem, lub edytując wybrany plik: $ vi plik_do_edycji Możemy też otworzyć plik z kursorem ustawionym na n-tym wierszu: $ vi +5 plik_do_edycji w takim przypadku edytor otworzy wybrany przez nas plik, a kursor ustawi na 5 wierszu. Istnieje również możliwość uruchomienia vima z kursorem ustawionym na pierwszym wierszu, w którym znajduje się szukany przez nas wyraz: $ vi +/szukany_wyraz plik_do_edycji Po otwarciu pliku możesz zauważyć pojedyńcze tyldy (~), oznaczają one nic innego jak puste linie. Do poruszania po edytorze możemy używać kursorów, klawiszy PageUp, PageDown, Home (do przejścia na początek wiersza) oraz End (do przejścia na koniec wiersza). Klawisze te posiadają swoje odpowiedniki w przypadku, gdy na naszym terminalu ich nie będzie. k h l j Tak jak widać wyżej: k - w górę, j - w dół, h - w lewo, l - w prawo. Poza tym istnieje kilka możliwości przewinięcia ekranu: Ctrl-b - przewinięcie do góry o jeden ekran, tak jak PageUp Ctrl-f - przewinięcie w dół o jeden ekran, tak jak PageDown Ctrl-u - przewinięcie do góry o pół ekranu Ctrl-d - przewinięcie w dół o pół ekranu Ctrl-y - przewinięcie do góry o jeden wiersz Ctrl-e - przewinięcie w dół o jeden wiersz W - do przodu o jedno słowo B - do tyłu o jedno słowo E - na koniec słowa ( - na początek bieżącego zdania ) - na początek następnego zdania { - na początek bieżącego akapitu } - na początek następnego akapitu W tym miejscu należy wspomnieć o dwóch trybach w jakich pracuje się użyjawiąc vima. Tryb poleceń, w którym znajduje się edytor zaraz po jego uruchomieniu, oraz tryb edycji, w który musimy przełączyć edytor, jeżeli chcemy dodać nowy tekst. Jaka jest różnica pomiędzy nimi? Jak sama nazwa wskazuje tryb edycji służy do wpisywania tekstu i niczego innego. Natomiast tryb poleceń pozwala nam na zabawę z tekstem, dzięki niemu możemy wycinać i wklejać tekst, wywołać polecenie powłoki, skorzystać z edytora wierszowego ex itd. Wystarczy pamiętać, o tym że w trybie edycji po naciśnięciu jakiegoś znaku na klawiaturze pojawi się on na monitorze, a w trybie poleceń nie. Dalsze polecenia dotyczą trybu poleceń i w nim należy je wpisywać, no chyba że podano inaczej ;-). Esc pozwala powrócić z trybu edycji do trybu poleceń. dopisywanie, nadpisywanie i - wstawia znak przed kursorem I - wstawia znak na początku wiersza a - dopisuje znak za kursorem A - dopisuje znak na końcu wiersza r - nadpisuje jeden znak w miejscu, w którym znajduje się kursor, np. rx zastępuje znak pod którym znajduje się kursor znakiem x R - nadpisuje tekst w całym wierszu począwszy od miejsca, w którym znajduje się kursor o - wstawia nowy wiersz poniżej obecnego O - wstawia nowy wiersz powyżej obecnego s - usuwa znak, pod którym znajduje się kursor i rozpoczyna dopisywanie przed nim S - usuwa zawartość obecnego wiersza i na jego początku rozpoczyna dopisywanie C - usuwa zawartość wiersza od miejsca, w którym znajduje się kursor, do jego końca i rozpoczyna dopisywanie usuwanie, kopiowanie, łączenie x - usuwa znak pod którym znajduje się kursor X - usuwa znak na lewo od pozycji kursora J - łączy obency wiersz z następującym po nim gqq - formatuje aktualną linię gqj - formatuje obecny i następny wers, przydatne przy odpisywaniu na listy gqap - formatuje paragraf dd - usuwa obecny wiersz D - usuwa tekst od miejsca, w którym znajduje się kursor do końca wiersza Y lub yy - kopiuje bieżący wiersz do bufora Ctrl-v - pozwala zaznaczyć dowolny blok tekstu, który później można usunąć lub skopiować Usunięty tekst za pomocą D, dd lub x można łatwo przywrócić, ponieważ znajduje się on w buforze. Dlatego skopiowanie (yy,Y) lub usunięcie tekstu (dd,D,x) możemy później wstawić: p - wstawia tekst z bufora za kursorem lub poniżej obecnego wiersza P - wstawia tekst z bufora przed kursorem lub powyżej obecnego wiersza Jeżeli usunęliśmy wiersz wówczas zostanie on wstawiony powyżej lub poniżej obecnego wiersza (w zależności czy ujrzyjemy p lub P). Natomiast usunięcie znaku, słowa lub kilku słów powoduje, że zostaną one wstawione przed lub za kursorem (znów w zależności czy ujrzyjemy p lub P). szukanie /foo [enter] - szuka łańcucha foo za kursorem i gdy go znajdzie podświetla ?foo [enter] - szuka łańcucha foo przed kursorem i gdy go znajdzie podświetla n - powtarza szukanie ostatniego łańcucha do przodu N - powtarza szukanie ostatniego łańcucha do tyłu % - szuka pary dla obecnego nawiasu (może być zwykły, kwadratowy lub klamrowy) /foo/+2 - przejście do 2-go wiersza po foo ?foo?-2 - przejście do 2-go wiersza przed foo Podczas szukania można skorzystać z wyrażen regularnych, oto kilka z nich: ^ - początek wersu $ - koniec wersu \< - początek słowa \> - koniec słowa [a-z] - dowolny znak z tego zakresu [^a-z] - dowolny znak spoza tego zakresu . - dowolny znak przykłady: /^foo - szuka wersów zaczynających się literami foo /\zaznaczanie, numerowanie m - oznaczenie bieżącej pozycji np. mx oznaczenie bierzącej pozycji znakiem x `x - przejście kursora do znacznika x 'x - przejście kursora do początku wiersza ze znacznikiem x Ctrl-g - wyświetlenie numeru bieżącego wiersza oraz kolumny gg - przejście do pierwszego wersu w pliku G - przejście do ostatniego wersu w pliku 5G - przejście do 5-tego wersu w pliku ga - podaje wartość znaku pod, którym znajduje się kursor w systemie dziesiętnym szesnastkowym i ósemkowym cofanie, powtarzanie, zapisywanie i kończenie pracy u - cofa ostatnią operację Ctrl-r - przywraca cofniętą operację . - powtarza ostatnią operację 3dd - usunięcie trzech wierszy ZZ - opuszcza edytor z zapisaniem zmian ZQ - opuszcza edytor bez zapisania zmian ex Ex jest edytorem wierszowym, można wywołać go z linii poleceń lub wewnątrz vi. Używając edytora ex z poziomu vi musimy poprzedzić wydawane polecenia dwukropkiem a następnie zatwierdzić je klawiszem Enter. Można również w łatwy sposób przejść z vi do ex za pomocą Q. Powrót do vi następuje po wpisaniu visual. :!polecenie - wykonanie polecenia w powłoce np: :!ls wyświetla zawartość obecnego katalogu :q - zakończenie pracy :q! - zakończenie pracy bez zapisania dokonanych zmian :w - zapisanie do aktualnego pliku :w 2 - zapisanie do pliku o nazwie 2 :w >>2 - dopisanie do pliku o nazwie 2 :wq - zapisanie i zakończenie pracy :e 2 - rozpoczęcie edycji pliku o nazwie 2 :r 2 - skopiowanie zawartości pliku o nazwie 2 do edytowanego pliku :sh - utworzenie nowej powłoki, po zakończeniu pracy z powłoką następuje przejście do wcześniej edytowanego pliku .vimrc set tabstop=4 - szerokość tabulacji na 4 kolumny set tw=76 - łamanie wersu za 76 kolumną, równoważne set textwidth=76 set showmode - w trybie edycji wyświetla -- INSERT --, w dole ekranu set hlsearch - podświetla wyszukany łancuch map G?>\ \=--\ \=$d/^[^>] Dodanie tego do .vimrc powoduje, że podczas edycji listu możemy przy pomocy klawisza F1 wycinać sygnaturki. Czasami bywa tak, że edytujemy dwa pliki podczas jednej sesji $ vi plik1 plik2 wtedy warto dodać: map :previous map :next Dzięki F2 i F3 możemy w łatwy sposób przechodzić między edytowanymi plikami. Możemy też stosować skróty na przykład dodanie lini: ab SIGNAT Tomasz Wendlandt do .vimrc spowoduje, że tekst SIGNAT zostanie zamieniony na Tomasz Wendlandt , w trybie edycji. Wszystkie makra i ustawienia można wpisać w vimie wystarczy dodać : przed poleceniem np: :map :previous :ab SIGNAT Tomasz Wendlandt :set showmode Możemy też wylistować je wszystkie: :map :ab :set lub też usunąć: :unmap :unab SIGNAT :set noshowmode zamiana wyszukanego łancucha znaków :s/szukany/zmiana - zamieni pierwszy napotkany łańcuch szukany na zmiana w danym wersie :%s/szukany/zmiana - zamieni każdy pierwszy w wersie łańcuch szukany na zmiana w całym pliku :s/szukany/zmiana/g - zamieni wszystkie łańcuchy szukany na zmiana w danym wersie :s/szukany/zmiana/gc - to samo co wyżej plus pytanie o potwierdzenie zamiany :%s/szukany/zmiana/g - zamieni wszystkie łańcuchy szukany na zmiana w całym pliku :%s/szukany/zmiana/gc - to samo co wyżej plus pytanie o potwierdzenie zamiany Można też stosować wyrażenia . $ oraz znaczniki: :.,+5s/szukany/zamiana/g - zamienia łańcuch szukany, łańcuchem zamiana od obecnego wersa, aż do 5 kolejnych po nim :.,'xs/szukany/zamiana/g - zamienia łańcuch szukany, łańcuchem zamiana od obecnego wersa, aż do oznaczonego znacznikiem x na koniec Edytor vim posiada spore możliwości, w tym dokumencie opisane zostasły tylko najważniejsze. Warto też pamiętać o gvim'ie, graficznej wersji vim'a. Więcej o edytorze można dowiedzięc się z: $ man vim $ vimtutor /usr/share/vim :help Poza tym polecam te adresy: http://www.vim.org - strona domowa projektu http://vim.sourceforge.net - strona z wieloma przydatnymi tipsami i skryptami http://www.moolenaar.net - strona twórcy vima