2016-12-12 7 views
2

私は意味の意味を持つコマンドを構成するのが大好きです。同様に、例えばcibは文のように読むchange in brackets - 素晴らしい。vimはほとんどすべてのコマンドにレジスタを使用するのはなぜですか?

しかし、なぜvimは古いコンテンツをクリップボードにコピーする必要がありますか?そのコマンドのどこにも私はそれをコピーしたいと提案しているが、問題はもっと深くなっている。

dwdiwなどすべてが私のクリップボードにコピーされます。どうして?これは、これらのコマンドの意味的価値を放棄するように思われ、予期せぬ動作であると言います。

これらのコマンドを間違って使用していますか、またはこの機能を完全に無効にする方法がありますか?

nnoremap dd "_dd

nnoremap cc "_cc

が、私は非明示的なコピーの一つ一つの可能​​な組み合わせのためにそれをしないしたいと思います。現在、私はこのようにいくつかの再マッピングを行っています。

答えて

6

デフォルトでは、あなたが話しているコマンドのほとんどは、無名のレジスタ"を使用しています。これらすべてのものについてクリップボードが上書きされているように思えます。clipboardからunnamedまたはunnamed_plusに設定することができます。

set clipboard?の出力がこれらの2つのオプションのいずれかである場合、標準に戻すには、おそらくset clipboard=を実行します。

     *'clipboard'* *'cb'* 
'clipboard' 'cb' string (default "autoselect,exclude:cons\|linux" 
          for X-windows, "" otherwise) 
      global 
      {not in Vi} 
      {only in GUI versions or when the |+xterm_clipboard| 
      feature is included} 
    This option is a list of comma separated names. 
    These names are recognized: 

         *clipboard-unnamed* 
    unnamed  When included, Vim will use the clipboard register '*' 
      for all yank, delete, change and put operations which 
      would normally go to the unnamed register. When a 
      register is explicitly specified, it will always be 
      used regardless of whether "unnamed" is in 'clipboard' 
      or not. The clipboard register can always be 
      explicitly accessed using the "* notation. Also see 
      |gui-clipboard|. 

         *clipboard-unnamedplus* 
    unnamedplus A variant of the "unnamed" flag which uses the 
      clipboard register '+' (|quoteplus|) instead of 
      register '*' for all yank, delete, change and put 
      operations which would normally go to the unnamed 
      register. When "unnamed" is also included to the 
      option, yank operations (but not delete, change or 
      put) will additionally copy the text into register 
      '*'. 
      Only available with the |+X11| feature. 
      Availability can be checked with: 
       if has('unnamedplus') 
+1

これはまさに私の問題だった、ありがとう! –

1

私は反対意見を提示し、Vimを非イディオムで使用する可能性が高いことを示唆しています。これは決して予想外の動作ではありません。貼り付けの準備としてcibを使用していますので、cibはそれをねじ込みますか?代わりにvibpを実行してください。

dwdiwなどすべてが私のクリップボードにコピーされます。どうして?これは、これらのコマンドの意味的価値を放棄するように思われ、予期せぬ動作であると言います。

d次いでp(すなわち、テキストを移動する)、カットアンドペーストの通常のVimのイディオムです。これは私が毎日やる、1日に何度もやる作業です。もしdがヤンクしていないと本当に迷惑でしょう。 dDelと同等のテキストエディタであると思われるようです。それはむしろctrl-x(カット)と等価です。これをキャンセルするには、あなたが言ったように"_dを実行します。私はそれがほとんど必要ではないことが分かります。高度な例として、cとビジュアルモードpのデフォルトのセマンティクスは、2つのオブジェクトを交換するのが簡単です。例えば:

私はすべての食べ物を飲み、すべてのウイスキーを食べました。バックどこへ行くに

「飲んだ」する

ゴー、diw(単語を削除し、それをヤンク)、「食べた」に行き、viwp(単語を選択して、以前の内容をヤンク、その上に貼り付ける)、ctrl-o "飲んだ"はP(カーソルの前に貼り付け):

私はすべての食べ物を食べ、すべてのウィスキーを飲んだ。

(Iはまた、テキストオブジェクトとして「機能パラメータ」を定義するプラグインを持っているので、私はアップミックス場合、私はコードで同じイディオムを使用するか、リファクタリング、パラメータの順序。)

のみ私がより一般的に防止したいのは、ビジュアルモードで貼り付けをして(同じ内容を複数回貼り付けることができるように)貼り付けることです。このために、私は

xnoremap <expr> P '"_d"'.v:register.'P' 

here)を使用します。これはビジュアルモードでPを再マッピングするだけです(ビジュアルモードではpと同じです)。視覚モード以外ではpでもPでも、問題はありません。

関連する問題