Про регістри в 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!