Хтось знає про спосіб наклеїти візуально вибрану область без вибору, розміщеного в реєстрі за замовчуванням?
Я знаю, що можна вирішити проблему, завжди вставляючи з явного реєстру. Але це біль у шиї, "xpа не простоp
Хтось знає про спосіб наклеїти візуально вибрану область без вибору, розміщеного в реєстрі за замовчуванням?
Я знаю, що можна вирішити проблему, завжди вставляючи з явного реєстру. Але це біль у шиї, "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 для p, і очікує, що реєстр буде перезаписаний.
Цей код доступний як сценарій там . Інго Каркат також визначив плагін, що вирішує ту саму проблему.
regtype(лінійно?) І що переоформлення р до pgvyдостатньо.
"xp@"@xpgvy
:xnoremap p pgv@=v:register.'y'<cr>?
Мені не подобається поведінка Vim за замовчуванням копіювання всього тексту вилучений з d, D, cабо Cв регістрі за замовчуванням.
Я обминув це шляхом картографування dдо "_d, cдо "_cтощо.
Від мого .vimrc:
"These are to cancel the default behavior of d, D, c, C
" to put the text they delete in the default register.
" Note that this means e.g. "ad won't copy the text into
" register a anymore. You have to explicitly yank it.
nnoremap d "_d
vnoremap d "_d
nnoremap D "_D
vnoremap D "_D
nnoremap c "_c
vnoremap c "_c
nnoremap C "_C
vnoremap C "_C
Використовуйте наступне:
xnoremap p pgvy
це дозволить повторно вибрати і повторно вилучити будь-який текст, який вставлений у візуальному режимі.
Редагувати: для того, щоб це працювало з "xpвами, можна зробити:
xnoremap p pgv"@=v:register.'y'<cr>
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
xnoremap p "_dP
Я знайшов це у відповіді на подібній темі, але початковим джерелом було http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text . Він згадує деякі недоліки, проте для мене це добре працює.
.vimrc.localтакож добре.
Рішення Люка Ермітта працює як шарм. Я використовував його близько тижня або близько того. Тоді я знайшов рішення у .vimrc Стіва Лоша, яке добре працює, якщо YankRing є частиною вашої лінійки плагінів / пакетів:
function! YRRunAfterMaps()
" From Steve Losh, Preserve the yank post selection/put.
vnoremap p :<c-u>YRPaste 'p', 'v'<cr>gv:YRYankRange 'v'<cr>
endfunction
Спробуйте це у вашому ~/.vimrc:
xnoremap <expr> p 'pgv"'.v:register.'y'
xnoremapозначає, що це лише для Visualрежиму, а не для Visual + Selectрежимів.
<expr>означає , що {rhs}по xnoremap {lhs} {rhs}обстановці оцінюється як вираз.
У цьому випадку наше вираження 'pgv"'.v:register.'y'використання використовується .для конкатенації.
v:register оцінюється до реєстру, який використовується під час виконання карти.
Результат "xpбуде оцінювати pgv"xy, де xзнаходиться реєстр.
Я допоміг відповідь на це питання StackOverflow: Вім - відображення з додатковим регістра префікса в поєднанні з Benoit відповідь «s на цій сторінці
Функція Люка добре працювала для мене після того, як я змінив, щоб підтримати той факт, що у мене буфер обміну = без назви:
function! RestoreRegister()
let @" = s:restore_reg
if &clipboard == "unnamed"
let @* = s:restore_reg
endif
return ''
endfunction
clipboard=unnamedplusце потрібно @+замість @*.
Люк Ермітт зробив свою справу! Справді добре. Ось його рішення введено у функцію перемикання, тож ви можете перемикатися між нормальною поведінкою та не заміною реєструвати.
команда, u перемикає поведінку
let s:putSwap = 1
function TogglePutSwap()
if s:putSwap
vnoremap <silent> <expr> p <sid>Repl()
let s:putSwap = 0
echo 'noreplace put'
else
vnoremap <silent> <expr> p p
let s:putSwap = 1
echo 'replace put'
endif
return
endfunction
noremap ,p :call TogglePutSwap()<cr>
silent! vunmapзамістьvnoremap <silent> <expr> p p
програмування канальних стрічок, але працює для мене:
nmap viwp viwpyiw
nmap vi'p vi'pyi'
nmap vi"p vi"pyi"
nmap vi(p vi(pyi(
nmap vi[p vi[pyi[
nmap vi<p vi<pyi<
спробувати -
:set guioptions-=a
:set guioptions-=A