vimで貼り付けたテキストのみを元に戻すにはどうすればよいですか?


10

TL; DR; バージョン-挿入モードに入ってから入力された他のテキストを取り消すことなく、OSコピーバッファーから貼り付けられたテキストを取り消す方法を教えてください。

長い説明:

  1. OSのコピーバッファーに何かを入れます(たとえば、テキストをハイライトしCommand-cてMac で実行します)
  2. vim(i)で挿入モードに入ります
  3. 何かを入力(例asdf
  4. 挿入モードを終了せずに、コピーバッファーからvimに貼り付けます(Command-vMacの場合)
  5. ヒット escape
  6. 貼り付けを元に戻します(u

最後に挿入モードに入ったときからのすべてを元に戻します。つまり、asdf貼り付けたすべてのテキストがクリアされます。

どのように私はないだけに貼り付けたテキストを元に戻しますか?貼り付けたテキストを元に戻すオプションを用意するためだけに、テキストを貼り付ける前に、常に挿入モードを終了して元に戻す必要がありますか?

回答:


4

1つの方法は、貼り付けの前に明示的にドロップして挿入モードに戻すことです。貼り付けコマンドを拡張する場合は、貼り付け前に元に戻すポイントを自動的に設定することもできます。

" Any text fragment pasted in insert mode should be undone separately, without
" destroying what was typed before.
inoremap <C-R> <C-G>u<C-R>

上記は組み込みi_CTRL-Rコマンド用です。Command-vMacVimでどのように実装されているかはわかりませんが<C-G>u:imapコマンドの先頭に追加すると同じ効果が得られます。


1
魅力のように機能します、ありがとう!とにかく、貼り付けには標準のvimメソッドを使用する必要があります。
Javid Jamae 14

これを追加するだけです:h i_CTRL-G_u(つまり、挿入モードで「取り消しシーケンスを解除し、新しい変更を開始する」)。
toraritte 2017年

2

MacVimではEdit > Paste、ショートカットを上書きするためにメニュー項目のマップを解除する必要があります。その後、Cmd-V(D-vMacVim用語では)を各モードの適切なコマンドに再マップできます。私はこれを私に追加しましたが、~/.gvimrc今ではすべてがうまくいきます:

macmenu Edit.Paste key=<nop>
noremap <D-v> "*P
cnoremap <D-v> <C-r><C-o>*
inoremap <D-v> <C-g>u<C-r><C-o>*

これ<C-g>uは、元に戻す履歴を修正するために挿入モードでのみ必要です。noremapそしてcnoremap、通常のコマンドモードでのデフォルトペーストの動作を復元するだけです。

ここで私を正しい方向に向けてくれたIngo Karkatに感謝します。


1

実際の解決策は、Esc最初にコマンドモード(例:)に移動してから挿入モードに入る必要があることですが、手動で入力した場合にのみ機能しますが、でテストすると、「ランダムに」機能しなくなり~/.vimrcます。Googleはまったく役に立ちません。

私はこの問題を修正するために多くの時間を費やしており、私の場合の理由を理解しています:

端末の既存の貼り付けキーと同じ貼り付けキーをマップしないでください

たとえばCtrl+Shift+V、私のKonsoleターミナルに貼り付けます<C-S-v>~/.vimrc、このキーをで割り当てた場合、「複数の貼り付けではなく単一の貼り付けのみを元に戻す」は機能しません。

私の場合、<C-v>代わりに使用する必要があります<C-S-v>

inoremap <C-v> <Esc>"+pi<Esc>i<Right><Right>

大文字と小文字は異なる場合がありますが、要点は同じです。既存の端末エミュレータキーと同じ貼り付けキーの競合を割り当てないでください。

私は100%に設定し、私の端末ペーストキーでこの結論を証明してきたCtrl+Vし、今<C-v>の停止作業が、<C-S-v>作業します。

vimは敏感すぎて奇妙なことにも注意してください。i正しいカーソル位置で機能するようにするには、2つの右キーを手動で使用する必要があることを理解しました。つまりi、2つの右キーも配置する必要があり~/.vimrcます。大文字と小文字は異なる場合がありますが、要点は同じです。〜/ .vimrcのキー+順序が、手動で入力したものと100%一致することを確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.