Ответы:
Да. Хит Ctrl- Rтогда ". Если у вас есть буквенные символы управления в том, что вы рывок, использование Ctrl- R, Ctrl- O, ".
Вот объяснение того, что вы можете сделать с регистрами. То, что вы можете сделать с регистрами, является необычным, и если вы знаете, как их использовать, вы не можете жить без них.
Регистры - это в основном места хранения строк. В Vim есть много регистров, которые работают по-разному:
0
(регистр янки: когда вы используете y
в обычном режиме, без указания регистра, янк текст переходит туда, а также в регистр по умолчанию),1
в 9
(сдвиг регистров удаления, когда вы используете такие команды, как c
или d
, то, что было удалено, переходит в регистр 1, то, что было в регистре 1, переходит в регистр 2 и т. д. ),"
(регистр по умолчанию, также известный как безымянный регистр. Вот где "приходит Ctrl- R, "),a
чтобы z
для собственного использования (капитализируются A
в Z
которые для добавления в соответствующие регистры)._
(действует как /dev/null
(Unix) или NUL
(Windows), вы можете писать в него, но он удаляется, а когда вы читаете из него, он всегда пуст),-
(маленький регистр удаления),/
(поиск регистр шаблон обновляется , когда вы посмотрите на текст с /
, ?
, *
или #
, например, вы также можете написать к нему , чтобы динамически изменять шаблон поиска),:
(сохраняет последнюю введенную команду VimL через Q
или :
, только для чтения),+
и *
(системные регистры буфера обмена, вы можете написать в них, чтобы установить буфер обмена и прочитать содержимое буфера обмена из них)Смотрите :help registers
для полной ссылки.
Вы можете в любой момент использовать :registers
для отображения содержимого всех регистров. Синонимы и сокращение для этой команды :display
, :reg
и :di
.
В режиме вставки или командной строки, Ctrl- Rплюс имя регистра, вставляет содержимое этого регистра. Если вы хотите вставить их буквально (без автоматического отступа, без преобразования контрольных символов, таких как 0x08
backspace и т. Д.), Вы можете использовать Ctrl- R, Ctrl- O, имя регистра. См. :help i_CTRL-R
И следующие параграфы для дополнительной ссылки.
Но вы также можете сделать следующее (и я, вероятно, забыл много случаев использования регистров).
В обычном режиме нажмите ":p. Последняя команда, которую вы использовали в vim, вставляется в ваш буфер.
Разложим: "
это команда в обычном режиме, которая позволяет вам выбрать регистр, который будет использоваться во время следующей операции восстановления, удаления или вставки. Поэтому ":выбирается регистр двоеточия (сохраняется последняя команда). Тогда pэто команда, которую вы уже знаете, она вставляет содержимое регистра.
ср :help "
,:help quote_:
Вы редактируете файл VIML (например ваш .vimrc
) и хотели бы выполнить несколько последовательных строки прямо сейчас: yj:@"Enter.
Здесь yjвставляет текущую и следующую строки (это потому, что 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
в режиме вставки, то @.
(поскольку .
регистр содержит последнюю вставленную строку) удалят строку. (Вим документация неправильно в этом отношении, так как в нем говорится , что регистры #
, %
, :
и .
будет работать только с p
, P
, :put
и Ctrl- R).
ср :help @
Не путайте :@
(команда, которая воспроизводит команды Vim из регистра) и @
(команда нормального режима, которая воспроизводит команды нормального режима из регистра).
Заметным исключением является @:
. Регистр команд не содержит начального двоеточия и не содержит окончательного возврата каретки. Однако в обычном режиме вы @:
будете делать то, что ожидаете, интерпретируя регистр как команду Ex, не пытаясь воспроизвести его в обычном режиме. Так что, если ваша последняя команда была :e
, регистр содержит, e
но @:
перезагрузит файл, а не до конца слова.
ср :help @:
Покажите , что вы будете делать в нормальном режиме перед запуском: @='dd'
Enter. Как только вы =
нажимаете клавишу, Vim переключается на оценку выражения: когда вы вводите выражение и нажимаете Enter, Vim вычисляет его, и результат действует как содержимое регистра. Конечно, регистр =
только для чтения и однократный. Каждый раз, когда вы начнете использовать его, вам придется вводить новое выражение.
ср :help quote_=
Следствие: если вы редактируете команду и понимаете, что вам нужно вставить в командную строку какую-то строку из текущего буфера: не нажимайте Esc! Используйте Ctrl- R =getline(58)
Enter. После этого вы вернетесь к редактированию командной строки, но оно вставило содержимое 58-й строки.
Определите шаблон поиска вручную: :let @/ = 'foo'
ср :help :let
Обратите внимание, что для этого вам не нужно убегать /
по шаблону. Однако, конечно, вам нужно удвоить все одинарные кавычки.
Скопировать все строки , начинающиеся с foo
, а затем все строки , содержащие bar
в буфер обмена, цепи следующие команды: qaq
(сбрасывает регистра хранения пустой макрос внутри него), , , .:g/^foo/y A
:g/bar/y A
:let @+ = @a
Использование имени регистра с прописной буквы делает регистр работать в режиме добавления
Лучше, если Q
он не был переназначен mswin.vim
, запустить режим Ex с помощью Q
, связать те «команды двоеточия», которые на самом деле лучше называть «командами Ex», и вернуться в обычный режим, набрав visual
.
ср :help :g
, :help :y
,:help Q
Дважды пространство файл: :g/^/put _
. Это помещает содержимое регистра черной дыры (пустое при чтении, но доступное для записи, ведет себя как /dev/null
) также после каждой строки (потому что каждая строка имеет начало!).
Добавьте строку , содержащую foo
перед каждой строкой: :g/^/-put ='foo'
. Это умное использование регистра выражений. Здесь -
является синонимом .-1
(ср. :help :range
). Поскольку :put
текст помещается после строки, вы должны явно указать ему, чтобы он действовал по предыдущему.
Скопируйте весь буфер в системный буфер обмена :%y+
.
ср :help :range
(со %
стороны) и :help :y
.
Если вы misrecorded макрос, вы можете набрать :let @a='
Ctrl- R =replace(@a,"'","''",'g')
Enter '
и редактировать его. Это изменит содержимое макроса, хранящегося в регистре a
, и здесь показано, как вы можете использовать регистр выражений для этого.
Если вы сделали dddd
, вы могли бы сделать uu
, чтобы отменить. С p
его помощью можно получить последнюю удаленную строку. Но на самом деле вы также можете восстановить до 9 удалений @1
через регистры @9
.
Еще лучше, если вы это сделаете "1P
, то .
в нормальном режиме сыграете "2P
и так далее.
ср :help .
а также:help quote_number
Если вы хотите вставить текущую дату в режиме вставки: Ctrl- R=strftime('%y%m%d')
Enter.
ср :help strftime()
Еще раз, что может сбивать с толку:
:@
команда командной строки, которая интерпретирует содержимое регистра как vimscript и получает его@
в обычном режиме команда, которая интерпретирует содержимое регистра как нажатия клавиш в обычном режиме (кроме случаев, когда вы используете :
регистр, который содержит последнюю проигранную команду без начального двоеточия: в этом случае она воспроизводит команду так, как если бы вы также повторно вводили двоеточие и окончательный ключ возврата).
"
в обычном режиме команда, которая помогает вам выбрать регистр для yank, вставить, удалить, исправить и т. д.
"
также является допустимым именем регистра (регистр по умолчанию или без имени) и поэтому может быть передан в качестве аргумента для команд, которые ожидают имена регистровДля вставки чего-то, что является системным буфером обмена, вы можете просто использовать SHIFT- INS.
Он работает в Windows, но я предполагаю, что он хорошо работает и в Linux.
:!rm -rf /<cr>
, он выполнит это. Вместо этого используйте регистры!
shift-ins
легче, чем ctrl-R+*
? Это конечно если ты в гвим. Если вы находитесь в терминале, подключенном к другой машине, и хотите вставить что-то из буфера обмена, знаете ли вы что-нибудь лучше, чем shift-ins
? потому что регистры не работают в этой ситуации. Пожалуйста, подумайте, прежде чем комментировать и делать другие вещи (например, понижение голоса).
«Я хотел бы вставить набранный текст в командную строку Vim».
Хотя ответ с наибольшим количеством голосов очень полный, я предпочитаю редактировать историю команд.
В обычном режиме, введите: q:
. Это даст вам список последних команд, доступных для редактирования и поиска с помощью обычных команд vim. Вы начнете с пустой командной строки внизу.
Точно, о чем говорится в статье, вставив строку рваной строки (или что-либо дергая) в командную строку, вырвите свой текст и затем: q:p
(войдите в режим редактирования истории команд, а затем (p) утвердите ваш вырванный текст в новую команду линия. Редактировать по желанию, enterчтобы выполнить.
Чтобы выйти из режима истории команд, все наоборот. В обычном режиме в истории команд введите: :q
+enter
Для вставки чего-либо из системного буфера обмена в командную строку Vim («командный режим») используйте Ctrl+, Rа затем +. Для меня, по крайней мере, на Ubuntu, Shift+ Insне работает.
PS: я не уверен, почему Ctrl+, Rпосле которого *, теоретически то же самое, что Ctrl+, Rпосле которого +, кажется, не всегда работает. Я искал и обнаружил +версию, и она, кажется, работает всегда, по крайней мере, на моей коробке.
У меня была похожая проблема. Я хотел, чтобы выделенный текст заканчивался командой, но не полагался на его вставку. Вот команда, для которой я пытался написать сопоставление:
:call VimuxRunCommand("python")
Документы для этого плагина показаны только с использованием строковых литералов. Если вы попытаетесь выделить текст, содержащий двойные кавычки, произойдет следующее:
vnoremap y:call VimuxRunCommand("<c-r>"")<cr>
Чтобы обойти это, вы просто ссылаетесь на содержимое макроса, используя @
:
vnoremap y:call VimuxRunCommand(@")<cr>
Пропускает содержимое безымянного регистра и работает с моими двойными кавычками и многострочными краями.
@
персонажа в команду vimux. думать о том, чтобы @
избежать следующей двойной кавычки и рассматривать ее как регистр, а не как обычный символ. vnoremap
Я определил активно в визуальном режиме, поэтому он дергает выделенный текст, а затем вставляет его в команду vimux, отправив его к работающему переводчику в смежной области. действительно отлично подходит для работы над сценарием и тестирования его небольших частей парой нажатий клавиш.
OS X
Если вы используете Vim в Mac OS X, к сожалению, он поставляется с более старой версией и не соответствует параметрам буфера обмена. К счастью, Homebrew может легко решить эту проблему.
Установите Vim:
brew install vim --with-lua --with-override-system-vi
Установите версию графического интерфейса Vim:
brew install macvim --with-lua --with-override-system-vi
Перезапустите терминал, чтобы он вступил в силу.
Добавьте следующую строку к ~/.vimrc
set clipboard=unnamed
Теперь вы можете скопировать строку в Vim yy
и вставить ее для всей системы.
Для контекста эта информация взята из коробки, без плагинов, без поведения .vimrc Vim 7.4 в Linux Mint с опциями по умолчанию.
Вы всегда можете выделить текст с помощью мыши (или, используя Vили vи поместив выделение в регистр "*"), и вставить его в командную строку с помощью Shift+ Ctrl+ v.
Ввод Ctrl+ rв командной строке вызовет запрос имени регистра. поэтому ввод текста :CTRL-r*поместит регистр содержимого * в командную строку. Будет вставлен любой регистр, а не просто "*. Видите :help c_CTRL-R
.
Кроме того, средняя кнопка мыши будет вставлена в командную строку.
Смотрите :help->quote-plus
описание того, как X Window работает с выбором. Даже в простом встроенном Vim (опять же, в Vim 7.4 в Linux Mint, в любом случае) любой выбор, сделанный левой кнопкой мыши, может быть вставлен в командную строку средней кнопкой мыши.
Кроме того, средняя кнопка мыши также вставит текст, выбранный в Vim, во многие другие приложения X Window, даже в приложения с графическим интерфейсом (например, Firefox и Thunderbird ), и вставка текста в командную строку также возможна, если текст был выбран из других приложений. ,
Смотрите: help-> x11-selection для дополнительной информации.
ТЛ; др
Сначала попробуйте: CTRL-r, а затем используйте Shift+ Ctrl+ vили среднюю кнопку мыши, если вам нужно что-то еще.
Признано, что это может сбить с толку.
"[a-z]y
: Скопировать текст в регистр [az]
Используйте, :!
чтобы перейти к команде редактирования
Ctrl+ R: Следуйте регистрационной информации, чтобы вставить то, что вы копируете.
Раньше для CentOS 7.
Если у вас есть два значения, объединенные в два разных регистра (например, регистр a
и регистр b
), вы можете просто установить переменную c
и выполнить операцию с ней.
Например, :set c = str2float(@a) + str2float(@b)
а затем вы можете вставить содержимое в c
любом месте.
Например, находясь в режиме INSERT, CTRL + R
затем введите =
для ввода в регистр выражений и просто введите c
после знака равенства и нажмите клавишу ВВОД. Готово, теперь вы должны иметь общее количество a
и b
регистров.
Все это можно записать в макрос и повторить заново!
str2float
Функция используется , если вы работаете с поплавками, если вы этого не сделаете, вы получите целые числа вместо этого.
Я не уверен, что это идиоматично, но это сработало для моего случая, когда мне нужно было добавить 2 числа подряд и повторить это для еще 500 строк.