Ръководство за работа с текстовия редактор VIM Написана от Мартин Петров Благодарности на: www.dhstudio.eu VI е текстов редактор написан от Bill Joy през 1976 година. Името VI идва от абревиатурата за командата visual в ex. Съществуват доста Vi клонинги като доста популярни са: vim на Bram Moolenaar`s nvi на Keith Bostic`s elvis на Steve Kirkendall`s vile на Kevin Buettner, Tom Dickey и Paul Fox Ние ще разгледаме доста развития клонинг „vim“ и в тази статия ще казваме „vi“ вместо „vim“. Във VI има няколко режима на работа като insert mode и command mode. За влизане във въвеждащ режим (insert mode) е необходимо да натиснете бутона 'I'. След влизането в insert mode имате възможност да въвеждате триете и редактирате текст на воля. Ето някои основни команди за работа с VI: :е! - Ако сте променили съдържанието на файл и решите да върнете последната записана версия на файла. :q! - Ако искате да излезете от файл-а без да записвате промените. :x - Ако искате да запишете промените във файл-а и да излезете от него. Алтернатива на ":x" е клавшината комбинация от ZZ и ":wq" :w - Ако искате да запазите промените във файл-а :w file - Ако искате да запазите файл-а с друго име(Един вид еквивалент на Save As) :!rm file - Ако искате да изтриете файл. :!df - Ако искате да изпълните приложението df(report filesystem disk space usage) :!sh - Ако искате да използвате временно шел среда. След това може да се върнете в работата с VI чрез клавишната комбинация Control+d. Алтернатива на всичко това е излизане от VI чрез Control+z и връщането към VI средата чрез приложението: fg Навигацията във VI се осъществява чрез следните бутони: k(нагоре) h(ляво) l(дясно) j(долу) Еквивалент са стрелките на клавиатурата /|\(нагоре) <-(ляво) ->(дясно) \|/(долу) Примери за по- конкретна навигация: Ако искате да се преместите 2 реда нагоре то използвайте: 2k Ако искате да се преместите 3 реда надолу то използвайте: 3j Ако искате да се изместите 6 символа на ляво то използвайте: 6h Ако искате да се изместите 5 символа на дясно то използвайте: 5l Ако искате да отидете в началото на реда натиснете: 0 Ако искате да отидете в края на реда натиснете: Shift+4(или $). Предвижването между екраните става със следните комбинации: Control+F - Предвижва един екран напред Control+B - Предвижва един екран назад Control+D - Предвижва половин екран напред Control+U - Предвижва половин екран назад Навигацията на текущия екран се извършва със следните клавишни комбинации: Shift+H - Мести курсора Ви на първия ред от екрана Shift+M - Мести курсора Ви на средния ред от екрана Shift+L - Мести курсора Ви на последния ред от екрана nH - Мести курсора n брой редове след първия ред от екрана nL - Мести курсора Ви n брой редове преди последния ред от екрана. Комбинацията от Shift+6 или ^ Ви мести курсора на първия непразен символ на текущия ред. е - Ви прехвърля в края на думата след курсора като не игнорира пунктуацията E - Ви прехвърля в края на думата след курсора като игнорира пунктуацията. С бутона "G" може да да се предвижвате м/у редовете. 12G - Преместване на дванадесетия ред след първия от файл.а Control+G - извежда Ви текущия ред. Ако искате да се предвижите на последния ред във файл може да го направите като използвате за първи аргумент на VI '+' т.е. vi + file . Ако искате да се предвижите до реда в които се съдържа конкретна дума може да го направите отново с аргумент към VI '+/mart' т.е. vi +/test file . Предвижването на конкретен ред още при отварянето на файл става по следния начин: vi +5 file - Отваря файла като курсора се намира на петия ред. Vi Ви предоставя възможност да замествате думи с други такива. Може да заместите една дума назад с друга, една дума напред с друга и т.н. Заместването се извършва чрез бутона c . Примери за замества: cb - Замества една дума назад c2b - Замества две думи назад cw - Замества следващата една дума c4w - Замества следващите четири думи. c$ - Замества целия ред от курсора до края на реда c0 - Замества целия ред от курсора до началото на реда. cc - Замества целия ред. Заместването на един символ се извършва чрез бутона: r ry - Замества текущия символ със 'y' Vi Ви предоставя възможността за превръщане на текст от малки към големи букви и обратно. Всичко това става с комбинацията от : Shift+` или (~) . Изтриване на ред се извършва чрез "dd". Изтриването на информацията след курсора за текущия ред се извършва чрез "D". Еквивалент е "d$" . Имате възможност да изтриете информацията преди курсора за текущия ред със "d0" . Със "dw" се изтриват думи. Може да конкретизирате колко думи да бъдат изтрити. Примери: d2w - Ще бъдат изтрити 2 думи след курсора. db - Изтрива дума преди курсора. d2b - Изтрива две думи преди курсора. Може да изтривате символи след курсора с бутона: "x". 2x - Изтрива два символа след курсора. С бутона "p" може да слагате текст които е от буфера. Когато изтриете 1 ред той отива в буфера и ако натиснете "p" той ще се изведе на екрана. Копирането на текст става с бутона 'y'(yank). С комбинацията 'yw' копирате думата след курсора. Примери: С "y$' копирате информацията от курсора до края на реда С 'yy' копирате целия ред. С бутона 'p' тя се извежда на екрана. С бутона '.' се повтаря последното действие. Ако извършите операцията изтриване на ред и след това натиснете '.' то Вие ще изтриете още един ред. Бутона "u" е за връщане една стъпка назад. J - Обединяване на два реда. Търсене във VI се осъщестява чрез '/' Примери: /blaf - Търсене на думата "blaf" във текушия файл от курсора напред ?blaf - Търсене на думата "blaf" във текушия файл от курсора назад С бутона "n" може да повтаряте търсенете като то се извършва в посока напред С бутона "N" може да повтаряте търсенете като то се извършва в посока назад VI при предоставя възможност да създавате до 26 (a-z) собствени именувани буфери . Може да си създадете три буфера с различна информация и да ги ползвате и трите едновременно. "a2yy - Създаване на буфер с име "a" в които ще се съдържат 2 реда(2yy) след курсора. "ap - Извежда съдържанието на буфер с име "a" . Разглеждане на някои Ex команди. VI е визуалния режим на редактора Ex и е добре да имаме понятие от Ex командите. Командата 'g' позволява глобално търсене/заменяне на конкретна дума :g/mar/ - Ще изведе на екрана всичките редове в които се съдържа думата 'mar' . Може да използвате "!" зада извършите действие като :g!/mar/ - с това действие извеждате всички редове които не съдържат думата 'mar' Може да импортирате съдържанието на друг файл. Това става с командата "r" или по- точно "read file" или абревиатурата "r file" VI Ви предоставя възможността за работа с няколко файл-а паралелно. Това се постига като всеки файл е аргумент към VI т.е. "vi file1 file2" ще зареди екрана Ви file1, но е зараден и file1. Може да преминавате напред м/у файловете с командата ':n' и назад м/у файловете с командата ':N' С командата ":args" или нейната абревиатура ':ar' се извеждат всички използвани файлове от VI (т.е. аргументите). Интересно е да се знае, че зада извършвате превключване м/у файловете е необходимо да запишете текущия файл(:w) и чак след това да преминете към друг файл. За превключване м/у файловете е много лесно да използвате '#' със 'e' т.е. ':e #'. Със командата ':r #' може да обедините файловете които сте указали по- рано(аргументите на VI) . С командата ":е file" може да използвате и други файлове едновременно(освен тези които сте указали преди това(аргументите) ) Регулярни изрази: Ако искате да замените конректна дума с друга може да използвате следната команда :%s/old/new/g Като "%" указва всички редове, "g" указва глобално търсене Ако искате да конкретизирате редове в които да се извърши замяната използвайте: :1,30s/new/old/g Този пример ще замени думата "new" с "old" от 1 до 30 ред. Ако искате vi да ви пита за всяка замяна трябва да добавите 'c' "confirm" т.е.: :1,30s/new/old/gc Много полезни биха Ви били метачарсетите: \u Прави голяма първата буква \U Прави големи всички букви \l Прави малка първата буква \L Прави малки всички букви Примери: Ако искате да направите големи буквите на думата: Martin може да направите това: :%s/Martin/\Umartin Ако искате да направите голяма първата буква на думата: Martin може да направите това :%s/martin/\umartin Операциите с \l и \L са аналогични с тези на \u и \U Имате възможност да спестите малко писане отностно замяната на големи с малки букви и обратно. Ако имате дума с големи букви и искате те да станат малки то може да ползвате(това е за всяка дума:MARTIN) : %s/MARTIN/\L& Ако имате дума с големи букви и искате само първата буква от :MARTIN да бъде малка може да ползвате :%s/MARTIN/\l& Може също да пренебрегнете размера на буквите чрез ":set ic" което означава (ignore case) т.е. ако пожелаете да презапишете думата "MARTIN" може да го направите с ":%s/martin/martinn" . Имате възможност да извършите последната операция по презапис т.е. Ако сте направили презапис на конкретни редове(от 1 до 5) :1,5s/martin/Martin и след това решите, че трябва да извършите операцията за всички думи: martin то може да изпълните :%&g Ако Ви се наложи да сложите някакъв текст преди конкретна дума може да използвате следния пример :%s:blaf:<html>&</html>:g . Този пример поставя <html> и </html> преди и след blaf. Нека разгледаме следния добър пример: %s/[Vv]isual/Visual/g . Този пример замества думата Visual или visual ( [Vv] ) със Visual С командата: :g/^$/d може да изтриете всички празни редове РЕДАКТИРАНЕ С vi ЗА НАПРЕДНАЛИ Ако искате да направите постоянни настройки на Вашето Vi то трябва да ги опишете във файл .exrc които трябва да се намира във Вашата домашна директория. Може да заредите настройките на VI и от друго място, чрез командата :so file Настройките на Vi се извършват чрез ex командата :set С командата :set може да активирате(:set nu) и деактивирате(:set nuno) конкретни настройки. Със ":set nu" се нумерира текущия файл. Със командата :set all може да видите списък на всички настройки. Много хубаво е да знаете, че може да комбинирате unix команди със r(read) на Vi, т.е. може да влагате резултат от unix команда към текущия файл с когото работите. Тази възможност ясно се вижда от следния пример :r !date , тя въвежда във текущия файл резултата от командата `date` Също много добра възможност на Vi e възможността за създаване на собствени абревиатури. Ако Ви се налага да пишете нещо с много символи много кратно, то може да си улесните работата именно с тази възможност. Създаването на абревиатура се извършва по следния начин :ab abbr phrase , пример :ab gl Gnu/Linux. Когато сте във въвеждащ режим (Insert mode) и въведете gl то VI автоматично ще Ви въведе Gnu/Linux. С командата :ab може да видите всички абревиатури. Ако искате да премахнете конкретна абревиатура (в случая gl) може да постигнете това със командата :unab gl . Много добра възможност на Vi е да мапвате бутони т.е. с един бутон да извършите конкретния действия. Мапването се извършва с командата :map x sequence . Сега ще мапнет бутона 1 за изход със запис(ZZ) което става с командата :map 1 ZZ . Ако искате да махнете този map (:map 1 ZZ) трябва да изпълните командата :unmap 1 . Ако искате да изведете списък на текущите мапове то това може да изпълните с командата :map . Може да сложите Вашите map настройки във Вашия .exrc файл и когато изпълните vi те ще са активни. С помоща на VI може да въвеждате конкретен текст като примера тук :map 1 iI`m your worst nightmare когато натиснете едно се въвежда текста "I`m your worst nighmare".