選択範囲をデフォルトのレジスタに配置せずに、視覚的に選択された領域に貼り付ける方法を知っている人はいますか?
常に明示的なレジスタから貼り付けることで問題を解決できることを知っています。"xpしかし、ただ入力するのではなく、タイプするのは首の痛みです。p
以下を使用します。
xnoremap p pgvy
これにより、ビジュアル モードで貼り付けられたテキストが再選択され、再度ヤンクされます。
編集:これを使用するには、次の"xp
ことができます。
xnoremap p pgv"@=v:register.'y'<cr>
v:register
通常モード コマンドで使用された最後のレジスタ名に展開されます。
"{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()
p への nore 以外の vmap を持ち、レジスタが上書きされることを期待するプラグインを使用しない限り、これで問題ありません。
このコードは、そこでスクリプトとして入手できます。Ingo Karkat は、同じ問題を解決するプラグインも定義しました。
あなたの.vimrc
xnoremap p "_dP
これは同様のスレッドの応答から見つけましたが、元のソースはhttp://vim.wikia.com/wiki/Replace_a_word_with_yanked_textでした。いくつかの欠点について言及していますが、私にとってはうまく機能します。
Luc Hermitte のソリューションは魅力的です。1週間ほど使用していました。その後、 Steve Losh の .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
マッピングの実行中に使用されるレジスターに評価されます。
wouldの結果は"xp
に評価されます。pgv"xy
ここx
で、 はレジスタです。
このスタックオーバーフローの質問への回答に助けられました: Vim -このページのBenoitの回答 と組み合わせてオプションのレジスタプレフィックスを使用したマッピング
clipboard=unnamed セットがあるという事実をサポートするために変更を加えた後、Luc の関数はうまく機能しました。
function! RestoreRegister()
let @" = s:restore_reg
if &clipboard == "unnamed"
let @* = s:restore_reg
endif
return ''
endfunction
試す -
:set guioptions-=a
:set guioptions-=A