Да. Нажмите Ctrl - R , затем ". Если у вас есть буквальные управляющие символы в том, что вы дернули, используйте Ctrl - R , Ctrl - O , ".
Вот объяснение того, что вы можете делать с регистрами. То, что вы можете делать с регистрами, является необычным, и если вы знаете, как их использовать, вы не можете жить без них.
Регистры - это в основном места хранения строк. В Vim есть много регистров, которые работают по-разному:
См. :help registers
для полной ссылки.
Но вы также можете сделать следующее (и я, вероятно, забыл много случаев использования регистров).
В обычном режиме нажмите ": p . Последняя команда, которую вы использовали в vim, вставляется в ваш буфер.
Давайте разберем: "
- команда в обычном режиме, которая позволяет вам выбрать регистр, который будет использоваться во время следующей операции восстановления, удаления или вставки. Поэтому ": выбирает регистр двоеточия (сохраняя последнюю команду). Тогда p - это команда, которую вы уже знаете, она вставляет содержимое регистра.
ср. :help "
, :help quote_:
Вы редактируете файл VimL (например, .vimrc
) и хотите выполнить пару последовательных строк прямо сейчас: y j : @ " Введите 1142 *.
Здесь y j возвращает текущую и следующую строку (это потому, что j - это движение линии, но это выходит за рамки этого ответа) в регистр по умолчанию (также известный как неназванный регистр). Затем команда :@
Ex воспроизводит команды Ex, хранящиеся в регистре, заданном в качестве аргумента, а "
- это способ обращения к безымянному регистру. Также см. В верхней части этого ответа, который связан.
Не путайте "
, использованное здесь (которое является именем регистра), с "
из предыдущего примера, который был командой в обычном режиме.
ср. :help :@
и :help quote_quote
Вставьте последний шаблон поиска в файл в режиме вставки или в командную строку с помощью Ctrl - R , / .
ср. :help quote_/
, help i_CTRL-R
Следствие: Сохраните ваш шаблон поиска, но добавьте альтернативу: /
Ctrl - R , / \|alternative
.
Вы выбрали два слова в середине строки в визуальном режиме, дернули их с помощью y
, они в безымянном регистре. Теперь вы хотите открыть новую строку чуть ниже того места, где вы находитесь, с этими двумя словами: :pu
. Это сокращение для :put "
. Команда :put
, как и многие команды Ex, работает только в этом случае.
ср. :help :put
Вы могли бы также сделать: :call setreg('"', @", 'V')
затем p
. Функция setreg
устанавливает регистр, имя которого задается в качестве первого аргумента (в виде строки), инициализирует его содержимым второго аргумента (и вы можете использовать регистры в качестве переменных с именем @x
, где x
является именем регистра в VimL) и переводит его в режим, указанный в третьем аргументе, V
для строки, ничего для символьного и буквального ^V
для блока.
ср. :help setreg()
. Функции реверса getreg()
и getregtype()
.
Если вы записали макрос с qa
... q
, тогда :echo @a
скажет вам, что вы ввели, и @a
воспроизведет макрос (возможно, вы знали, что этот, очень полезно, чтобы избежать повторяющихся задач)
ср. :help q
, help @
Следствие из предыдущего примера: если у вас есть 8go
в буфере обмена, то @+
будет воспроизводить содержимое буфера обмена как макрос и, таким образом, перейдет к 8-му байту вашего файла. На самом деле это будет работать почти с каждым регистром. Если ваша последняя вставленная строка была dd
в режиме вставки, то @.
(поскольку регистр .
содержит последнюю вставленную строку) удалит строку. (В этом отношении документация Vim неверна, поскольку в ней говорится, что регистры #
, %
, :
и .
будут работать только с p
, P
, :put
и Ctrl. -. R )
ср. :help @
Не путайте :@
(команда, которая воспроизводит команды Vim из регистра) и @
(команда нормального режима, которая воспроизводит команды нормального режима из регистра).
Заметным исключением является @:
. Регистр команд не содержит начального двоеточия и не содержит окончательного возврата каретки. Однако в обычном режиме @:
будет делать то, что вы ожидаете, интерпретируя регистр как команду Ex, не пытаясь воспроизвести его в обычном режиме. Поэтому, если ваша последняя команда была :e
, регистр содержит e
, но @:
перезагрузит файл, а не до конца слова.
ср. :help @:
Покажите, что вы будете делать в обычном режиме, прежде чем запускать его: @='dd'
Введите . Как только вы нажимаете клавишу =
, Vim переключается на оценку выражения: когда вы вводите выражение и нажимаете Enter , Vim вычисляет его, и результат действует как содержимое регистра. Конечно, регистр =
только для чтения и однократный. Каждый раз, когда вы начнете использовать его, вам придется вводить новое выражение.
ср. :help quote_=
Следствие: Если вы редактируете команду и понимаете, что вам нужно вставить в командную строку некоторую строку из текущего буфера: не нажимайте Esc ! Используйте Ctrl - R =getline(58)
Введите . После этого вы вернетесь к редактированию командной строки, но оно вставило содержимое 58-й строки.
Определить шаблон поиска вручную: :let @/ = 'foo'
ср. :help :let
Обратите внимание, что для этого вам не нужно экранировать /
в паттерне. Однако, конечно, вам нужно удвоить все одинарные кавычки.
Скопировать все строки, начинающиеся с foo
, а затем все строки, содержащие bar
, в буфер обмена, объединить эти команды: qaq
(сбрасывает регистр a , хранящий пустой макрос внутри него ), :g/^foo/y A
, :g/bar/y A
, :let @+ = @a
.
Использование заглавного регистра приводит к тому, что регистр работает в режиме добавления
Лучше, если Q
не был переназначен mswin.vim
, запустить режим Ex с Q
, объединить эти «команды двоеточия», которыена самом деле их лучше называть «Ex-командами» и вернуться в обычный режим, набрав visual
.
cf.:help :g
, :help :y
, :help Q
Двойной пробел вашего файла: :g/^/put _
.Таким образом содержимое регистра черной дыры (пустое при чтении, но доступное для записи, ведет себя как /dev/null
) также после каждой строки (потому что каждая строка имеет начало!).
Добавьте строку, содержащую foo
перед каждой строкой: :g/^/-put ='foo'
.Это умное использование регистра выражений.Здесь -
является синонимом .-1
(ср. :help :range
).Поскольку :put
помещает текст после строки, вы должны явно указать ему, чтобы он действовал на предыдущую.
Скопируйте весь буфер в системный буфер обмена: :%y+
.
ср.:help :range
(для части %
) и :help :y
.
Если вы неправильно записали макрос, вы можете набрать :let @a='
Ctrl - R =replace(@a,"'","''",'g')
Введите '
и отредактируйте его.Это изменит содержимое макроса, хранящегося в регистре a
, и здесь показано, как вы можете использовать регистр выражений для этого.
Если вы сделали dddd
, выможет сделать uu
, чтобы отменить.С p
вы можете получить последнюю удаленную строку.Но на самом деле вы также можете восстановить до 9 удалений с помощью регистров @1
- @9
.
Еще лучше, если вы сделаете "1P
, тогда .
в обычном режиме будет воспроизводить "2P
,и т. д.
ср.:help .
и :help quote_number
Если вы хотите вставить текущую дату в режиме вставки: Ctrl - R =strftime('%y%m%d')
Введите .
ср.:help strftime()