Vim magic - Регістри

Про регістри в Vim вже писали в попередніх постах, але я вирішив зібрати інфу воєдино і трохи доповнити. Прочитавши цю статтю, ви станете справжніми майстрами копі-пастингу (в хорошому сенсі цього слова):)


Складно уявити собі роботу в редакторі без використання операцій скопіювати/вирізати/вставити. Vim надає дуже потужні засоби, для цього. Отже, регістри - це те, куди Vim складається ті шматки тексту, які ви копіюєте за допомогою y або видаляєте за допомогою c або d, але не тільки. Є ще кілька спеціальних регістрів, куди Vim розміщує, наприклад, текст, який ви шукали за допомогою/або текст, який ви drag-n-dropнули у вікні редактора. Щоб вказати, що ви хочете скопіювати або видалити текст до певного регістру, потрібно вказати його назву перед командою. Наприклад, «ayy скопіює рядок повністю в регістр» a. Але не всі регістри можна писати, деякі з них тільки для читання (і навіть є один тільки для запису).

Ще трохи особливої, Vimівської магії, пов'язаної з регістрами, для затравки, щоб було не лінь дочитати до кінця:

- Vim зберігає невелику історію вилучень, так що ви можете вставити віддалений раніше текст, навіть якщо після цього ви видаляли або копіювали інший текст.

- Vim надає вам 26 іменованих «буфера обміну», в які можна надовго складати текст і він не буде втрачений при операціях копіювання або видалення.

- Vim може копіювати або видаляти текст, не затираючи вміст регістру, а доповнюючи його.

Vim містить такі типи регістрів:

1. Безіменний регістр "" ". Типовий регістр. Сюди розміщується текст, якщо ви під час копіювання або вилучення не вказали регістр. Однак, навіть якщо ви явно копіюєте текст в регістр "a за допомогою" ayy, текст все одно з'явиться і в "" ". Виняток становить лише спеціальний регістр «» _, про який нижче. При використанні цього регістру вміст «» не змінюється.

2. Нумеровані регістри «0 9.

Регістр "0 містить останній текст, який було скопійовано (y) без зазначення регістру. Тобто звичайний yank помістить текст в регістри «» і «0, а» my змінить вміст регістрів «» і «m, але залишить колишнім вміст» 0.

Регістр "1 містить останній віддалений текст, за умови, що при вилученні не був вказаний регістр і текст містить хоча б один повний рядок (інакше замість" 1 використовується спеціальний регістр "-). Регістр "1 все ж використовується, якщо вилучення було зроблено із застосуванням команд пересування%, (,),',/,?, n, N, {і}. При кожному наступному видаленні тексту старий вміст регістру «1 поміщається в регістр» 2, вміст «2 при цьому виявляється в» 3 і так далі, вміст регістру «9 втрачається, заміщуючись вмістом регістру» 8 до видалення.

3. Регістр "- містить віддалений текст, якщо його було менше, ніж один рядок і при вилученні явно не був вказаний регістр.

4. Іменовані регістри «a z або «A Z. Якщо вам потрібно часто вставляти один і той же текст і ви не хочете, щоб операції копіювання або видалення затирали його, використовуйте іменовані регістри «a z.

Також іменовані регістри можуть використовуватися для того, щоб «накопичувати» віддалений або скопійований текст. Для цього використовуйте регістри «A Z.

5. Регістри тільки для читання «»:, «» «»,% і «» #

"": містить останній вміст командного рядка.

"". містить останній вставлений текст (цей текст можна вставити в режимі вставки за допомогою Ctrl + A)

«»% містить назву поточного файла

"# містить назву альтернативного файла (файла, який редагувався перед поточним)

6. Регістр виразів «» =. Особливий магічний регістр використовується не для того, щоб зберігати текст, а для вставки результатів обчислень виразів. Наприклад, у режимі вставки ви можете набрати Ctrl + R = 5 + 5 * 5, натиснути Enter і в текст вставити 30. Вирази можуть бути набагато складнішими, використовувати регістри, змінні або параметри Vima. Детальніше в:help expression.

7. Регістри для виділення та drag-n-dropa "*", "+ і" "ауд.

Регістри «» * і «» + використовуються для спілкування з зовнішнім світом. Під Win, наприклад, вміст цих регістрів збігається з вмістом буфера обміну Windows. Тобто, для того, щоб скопіювати текст з Vim в іншу програму, ви копіюєте (або вирізаєте) текст в регістр «» * і потім вставляєте його куди потрібно. Щоб скопіювати текст з зовнішньої програми до Vim, ви копіюєте текст у зовнішній програмі і вставляєте його у Vim з регістру «» *. Відмінність між регістрами «» * і «» + є тільки в X11. Вони детально описані в:help x11-selection.

Регістр тільки для читання «»... містить текст, який було перетягнуто у вікно Vim.

8. Регістр «чорна діра» «» _. Це регістр тільки для запису. Використовується для вилучення вмісту регістру за замовчуванням та цифрових регістрів 1 - 9. При вставленні з цього регістру нічого не відбувається.

9. Регістр останнього пошуку «»/. У ньому зберігається вираз, який було використано під час останнього пошуку. Вміст використовується також командами n і N, а також для підсвічування тексту при включеному параметрі «hlsearch».

Щоб переглянути вміст регістрів, скористайтеся командою:reg. :reg без параметрів покаже вміст всіх регістрів. Щоб переглянути лише вміст регістрів «3 і f», напишіть:reg 3f.

Ну і наостанок. Ви можете змінювати вміст регістрів за допомогою команди:let. Для того, щоб записати, наприклад, в регістр «»/напишіть:let @/ = «the». Або, наприклад, щоб помістити вміст регістру m, в який ви перед цим "накопичили" купу корисного тексту ("My), можна написати:let @*=@m.

Happy Vimming!

COM_SPPAGEBUILDER_NO_ITEMS_FOUND