1

スタイル コマンド/マクロを作成して、現在の名前のないヤンク レジスタ (必要に応じて特定のレジスタ) を外部コマンドに貼り付けたいと考えています。

私の現在の使用例は、行をクリップボードに送信することです。将来的には、同じ手法を使用してテキストを他のプログラムに送信したいと考えています。

クリップボードについては、Mac ユーザーとして通常は*クリップボードに追加するだけですが、Tmux ユーザーでもあるため、これは機能しません。代わりにreattach-to-user-namespaceコマンドを使用する必要があります。私がやりたいのは、ヤンクレジスタをにパイプアウトすることreattach-to-user-namespace -l bash -c pbcopyです。

4

2 に答える 2

0

ラッパーを介してシェルを起動する場合reattach-to-user-namespace(ラッパーのドキュメントで説明しているように)、すべての子はユーザー ブートストラップ名前空間にアタッチされるため、(eg)pbcopyおよびpbpaste.

または、ラッパーを介して Vim のインスタンスのみを実行して、Vim (およびその子) にブートストラップ名前空間へのアクセスを許可することもできます。*そうすれば、レジスターを使用できるはずです(Vim 7.3 をこの+clipboard機能でコンパイルした場合、つまり、OS X に付属するもの以外の実質的にすべてのビルドの Vim を使用している場合)。

reattach-to-user-namespace vim …
# use "* inside Vim to access the OS X clipboard.

ラッパーを必要とする最終的なプロセス (例: ) 以外でラッパーを実行したくない場合は、pbcopyVim のsystem()関数を使用できます。これは、Vim の内部データを任意の (非対話型) 外部コマンドに一般的に送信する方法でもあります。

:call system('reattach-to-user-namespace pbcopy', getreg(''))

これを新しいコマンドとしてパッケージ化することをお勧めします (さまざまなレジスタでより簡単に使用できるようにするため)。

command -bar -register Pbcopy call system('reattach-to-user-namespace pbcopy', getreg(<q-reg>))

この新しいコマンドは、次のように使用できます (引数はレジスタ名です)。

:Pbcopy "
:Pbcopy a

さらに一歩進んで、コマンドを呼び出すマッピングを作成できます。

nnoremap <F3> :<C-u>execute 'Pbcopy ' . v:register<CR>

F3orと入力して使用します"aF3(つまり、他のレジスタを使用する通常モード コマンドと同様に、レジスタ プレフィックスを使用します)。

于 2012-10-23T10:11:30.777 に答える
0

romainl が述べたように、名前空間コマンドを tmux.conf に入れることで、これを行う必要はありませんが、レジスタの内容を外部コマンドにパイプしたい場合は、getreg()その内容を取得しexeて実行するために使用できますコマンド。例えば...

:exe "!pipereg ".getreg('"')." | pbcopy"
于 2012-10-22T23:13:50.850 に答える