Как использовать регистры vim?

Я знаю только один экземпляр, использующий регистры, через Ctrl R *, благодаря чему я вставляю текст из буфера обмена.

Что такое использование регистров? Как их использовать?

Все, что вы знаете о VI-регистрах (давайте сосредоточиться на vi 7.2) - поделитесь с нами.

+766
источник поделиться
15 ответов

Регистры в Vim позволяют запускать действия или команды в тексте, хранящемся в них. Чтобы получить доступ к регистру, введите "a перед командой, где a - это имя регистра. Если вы хотите скопировать текущую строку в регистр k, вы можете ввести

"ий

Или вы можете добавить в регистр с помощью заглавной буквы

"ий

Затем вы можете перемещаться по документу и вставлять его в другое место, используя

"кп

Вставить из системного буфера обмена в Linux

"+ р

Вставить из системного буфера обмена в Windows (или из буфера обмена mouse mouse) в Linux)

"* р

Чтобы получить доступ ко всем текущим типам регистров

: р

+942
источник

Я был рад, когда обнаружил регистр 0. Если вы вычеркиваете текст, не назначая его конкретному регистру, он будет назначен регистру 0, а также будет сохранен в регистре " по умолчанию. Разница между регистрами 0 и " заключается в том, что 0 заполняется только ярким текстом, тогда как регистр по умолчанию также заполняется текстом, удаленным с помощью d/d/x/x/c/c/s/s.

Я считаю это полезным, когда хочу скопировать текст, удалить что-то и заменить его скопированным текстом. Следующие шаги иллюстрируют пример:

  • Загрузите текст, который вы хотите скопировать с помощью y[motion] - этот текст сохраняется в " и 0 регистры
  • Удалить текст, который вы хотите заменить, с помощью d[motion] - этот текст сохраняется в регистре "
  • Вставьте yanked текст с помощью "0p

где " - это команда использования регистра для следующей команды.

На последнем шаге, если вы хотите вставить из регистра по умолчанию (с помощью p), он будет использовать текст, который вы только что удалили (возможно, не то, что вы намеревались).

Обратите внимание, что p или p вставляет из регистра по умолчанию. Допустимый эквивалент будет ""p (или ""p), а "0 содержит последний yank, "1 содержит последнее удаление или изменение.

Подробнее см. :help registers.

+668
источник
другие ответы

Связанные вопросы


Похожие вопросы

Одна из моих любимых частей о регистрах использует их как макросы!

Скажем, вы имеете дело с файлом значений с разделителями табуляции как таковым:

ID  Df  %Dev    Lambda
1   0   0.000000    0.313682
2   1   0.023113    0.304332
3   1   0.044869    0.295261
4   1   0.065347    0.286460
5   1   0.084623    0.277922
6   1   0.102767    0.269638
7   1   0.119845    0.261601

Теперь вы решили, что вам нужно добавить знак процента в конце поля% Dev (начиная со второй строки). Мы сделаем простой макрос в регистре (произвольно выбранный) m следующим образом:

  • Нажмите: qm: Чтобы начать запись макроса в регистре m.

  • EE: перейдите к концу третьего столбца.

  • a: Вставить режим для добавления в конец этого столбца.

  • %: Введите знак процента, который мы хотим добавить.

  • <ESC>: вернитесь в режим командной строки.

  • j0: перейдите к началу следующей строки.

  • q: остановить макрос записи

Теперь мы можем просто набрать @m для запуска этого макроса в текущей строке. Кроме того, мы можем ввести @@, чтобы повторить, или [email protected], чтобы сделать это 100 раз! Жизнь выглядит довольно хорошо.

На этом этапе вы должны сказать: " НО ПОДОЖДИТЕ, ЧТО ГОВОРЯТ, ЧТО ЭТО ДЕЛАТЬ С РЕГИСТРАМИ?"

Отличная точка. Изучите содержимое регистра m, набрав "mp. Затем получаем следующее:

EEa%<ESC>j0

Поначалу похоже, что вы случайно открыли двоичный файл в блокноте, но на второй взгляд это точная последовательность символов в нашем макросе!

Вы любопытный человек, так что сделайте что-нибудь интересное и отредактируйте эту строку текста, чтобы вставить ! вместо скучного старого %.

EEa!<ESC>j0

Затем верните это в регистр n, набрав B"nyE. Затем, просто для ударов, запустите макрос n в строке наших данных, используя @n....

OMG, IT ADDED A !

По сути, запуск макроса - это как бы точная последовательность клавиш в этом регистре макросов. Если это не крутой трюк, я буду есть шляпу.

+281
источник

Другие полезные регистры:

"* или "+ - содержимое системного буфера обмена

"/ - команда последнего поиска

": - последняя команда.

