Александър Иванов
cream в режим „expert“
17. Регистри
В терминологията на vim „регистър“ се нарича паметта за временно съхраняване (clipboard).
Vim поддържа множество „регистри“, впрочем, това правят вече и операционните системи. Със знака кавичка (") предупреждавате програмата, че се обръщате към регистър, след това трябва да въведете името на регистъра: това са малките латински букви от a до z, както и някои други символи, имена на „стандартни“ регистри.
Тази последователност трябва да предшества командата, например "ayy ще копира реда, където е курсорът (yy), в регистър "a.
Ако копирате текст в даден регистър, например в регистъра "x, и се обърнете към него с главна буква X, например "Xy, това е инструкция новият текст да се добави към съществуващия в регистъра, а не да го замести, тоест това е действието append, приложено към съдържанието на регистъра.
Всички регистри и съдържанието им може да видите с :registers (или :reg) Както при отметките, има и регистри със специални имена, например регистърът с име " се използва като подразбираща се памет за временно съхраняване. Така командата p и ""p правят едно и също нещо.
Регистърът "+ съдържа последният текст, записан в системната памет за временно съхраняване, а ако копирате там текст, той ще се прехвърли и в системния буфер, с което става достъпен и за други програми.
Регистърът "_ е „черна дупка“ — всичко, записано в него се загубва. Така "_dd ще изтрие безвъзвратно реда, на който е курсорът. (Е, не съвсем безвъзвратно, защото undo работи.) Когато казах, че във vim няма истински Delete, не бях съвсем прав — може да изтриете напълно текст, ако го запишете в регистъра "_. Когато се чете от този регистър, чете се просто… нищо. Така командата
:let @x = @_
ще препише „нищо“ в регистъра x, тоест ще изчисти съдържанието на регистъра x.
Друг начин да изчистите регистъра е следният: qxq. Командата q записва действията ви в регистъра (в примера — в регистър x). При това съдържанието на регистъра се изчиства, а аз веднага приключвам записа (с второто q).
Ама какво значи да записваш действията си в регистър?
Това значи, че действията ти се запомнят в регистъра и след това можеш многократно да ги повтаряш. Да дам пример.
Имате следния списък:
Гошо Петров Стоянов Нели Кирова Карабашева Стефан Радев Овчаров
Очевидно тук всеки три реда съдържат лично, бащино и фамилно име. Искате да наредите трите имена на всеки човек на един ред, разделени със запетайка. Направете така:
— преместете курсора на първия ред (gg);
— включете записа в регистър "x (qx);
— маркирайте първия ред (V);
— преместете курсора с един ред надолу (j);
— заместете в маркираните редове символа за край на реда със запетая (:s:\n:,: и натиснете Enter);
— преместете курсора на долния ред (j);
— спрете записа (q).
Сега (вижте с :reg) в регистъра "x има:
"x Vj:s:\n:,: ^Mj
Тоест, записани са вашите действия. Kурсорът е на втория ред (това вече е Нели) и с @x може да повторите командата. Разбира се, с числов префикс пред @x може многократно да изпълните командата и да си обработите списъка до края. При по-дълъг списък никак не е лошо.
Когато напускате cream, съдържанието на регистрите се запомня — така при следващото стартиране на програмата съдържанието на регистрите се възстановява.