129

選択範囲をデフォルトのレジスタに配置せずに、視覚的に選択された領域に貼り付ける方法を知っている人はいますか?

常に明示的なレジスタから貼り付けることで問題を解決できることを知っています。"xpしかし、ただ入力するのではなく、タイプするのは首の痛みです。p

4

10 に答える 10

43

以下を使用します。

xnoremap p pgvy

これにより、ビジュアル モードで貼り付けられたテキストが再選択され、再度ヤンクされます。

編集:これを使用するには、次の"xpことができます。

xnoremap p pgv"@=v:register.'y'<cr>

v:register通常モード コマンドで使用された最後のレジスタ名に展開されます。

于 2011-02-23T15:52:05.583 に答える
35

"{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 は、同じ問題を解決するプラグインも定義しました。

于 2008-11-14T17:00:32.260 に答える
20

あなたの.vimrc

xnoremap p "_dP

これは同様のスレッドの応答から見つけましたが、元のソースはhttp://vim.wikia.com/wiki/Replace_a_word_with_yanked_textでした。いくつかの欠点について言及していますが、私にとってはうまく機能します。

于 2015-07-14T16:10:14.447 に答える
6

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  
于 2012-11-21T12:05:34.587 に答える
6

あなたのでこれを試してください~/.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の回答 と組み合わせてオプションのレジスタプレフィックスを使用したマッピング

于 2013-03-07T09:00:09.630 に答える
5

clipboard=unnamed セットがあるという事実をサポートするために変更を加えた後、Luc の関数はうまく機能しました。

function! RestoreRegister()
    let @" = s:restore_reg
    if &clipboard == "unnamed"
        let @* = s:restore_reg
    endif
    return ''
endfunction
于 2010-12-15T04:10:42.427 に答える
-4

試す -

:set guioptions-=a
:set guioptions-=A
于 2008-11-14T15:58:48.763 に答える