Лого на страниците (малко).

Заглавна страница > Четива > Четива за глотометрията > cream в режим „expert“ > 29. Допълнение: само vim

Система Orphus

Ако забележите грешка, маркирайте израза с мишката и натиснете Control+Enter. Благодаря!

Александър Иванов

cream в режим „expert“

29. Допълнение: само vim

Вече писах, че като посвикнете да работите с cream, с изненада ще установите, че се чувствате добре и във vim – било в терминала, било в конзолата без графична среда. И всичко, което дотук сте научили за режима „експерт“ на cream, ще работи.

Сега ще направя само няколко най-необходими разяснения. За да не стане като в оня виц: „Седя във vim от години… Представа нямам как да изляза.“

Когато стартирате vim, напишете след командата името на файла, който ще редактирате:

$ vim my_text.txt

и натиснете Enter.

Vim ще изчете текста и ще ви го покаже в тъй наречения нормален режим на работа (Normal Mode). В този режим можете да разглеждате текста, но клавишите (от английската клавиатура!) въвеждат команди към редактора, а не въвеждат символи (текст). Може да преминете към вписване на текст така:

i – преминавате в режим за вписване на текст (режим Insert). Това се отбелязва в долния, информационния ред на редактора. Текстът, който пишете, ще „избутва“ надясно текста, който е в дясно от курсора. С натискане на клавиш Ins преминавате в режим Replace — текстът, който вписвате, ще „затъпква“, ще заменя текста вдясно от курсора. Следващото натискане на Ins ви връща към режим Insert.

С клавиш Esc се връщате към нормалния режим на работа — нормалният режим на работа е всъщност като режима „експерт“ в cream.

Може да влезете отново в режим Insert и със следните клавиши: I, a, A, o, O – експериментирайте, за да разберете какво правят.

Ама как да излезем от редактора?

С командата :q (очевидно, мнемоника от quit). Ако текстът ви не е променян или промените са записани, излизате от редактора без всякакви съобщения. Иначе редакторът ви съобщава, че текстът е променен и незаписан. Пред вас има две възможности.

С :wq ще запишете текста и ще излезете от редактора – w е мнемоника от write. Може да използвате командата и самостоятелно :w, за да записвате периодично промените в текста си.

Но ако искате да излезете от редактора, без да записвате промените в текста, използвайте :q! Удивителният знак след командата означава ’изпълни командата безусловно’, тоест без предупреждения. Още един пример:

Искате да запишете текста си с ново име – :saveas my_new.txt – но получавате предупреждение от редактора, че файл с име my_new.txt вече има. С командата :saveas! my_new.txt ще запишете текста си във вече съществуващия файл и — разбира се! — ще загубите предишното му съдържание. Вие решавате. Съкратеният вариант на командата е :sav my_new.txt.

Редакторът vim може да работи с много текстове едновременно. Това се нуждае от малко разяснения.

Ако при стартирането на редактора подадете няколко имена на текстови файлове, те всичките ще се изчетат в различни буфери в паметта. Редакторът показва в прозореца си първият изчетен текст, останалите са „скрити“. С командата :buffers ще видите списък на заредените в паметта файлове. По-точно — вие виждате списък с имената на файловете, чието съдържание е заредено в буфери в оперативната памет. Например така:

vim buffers.

От картинката се вижда, първо, че командата :ls е по-кратка форма на :buffers. Синоним на :buffers e и :files, откъдето става ясно и съкращението :ls. После, вижда се, че всеки буфер е номериран — тези номера не се повтарят и в документацията ги наричат идентификатори на буферите. С тези идентификатори може да се обръщате към един или друг буфер. Още тук, под списъка, може да напишете командата :b3 — с нея ще преминете към буфер с идентификатор 3, тоест към my_new.txt.

Ако текстът в буфера, който напускате, не е записан, ще получите предупреждение. Най-добре го запишете, преди да преминете към текста в друг буфер. Защото, ако безусловно напуснете този буфер (с !), ще загубите редакциите в него.