Обратите внимание на макросы vim, вы можете редактировать их, так как они всего лишь список комбинаций клавиш, используемых при записи макроса. Таким образом, вы можете записать в текстовый файл макрос (используя "ap для записи макроса a) и отредактировать его и загрузить в регистр с помощью "ay$. Хороший способ хранения полезных макросов.

+92
источник

Регистр черных дыр _ является регистром /dev/null.

Я использую его в своем vimrc, чтобы удалить отдельные символы без обновления регистра по умолчанию:

noremap x "_x

и вставить визуальный режим без обновления регистра по умолчанию:

vnoremap p "_dP
+61
источник

Если вы хотите вставить содержимое регистра в команду ex-mode, нажмите <C-r><registerletter>.

Зачем вам это использовать? Я хотел выполнить поиск и заменить длинную строку, поэтому я выбрал ее в визуальном режиме, начал печатать выражение поиска/замены :%s/[PASTE YANKED PHRASE]//g и отправился в свой день.

Если вы хотите вставить только одно слово в ex-режиме, убедитесь, что курсор находится на нем перед входом в ex-режим, а затем нажмите <C-r><C-w>, когда в ex-режиме, чтобы вставить слово.

+42
источник

Я считаю, что секретный регистр гуру - выражение = register. Его можно использовать для творческих сопоставлений.

:inoremap  \d The current date <c-r>=system("date")<cr>

Вы можете использовать его в сочетании с вашей системой, как указано выше, или получить ответы от пользовательских функций VimL и т.д.

или просто специальные материалы, например

<c-r>=35+7<cr>
+37
источник

Прохладный трюк состоит в том, чтобы использовать "1p для вставки последнего удаления/изменения (а затем использовать . для повторного ввода последующих удалений. Другими словами, "1p... в основном эквивалентен "1p"2p"3p"4p.

Вы можете использовать это для обратного порядка нескольких строк: dddddddddd"1p....

+30
источник
  • q5 записывает изменения в регистр 5 (следующая запись останавливает запись)
  • : reg показать все регистры и любое содержимое в них
  • @5 выполнить макрос регистра 5 (записанные изменения)
+16
источник

На странице справки vim:

CTRL-R {0-9a-z"%#:-=.}                  *c_CTRL-R* *c_<C-R>*
        Insert the contents of a numbered or named register.  Between
        typing CTRL-R and the second character '"' will be displayed
        <...snip...>
        Special registers:
            '"' the unnamed register, containing the text of
                the last delete or yank
            '%' the current file name
            '#' the alternate file name
            '*' the clipboard contents (X11: primary selection)
            '+' the clipboard contents
            '/' the last search pattern
            ':' the last command-line
            '-' the last small (less than a line) delete
            '.' the last inserted text
                            *c_CTRL-R_=*
            '=' the expression register: you are prompted to
                enter an expression (see |expression|)
                (doesn't work at the expression prompt; some
                things such as changing the buffer or current
                window are not allowed to avoid side effects)
                When the result is a |List| the items are used
                as lines.  They can have line breaks inside
                too.
                When the result is a Float it automatically
                converted to a String.
        See |registers| about registers.  {not in Vi}
        <...snip...>
+15
источник

Я использую регистр по умолчанию для grep для текста в моем окне vim без необходимости использовать для мыши.

  • yank text
  • :!grep "<CTRL-R>0"<CR>
+14
источник

Использовать регистры в командах с помощью @. Например:.

echo @a
echo @0
echo @+

Установите их в команде:

let @a = 'abc'

Теперь "ap вставляет abc.

+9
источник

Большим источником путаницы является регистр по умолчанию ". Важно знать, как это работает. Это намного лучше, если в большинстве случаев избегать регистрации по умолчанию. Объяснение из документации Vim:

Vim fills this register with text deleted with the "d", "c", "s", "x" commands
or copied with the yank "y" command, regardless of whether or not a specific
register was used (e.g.  "xdd).  This is like the unnamed register is pointing
to the last used register.

Таким образом, регистр по умолчанию на самом деле является указателем на последний использованный регистр. Когда вы удаляете или держите что-то, этот регистр будет указывать на другие регистры. Вы можете проверить это, проверив регистры. Всегда существует другой регистр, который точно совпадает с регистром по умолчанию: регистром yank ("0), первым регистром удаления ("1), небольшим регистром удаления ("-) или любым другим регистром, который использовался для удалить или выдернуть.

Единственным исключением является регистр черных дыр. Vim doc говорит:

An exception is the '_' register: "_dd does not store the deleted text in any
register.

Обычно вам гораздо выгоднее использовать напрямую: "0, "- и "1-"9 регистры по умолчанию или именованные регистры.

+8
источник

Один забытый регистр - это. который содержит последний вставленный текст независимо от того, как он был вставлен, например, ct] (изменение до]). Затем вы понимаете, что вам нужно вставить его в другое место, но не можете использовать метод повторения точек.

 :reg .
 :%s/fred/<C-R>./
+1
источник

Мой любимый регистр - это регистр ':'. Запуск @: в нормальном режиме позволяет мне повторить ранее выполненную команду ex.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос