*および+レジスタのカスタムコマンドを定義する


9

このxterm_clipboard機能を備えたVimのビルドを使用している場合、システムクリップボードのコンテンツは+レジスターから入手できます。

私が使用しているビルドにこの機能がない場合、"+システムクリップボードを取得および設定するために、registerにカスタムプログラムを呼び出させることができますか(xsel -boおよびxsel -bi、または同様にxclip)?同様にして"*、コールへxsel -poxsel -pi

ポイントは"+p、機能が利用可能かどうかを心配することなく、何かのようにタイプできることです。タイピングは、:r !xsel -b<Enter>私が探しているものではありません。私は仕事に同じキーストロークをしたい、と私はペーストが「真」のレジスタのために利用できるものをフォローするバリアントたい(Pgp、...)。

おまけ:他のレジスタ名にカスタムコマンドを定義できますか?

回答:


7

いくつかの<expr>マッピングはここで仕事をすることができるはずです。基本的な構造は

function! ClipboardOrXclip(command, register)
    if a:register !~ '[+*]' || has('xterm_clipboard') || has('gui_running')
        " Just return the original command if the clipboard is accessible
        " or it's not a register that should be handled by xsel
        return a:command
    endif
    if a:register == '+'
        return "<Esc>:r !xsel -bo<CR>"
    else
        return "<Esc>:r !xsel -po<CR>"
    endif
endfunction

nnoremap <silent> <expr> p ClipboardOrXclip('p', v:register)

この関数は、すべてのバリエーション扱うように拡張する必要があるだろうpPgp、などが、これは良いスタートでなければなりません。


これは正しい方向に進んでいるようですが、機能していません。プレーンp(前"にレジスタ名がない場合)は"p、ステータス行に表示されるmake以外は何もしません。"apa"bpビープ音、… と同等です。ロジックがわかりません。"+すぐにビープ音を鳴らします。+つまり*、レジスター名として、またはレジスター名として言うことすらできません。
Gilles「SO-邪悪なことをやめなさい」

1
これらの根本的な問題が解決された場合、オーバーライドする必要があるコマンドの完全なリストはありますか?特にヤンクもサポートしたい場合、セットは気が遠くなるように見えます。
Gilles「SO-邪悪なことをやめ

@Gilles + / *以外のレジスタでの動作を修正するために更新されました。"+vimが-xterm_clipboardこの関数に到達することはないため、vim の問題はさらに困難です。無効なレジスタ(+)を指定すると、コマンドが中止されます。SO、実際には動作を逆にする必要があるようですので、"+または"*をマッピングしてから、ユーザーが指定したコマンドを処理します...
jamessan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.