Между идентификатора (номера) на буфера и името на файла с буквени и небуквени символи се маркира информация за състоянието на буфера. В примера с a се отбелязва, че буферът е активен. Активен е буфер, чието съдържание е показано в прозорец. Символът % показва, че прозорецът на този активен буфер е на фокус. Защото vim поддържа множество прозорци, но, разбира се, само един от тях е на фокус. Вижте и картинката отдолу, на която са показани три отворени прозореца.

С # се отбелязва „алтернативният“ буфер, тоест буферът, който последно сте напуснали. В него може да отидете с Ctrl-^, тоест, между два текста, които сравнявате, може да се преминава с бързия клавиш Ctrl-^. Тук алтернативният буфер 1 е маркиран и със знак + — това означава, че съдържанието му е променено, текстът е редактиран и не е записан с промените. С буква h пък се отбелязва „скрит“ буфер (от hidden). И така нататък.

vim windows.

Повече разяснения има в помощната информация, която може да извикате с командата :help — в случая :help buffers. В някакъв момент сигурно ще поискате да я прегледате.

Помощната информация на vim е организирана чрез „хипертекстови“ препратки, означени с цвят. Когато отидете в раздела buffers, ще видите меню — когато поставите курсора на препратката след раздела 11. Using hidden buffers, например, и натиснете Ctrl-], ще отидете в този раздел. Може да се върнете обратно чрез Ctrl-O или Ctrl-T.

Може да затворите определен буфер с :bd <идентификатор>. По-разширени варианти на командата са :bdel и :bdelete. Ако в списъка буферът е маркиран със знак +, ще получите съобщение, че промените в него не са записани.

Разбира се, механизмът на undo и на redо е свързан с определен буфер, тоест „помни“ редакциите за определен текст. Отметките (marks) също са свързани с определен буфер. Отметките освен това се и запомнят, когато изтривате буфер.

Изобщо, vim (gvim, cream) поддържа подробен „протокол“ за всеки обработван от вас файл във .viminfo. Както виждате, това е „скрит“ файл, но може да го разгледате. Не го променяйте и не го изтривайте, ако не искате изненади.

Съществува още една команда за „изчистване“ на буфер — :bwipeout (:bwipe, :bw). Само че тя не записва в „протокола“ никаква информация, тоест отметките и локалните настройки за текста ви ще бъдат загубени. Хубаво е да знаете, че съществува, но надали ще ви се наложи да я използвате.

А сега — малко повече за прозорците.

Свикнали сме от други програми да не правим разлика между прозорец (на програмата) и буфер (текст, файл), та ни е трудно да си представим защо е нужно да правим тази разлика във vim.

Защото във vim може да държите текст в буфер в паметта, без задължително да го свързвате с прозорец, който да го показва на монитора. Дори такъв „невидим“ текст може донякъде да бъде редактиран. Може още да разделите прозореца на две, тоест на два прозореца, и в двата да показвате един и същи текст. В много ситуации това е доста удобно. Така vim дава възможности, които — да! — може да не използвате; ама когато ви потрябват, са налични.

Така :new разделя прозореца хоризонтално на два прозореца, :vnew разделя прозореца на две вертикално. С Ctrl-W x разменяте позициите на новосъздадените прозорци. Буферът, свързан с новия прозорец е безименен (отбелязва се с [No Name]) и е празен. Тук може да изчетете файл с командата :e (:edit), например :e my_new.txt. Но може да използвате и командата :e. — тя отваря вградения във vim файлов менажер и може да си изберете файл от списъка:

vim with four windows.

На картинката основният прозорец е „разцепен“ на четири „подпрозореца“. Горе вляво е прозорецът с помощната информация; долу вдясно е файловият менажер. Текстовете са омацани с червено, защото е пусната правописната проверка за български език. Припомням, че може да я изключите със :set nospell.

Името на файла, чийто текст се редактира в един или друг прозорец, е изписано отдолу, под прозореца. Марката [RO] е от read-only: това са файлове, които не могат да се редактират — помощната информация, файловия менажер.

Командният ред е един — най-долу, но командите, които въвеждате тук, се отнасят за текста в прозореца, който е на фокус. В него е и курсорът.

