Ответы:
Да. Хит 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плюс имя регистра, вставляет содержимое этого регистра. Если вы хотите вставить их буквально (без автоматического отступа, без преобразования контрольных символов, таких как 0x08backspace и т. Д.), Вы можете использовать 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 строк.