Я хотел бы вставить набранный текст в командную строку Vim. Является ли это возможным?
vim
copy-paste
Дан
источник
источник
Ответы:
Да. Хит 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после которого +, кажется, не всегда работает. Я искал и обнаружил +версию, и она, кажется, работает всегда, по крайней мере, на моей коробке.
источник
Стоит также отметить, что регистры янки совпадают с макробуферами. Другими словами, вы можете просто записать всю свою команду в свой документ (включая вставленный фрагмент), затем
"by
перетащить ее вb
регистр и запустить с помощью@b
.источник
У меня была похожая проблема. Я хотел, чтобы выделенный текст заканчивался командой, но не полагался на его вставку. Вот команда, для которой я пытался написать сопоставление:
Документы для этого плагина показаны только с использованием строковых литералов. Если вы попытаетесь выделить текст, содержащий двойные кавычки, произойдет следующее:
Чтобы обойти это, вы просто ссылаетесь на содержимое макроса, используя
@
:Пропускает содержимое безымянного регистра и работает с моими двойными кавычками и многострочными краями.
источник
@
персонажа в команду 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 строк.
источник