ランレベル3のシステム全体のVim貼り付けバッファ

ランレベル3のシステム全体のVim貼り付けバッファ

このような質問をするのは少し恥ずかしいですが、このトピックは特に検索が難しいトピックのようです。

Linuxシステムでは、ターミナルエミュレータ(最も一般的にmacOSで)を介してシステムにターミナルとSSHをほぼ排他的に使用します。

一般に、ターミナルマルチプレクサの場合、コードスニペットやログエラーなどをコピーして貼り付けるのは、システム全体でバッファをブラウズするのが難しい問題です。これは通常、コピー用の端末エミュレータの自己選択機能を介して行われ、クライアント操作を使用します。システムの貼り付けバッファ。この質問はそれとは何の関係もありません。

私の問題は、単一のLinuxサーバーで多くのvimインスタンスを開くときです。私はランレベル3にあり、GUIを実行していません。 xclip は使用できません。主にXがインストールされていないからです。

このワークフローの途中でいくつかのファイルを取り出して、同じ削除ボックスの別のvimに貼り付ける必要があることに気づきました。 Vimの組み込みバッファ+*コピー/貼り付けバッファは機能しません。 (このシステムではvimのクリップボードコンパイルオプションは有効になりません)

ただし、あるvimインスタンスからいくつかのテキストを取得して終了し、別のvimインスタンスを開いて正しく貼り付けると機能します。したがって、vimの終了に関する内容はバッファをどこかに残します。 vimを閉じずにこのシステムのすべての機能をリアルタイムで動作させることができれば本当に良いと思います。自分のプル/ペースト実装を実装するために階層的にプルと削除をバインドする必要がないようにしたいと思います。

答え1

これは.viminfoファイルです(:h viminfo)。

vimを終了すると、現在の状態(たとえば、コマンド履歴とレジスタ値)がこのファイルに書き込まれます。起動すると、ファイルを読み取り、説明されているすべての状態を復元します。これは意味する言葉のないVimセッションはいくつかの状態を共有しているようですが、同時セッションはそうではありません。

次のコマンドを使用すると、viminfoファイルを強制的に再読み込みできます。:rv/:rviminfo注文する、手動で作成:wv。したがって、y :wvあるエディタでは:rv p別のエディタで動作しますが、副作用があります。みんなレジスタの値とコマンド履歴がリセットされる可能性があります。

これも利点となり得る。フルレジスタを使用してエディタ間で複数のコピーバッファを取得できます。これはシステムクリップボードが提供しない機能です。一方、yこれを自動的に実行するように再バインドしない限り、これはそれほど便利ではなく、pおそらく毎回ファイルを読みたくないでしょう。私はLeaderコマンドにバインドされたviminfoを読み書きしましたが、キーストロークを一度だけ節約できます(より頻繁に使用されるようです)。


手動で呼び出すなど、使用できる他の方法があります。特定のファイルに副作用を避けるために、自分で行ってください。これはしたくないようですが、オプションです。セッションシステムだけでなく、必要な操作をある程度実行するプラグインもあります。あなたの質問に対する直接的な答えではありませんが、最終的にあなたが望むものを教えてくれます。

答え2

約束通り:

Linux固有のスクリプト(my $HOME/utilin my $PATH):

~/util ❯❯❯ cat linux_pb/pbcopy                                         ✘ 130 master b28083b $ ◼
#!/bin/bash

# pbcopy impl for linux!
# pipe the stdin to a file using cat. Not using bash builtins due to concerns
# about NULs.

FILE="$HOME/.clipboard"
touch $FILE
chmod 600 $FILE
cat > $FILE
~/util ❯❯❯ cat linux_pb/pbpaste                                              master b28083b $ ◼
#!/bin/bash

# pbpaste impl for linux!
# just use the content of the file.

cat ~/.clipboard

vimバインディング:

vnoremap <silent> <Leader>y :w !pbcopy<CR><CR>
" the leader y works like normal yy (but for my clipboard)
nnoremap <silent> <Leader>y :.w !pbcopy<CR><CR>
nnoremap <Leader>p :read !pbpaste<CR>

等価シェルエイリアススクリプト(bashとzshからこのエイリアススクリプトを取得しました):

if [ "$(uname)" = Linux ] && ! [[ "$PATH" = *"/linux_pb"* ]]; then
    PATH="$PATH:$HOME/util/linux_pb"
fi

Xで実際のLinuxを使い始めると、貼り付けバッファも利用できるようにLinux構成をさらに具体化します。次のpbcopyプログラムを作成するには、いくつかのメカニズムが必要です。pbpasteこれ

これはプログラムレベルで統合された方法の1つなので、Vimは今シェルでできるようにこの機能を利用できます。

関連情報