Часто в конфигурационных файлах я могу скопировать и вставить блок строк, затем я хочу внести небольшие изменения в этот блок. После вставки я использую, x
чтобы удалить символы, которые я хочу удалить, а затем перейти к вставке следующего блока. За исключением того, что x
помещает удаленные символы в буфер обмена, поэтому мне придется заново скопировать блок строк.
Есть ли способ сделать это без перехода в режим вставки?
cut-copy-paste
register
durron597
источник
источник
Ответы:
Ваши варианты:
_
. Например, чтобы удалить строку, вы наберете"_dd
. Это удаляет без ущерба для буфера обмена."ayy
затем вставить"ap
"0p
Запустите
:help registers
для более подробной информации о первых 3источник
x
я бы"_x
тогда использовал ?x
, вам, вероятно, следует научиться перемещать удаления, напримерdt)
удаление, до следующей закрывающей скобки, вd2W
которой удаляются следующие два разделенных пробелами токена . Тогда вы можете сделать что-то вроде"_di{
внутри ограниченного региона, что я и делаю все время. В обычном режиме это означает « удалить все, что находится внутри этой ограниченной области, в черную дыру »nnoremap x "_x
в мой~/.vimrc
(объяснение здесь: stackoverflow.com/questions/54255/… ).x
не помещает вещи в буфер обмена, он помещает их в реестр . Если вы не скажете ему, в какой регистр его поместить, он поместит его в безымянный регистр, который, конечно, перезаписывает предыдущее содержимое. Итак, вместо этого, укажите ему, какой регистр использовать:," REGISTER x
где REGISTER это любая отдельная буква. Затем вы используете тот же префикс регистра цитаты pдля вставки из этого регистра. (Примечание: строчные буквы заменяют их содержимое; заглавные буквы добавляются).Есть также два специальных регистра
"0
и"1
."0
является последним yтекстом yanked ( ), который останется, даже если вы удалите какой-либо текст другой командой (например x)."1
является последним удаленным текстом, если он не маленький (одна строка). Небольшой удаленный текст входит"-
.Наконец, как указывает Стив Вермейлен, вы можете сказать vim не сохранять удаленный текст, указав регистр черной дыры
"_
.Соответствующая команда справки
:help registers
.источник
Команда
:let
позволит вам переопределить именованный регистр. В командной строке vim, дважды нажав Control+ 1 и затем имя регистра, будет вставлено содержимое регистра в команду. Затем вы можете изменить то, что он вставил, и сохранить реестр с вашими изменениями.RПример:
"fyy
вся строкаyy
вставляется вf
регистр ("f
).:let @f='
и Control+ r, Control+ rснова, затем f, и вы должны увидеть, как он вставляется в «Foo Bar», так что ваша командная строка теперь читает:let @f='Foo Bar
с курсором в самом конце.:let @f='foo bar baz
.:let @f='foo bar baz'
и нажмите Enter.Теперь вы переопределили содержимое
f
регистра как «foo bar baz».(Это также работает для макросов!
:help let
Для получения дополнительной информации.)1 Control + rпозволяет вставлять регистр, когда вы уже находитесь в режиме вставки, как будто вы печатаете символы. Использование этой последовательности дважды важно, потому что «текст вставляется буквально, а не как будто напечатан. Это отличается, когда регистр содержит такие символы, как
<BS>
». - insert.txt vimdoc,:help i_CTRL-R_CTRL-R
источник
Относительно регистра
"_
черной дыры, упомянутого @derobert, вы можете найти полезный скринкаст в http://vimcasts.org/episodes/meet-the-yank-register/источник
Плагин ReplaceWithRegister
http://www.vim.org/scripts/script.php?script_id=2703 (2009-2014)
Это предлагает сопоставление
gr
.gr
Альтернативно, используйте,
gr<text object>
чтобы сделать это без визуального выбора. dot-repeat поддерживается, когда установлены плагиныrepeat.vim
Tim Pope иvisualrepeat.vim
Ingo Karkat.источник