vimで貼り付けを元に戻す

vimで貼り付けを元に戻す

u元に戻すとCtrl-rやり直しの と については知っています。しかし、u最後に保存した状態に戻ります。貼り付けを元に戻す方法を知りたいですcmd-v

例えば、

I am typing here bla bla bla, [link to website](here I paste a wrong http link 
with cmd-v)

それでは、

I am typing here bla bla bla, [link to website](

vim でそれを実行する方法はありますか?

前もって感謝します。

答え1

免責事項: ctrl ではなく cmd を使用する Apple キーボードが vim とどのようにやり取りするかについてはまったく知らないため、一部を変更または微調整する必要がある可能性があります。

vim で貼り付ける正しい方法は、pコマンドを使用することです。システム クリップボードから貼り付けるには、 を使用します"*p。したがって、標準的な方法は、挿入モードを終了して を使用することです"*pa(aもちろん、 は挿入モードに戻ります)。

挿入モード内で使用するキーボード ショートカットが必要な場合は、次のようにするのが自然です。

inoremap <c-v> <esc>"*pa

(つまり、Ctrl + V を押して Esc キーを押すのではなく、実際にそこにあるものを入力します)。

一見するとこう見えるだろうすべき必要な動作を提供します。これは、上で説明した標準的な貼り付けプロセスを自動化するだけです。しかし、そうではありません。Vim はコマンドのすべての部分を同じ元に戻すブロックの一部として扱い、vim 挿入モード自体も一種のコマンドです。

ただし、挿入モード中に ctrl+g に続いて (はい、このキーの組み合わせは vim らしくないように思えますが、これが現実です) を使用すると、手動で新しい元に戻すブロックを開始できますu。したがって、キーの再マッピングを次のように修正できます。

inoremap <c-v> <c-g>u<esc>"*pa

これらはすべて ctrl+v で動作します (Windows でテストしたところ、少なくともそこでは動作します) <c-v>。vim 内の cmd ベースのショートカットには、別のもの ( 以外) を使用する必要があるかもしれません。Apple キーボードを使用している場合は、OSX を意味します。cmd+v がシステム ショートカットである場合、何が優先されるかはわかりません。Google でざっと調べたところ、cmd を vim で適切に動作させるには、OS レベルの設定をいじる必要があるかもしれないことがわかりました。

答え2

Edit > PasteMacVim では、ショートカットを上書きするにはメニュー項目のマッピングを解除する必要があります。その後、D-v各モードで Cmd-V (MacVim 用語) を適切なコマンドに再マッピングできます。これを自分のに追加した~/.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通常モードとコマンド モードでデフォルトの貼り付け動作を復元するだけです。

ここで正しい方向を指し示してくれた evilsoup に感謝します。

関連情報