X以外のLinuxにもクリップボードはありますか?

X以外のLinuxにもクリップボードはありますか?

ウィンドウマネージャがあるLinuxデスクトップ(X11ベースのシステムなど)にはシステムクリップボードがあることがわかりますが、ウィンドウマネージャを使用していない場合でもクリップボードはありますか?

たとえば、Vimは+レジスタを介してシステムクリップボードにアクセスできますが、これはウィンドウマネージャのクリップボードを使用するため、X-windowsで実行されているGUIバージョンのVimにのみ適用されます。端末や仮想コンソールなどでVimのテキストベースのバージョンを使用している場合は機能しません。たとえば、異なる仮想コンソールで2つの異なるVimインスタンスを開く場合は、2つの間にコピーして貼り付けることができますか?

答え1

screenコピー/ペーストバッファをサポートしているので、tmuxこれは可能なアプローチです(詳細は他の回答を参照)。

Linux仮想コンソールを使用して実行できます。gpm(またはlibinput代替、consolation)はマウスベースのコピーペーストを提供します。マウスの左ボタンでテキストを選択し、マウスの中央ボタンで貼り付けます。

私が知っている限り、それらのどれもVimと直接統合されていないので、画面またはスクロールバックバッファ(存在する場合)に見えるものだけをコピーできます。

答え2

tmuxXクリップボードに似た「貼り付けバッファ」があり、同じホストで実行されている異なるセッション間でアクセスできます。セッション内で各vimインスタンスを起動しtmux(単一のセッションで、または各インスタンスを独自のセッションで - これらの目的には重要ではありません)、インスタンス間でテキストを簡単にコピーして貼り付けることができます。

主キーバインディングが次のようになると仮定すると、tmux+を押してコピーモードに入ります。コピーしたいテキストの先頭に移動して+をタップし、カーソルを移動して目的のテキストを強調表示してタップします。これにより、選択内容が貼り付けバッファにコピーされます。これで、別のセッション(またはその下で実行されている別のプログラム)に切り替え、+を押してバッファの内容を現在のウィンドウに貼り付けることができます。CTRLB[CTRLSPACEENTERvimtmuxCTRLB]

tmux複数の貼り付けバッファが保持されます。CTRL+を押してB#内容全体を表示するか、CTRL+を押してB=貼り付けバッファを視覚的に選択し、その内容を現在のウィンドウに挿入できます。

答え3

Xが実行されているとき、Vimはxclipからドラッグします。これは、ほとんどの人がアプリケーション間でコピーして貼り付けると思うのが実際にはX機能であることを意味します。

多くのアプリケーションにはコピー/ペースト機能やバッファがあり、真のクリップボードにすることができますが、これはIPC形式でアプリケーション間で共有される機能である必要があります。

以下の2つの大きなツールキットは、実際にdbusを介してこれをある程度サポートしています。とにかく内部的にXを使用しても、これは他のアプリケーションで使用できるインターフェースであることです。

https://developer.gnome.org/gtk3/stable/gtk3-Clipboards.html

http://doc.qt.io/qt-5/qclipboard.html

どちらのインターフェースもメインウィンドウシステムのクリップボードを抽象化するため、これには「データ共有」のより一般的な概念であるWaylandとの使用が含まれます。

https://wayland.freedesktop.org/docs/html/ch04.html#sect-Protocol-data-sharing

技術的にコンソールからコピーして貼り付けるのは、バッファを保存してロードするのと同じですので、必要なものをリダイレクトするだけです。したがって、これはOSレベルでコピーして貼り付けることです。

mkfifo clipboard && (echo -e "$copy" > clipboard && rm clipboard) &
paste=$(<clipboard)

bash/コマンドソルバーレベルでコピーして貼り付ける方法は次のとおりです。

copy="some text"
echo $copy

私は最初のものも変数を使用していることに気づきました。ただし、オペレーティングシステムの機能をデモとして使用します。

答え4

必須

init.vimで(図を参照)'+': ['tmux', 'load-buffer', '-w', '-']を使用してください。'+': ['tmux', 'load-buffer', '-']:help g:clipboard

次に、ctrl-vローカルwin10の"+ynvimにコピーする必要があります。


マイネットワーク情報

私はwin10をローカルコンピュータとして使用し、SSHをキャンパスのUbuntuコンピュータに使用します(VPNを介してEasy Connectというソフトウェアの助けを借りて)。私のローカルコンピュータでは、次のように動作します(pwsh7、Windowsターミナルを使用)。ssh [email protected]

echo $SSH_CLIENTその後、リモートシェルから10.11.220.32 50859 2210.11.220.32次のように表現してみましょう。win_ip。それでもリモートシェルではssh -v win_ip 次のようになります。

.....something ... 
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to win_ip [win_ip] port 22.
ssh: connect to host win_ip port 22: Connection timed out

同じローカルシステムからそのリモートシステムにwsl2(ubuntu)を使用しても同じことが起こります。

またscp、、、、、失敗しましたxclipxlogo

マルチプレクサ

~/.config//tmux/tmux.conf には次のものがあります。

bind -n M-v  run-shell "tmux copy-mode"
bind  'v' run-shell "tmux copy-mode ; tmux send -X begin-selection"
bind -T copy-mode-vi 'y' send -X copy-selection-and-cancel

したがって、注文すると:

  • Alt-v
  • v
  • テキストを選択してください(例:私は離れています。h j kまたはl...
  • y

tmuxにはctrl-b =「I_am_remote」と表示されます(図1を参照)、ctrl-b ]「I_am_remote」を貼り付けることができます。

Chromeのようなアプリで地元のwin10、ctrl-v選択したテキストを取得します。

nvimとtmux

init.vimでg:clipboardを設定しました。 :echo g:clipboard得る

{
    \ 'paste': {
        \ '*': ['tmux', 'save-buffer', '-'],
        \ '+': ['tmux', 'save-buffer', '-'],
       \ },
    \ 'cache_enabled': 1,
    \ 'name': 'ClipboarD-no-x11',
    \ 'copy': {
        \ '*': ['tmux', 'load-buffer', '-w', '-'],
        \ '+': ['tmux', 'load-buffer', '-w, '-'],
       \ },
   \ }

次に、ctrl-vローカルwin10の"+ynvimにコピーする必要があります。

ps:"+y時にはnvim show: "I_am_remote" clipboard: error invoking xclip: Error: Can't open display: win_ip:47 can be located viaまたはエラーメッセージが表示されても発生します。ctr-b =ctrl-b ]

関連情報