Можете да сменяте фокуса, тоест да определяте в кой прозорец ще е курсорът, със следните команди:

Ctrl-W w и Ctrl-W W — променят фокуса на прозорците „в кръг“.

Ctrl-W l — (това е малка латинска буква ел) фокусът се премества на прозореца вдясно;

Ctrl-W h — фокусът се премества на прозореца вляво;

Ctrl-W j — фокусът се премества на прозореца отдолу;

Ctrl-W k — фокусът се премества на прозореца отгоре.

Всички тези действия се извършват, разбира се, само ако има съответен прозорец, но не дават грешка, ако няма.

Забелязвате вече, че повечето действия с прозорци се извършват с команда с префикс Ctrl-W (мнемоника за window), а следващите клавиши отговарят на клавишите за движение на курсора из текста. Клавишните комбинации във vim са доста смислено организирани и като схванете логиката, не са трудни за запомняне.

С командата :hide може да затворите прозорец, а буферът (текстът), свързан с него, става скрит (hidden). С командата :ls ще го виждате и може да го възстановите в прозорец. С командата Ctrl_W o (от only) активният прозорец заема целия екран. Другите буфери стават неактивни, но се съхраняват в паметта.

С натиснат ляв клавиш на мишката „хванете“ границата между два прозореца или заглавния ред на горния прозорец – ще можете да променяте размера на прозорците — вляво и вдясно, нагоре и надолу. Разбира се, тези действия могат да се извършват и с бързи клавиши.

Пък някой път, като имате време, проявете любопитство, погледнете и документацията. Тя е добре структурирана и изчерпателна.

И сега — още малко коментар за командата :q. Ако работите с един прозорец и с един буфер, с командата :q просто излизате от програмата. Ако работите с повече прозорци, командата :q затваря активния прозорец и буфера, свързан с него, а фокусът се пренася върху следващият прозорец (и буфер). И така нататък, докато затворите последния прозорец (и буфера, свързан с него). Така обикновено излизате и от програмата.

Но ако затваряте последния прозорец, а в програмата има скрити или неактивни буфери, несвързани с прозорец, ще получите съобщение за грешка — вие трябва да решите какво ще правите с данните в тези буфери.

Цялата тази процедура може да съкратите с комбинираната команда :qa (a е от all) — програмата затваря всички прозорци и всички буфери и излизате от нея. Ако някъде има незаписани данни, пак ще получите съобщение — умна програма, пази труда ви от собствената ви глупост.

И накрая — две думи за табулираните страници (tab pages), които vim също поддържа.

Вие виждате табулирани страници в интернетския си браузър. Когато отворите няколко интернетски страници, виждате, естествено, само една от тях. Другите страници са представени в горния ред на екрана чрез „етикетчета“, показващи заглавието на страницата. Тази практика в компютърния дизайн отново стъпва върху практиката на библиотеките. Там в чекмеджето с фишове можеше да се поставят разделители — по-твърди картончета, изрязани така, че над фишовете да стърчи „езиче“, на което се отбелязва името на раздела. Разделителите се подбираха така, че „езичетата“ им да бъдат отместени по хоризонтала и да не се застъпват, за да се вижда текстът върху тях.

Ако стартирате vim така:

$ vim -p my_text.txt my_new.txt

ще се изчетат двата текста в отделни табулирани страници — това е смисълът на флагът -p.

Работата е там, че във vim всяка табулирана страница представлява „основен“ прозорец — вие може да го делите на подпрозорци и да изчитате в тях различни буфери (текстове). Така може да създавате твърде сложни структури от работни текстове. По моему, по-сложни, отколкото ще ви е необходимо.

Между табулираните страници може да преминавате с клавишните комбинации Ctrl-PgUp и Ctrl-PgDw. Ако не става, пробвайте с клавишите PgUp и PgDw от калкулаторната клавиатура. И най-накрая — мишката обикновено работи.

Повече информация за това има в документацията :help tabpage.

Страница: А. И.
Електронна поща
Дата на публикуване: 02.II.2019
Последна редакция: 03.II.2019
Съобразено с
html5/css3