Кто-нибудь знает способ оклеить визуально выбранную область, не помещая выделение в регистр по умолчанию?
Я знаю, что могу решить проблему, всегда вставляя данные из явного регистра. Но печатать - это боль в шее, "xpа не простоp
"{register}p
не будет работать так, как вы описываете. Он заменит выбор содержимым регистра. Вместо этого вам нужно будет сделать что-то вроде:
" I haven't found how to hide this function (yet)
function! RestoreRegister()
let @" = s:restore_reg
return ''
endfunction
function! s:Repl()
let s:restore_reg = @"
return "p@=RestoreRegister()\<cr>"
endfunction
" NB: this supports "rp that replaces the selection by the contents of @r
vnoremap <silent> <expr> p <sid>Repl()
Это должно быть хорошо, если вы не используете плагин, у которого есть vmap, отличное от nore, для p, и который ожидает перезаписи регистра.
Этот код доступен как скрипт там . Инго Каркат также определил плагин, решающий ту же проблему.
regtype
(линейно?), И что переназначения p наpgvy
достаточно."xp
это не перезаписывает@"
содержимое@x
непохожимpgvy
:xnoremap p pgv@=v:register.'y'<cr>
?Мне не нравится поведение Vim по умолчанию копирования всего текста удален с
d
,D
,c
илиC
в регистре по умолчанию.Я обошел это путем сопоставления
d
с"_d
,c
с"_c
и так далее.Из моего .vimrc:
источник
Используйте следующее:
это повторно выделит и восстановит любой текст, вставленный в визуальном режиме.
Изменить: чтобы это работало,
"xp
вы можете:v:register
расширяется до последнего имени регистра, использованного в команде нормального режима.источник
"xp
этот подход заменяется@"
на@x
.xnoremap p pgv"@=v:register.'y'<cr>
не сработало для меня. Это, однако, делает:xnoremap <expr> p 'pgv"'.v:register.'y'
g
делает? Я такого раньше не видел.g
один ничего не делает. Он предоставляет расширенные многоклавишные команды, напримерz
. Например,go
переходит к n-му байту в буфереgj
иgk
переходит к следующей и предыдущей отображаемой строке (отличается от того,jk
когда строки переносятся),ga
отображает информацию о символе под курсором,gJ
объединяет строки без пробела иgv
восстанавливает последнее визуальное выделение. Вы можете использовать:help gv
.:xnoremap <expr> p 'pgv"'.v:register.'y`>'
, я добавил `` `>` `Чтобы восстановить позицию курсораВ твоем
.vimrc
Я нашел это из ответа в аналогичном потоке, но исходным источником был http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text . В нем упоминаются некоторые недостатки, но у меня он работает нормально.
источник
.vimrc.local
тоже ОК.Решение Люка Эрмитта работает как шарм. Я использовал его около недели. Затем я обнаружил решение из .vimrc Стива Лоша, которое отлично работает, если YankRing является частью вашей линейки плагинов / пакетов:
источник
Попробуйте это в своем
~/.vimrc
:xnoremap
означает, что это только дляVisual
режима, а не дляVisual + Select
режимов.<expr>
означает , что{rhs}
поxnoremap {lhs} {rhs}
обстановке оценивается как выражение.В этом случае наше выражение
'pgv"'.v:register.'y'
используется.
для конкатенации.v:register
оценивается для регистра, используемого во время выполнения отображения.Результат
"xp
будет оцениваться какpgv"xy
, гдеx
находится регистр.Мне помог ответ на этот вопрос о переполнении стека: Vim - отображение с необязательным префиксом регистра в сочетании с ответом Бенуа на этой странице
источник
Функция Люка работала у меня хорошо после того, как я внес изменения, поддерживающие тот факт, что у меня есть clipboard = un named set:
источник
clipboard=unnamedplus
это должно быть@+
вместо@*
.Люк Эрмитт сделал свое дело! Действительно хорошо. Вот его решение, добавленное в функцию переключения, чтобы вы могли переключаться между нормальным поведением и помещением без замены регистра.
команда u переключает поведение
источник
silent! vunmap
вместоvnoremap <silent> <expr> p p
программирование изоленты, но у меня работает:
источник
пытаться -
источник