ウィンドウマネージャがあるLinuxデスクトップ(X11ベースのシステムなど)にはシステムクリップボードがあることがわかりますが、ウィンドウマネージャを使用していない場合でもクリップボードはありますか?
たとえば、Vimは+レジスタを介してシステムクリップボードにアクセスできますが、これはウィンドウマネージャのクリップボードを使用するため、X-windowsで実行されているGUIバージョンのVimにのみ適用されます。端末や仮想コンソールなどでVimのテキストベースのバージョンを使用している場合は機能しません。たとえば、異なる仮想コンソールで2つの異なるVimインスタンスを開く場合は、2つの間にコピーして貼り付けることができますか?
答え1
screen
コピー/ペーストバッファをサポートしているので、tmux
これは可能なアプローチです(詳細は他の回答を参照)。
Linux仮想コンソールを使用して実行できます。gpm
(またはlibinput
代替、consolation
)はマウスベースのコピーペーストを提供します。マウスの左ボタンでテキストを選択し、マウスの中央ボタンで貼り付けます。
私が知っている限り、それらのどれもVimと直接統合されていないので、画面またはスクロールバックバッファ(存在する場合)に見えるものだけをコピーできます。
答え2
tmux
Xクリップボードに似た「貼り付けバッファ」があり、同じホストで実行されている異なるセッション間でアクセスできます。セッション内で各vim
インスタンスを起動しtmux
(単一のセッションで、または各インスタンスを独自のセッションで - これらの目的には重要ではありません)、インスタンス間でテキストを簡単にコピーして貼り付けることができます。
主キーバインディングが次のようになると仮定すると、tmux
+を押してコピーモードに入ります。コピーしたいテキストの先頭に移動して+をタップし、カーソルを移動して目的のテキストを強調表示してタップします。これにより、選択内容が貼り付けバッファにコピーされます。これで、別のセッション(またはその下で実行されている別のプログラム)に切り替え、+を押してバッファの内容を現在のウィンドウに貼り付けることができます。CTRLB[CTRLSPACEENTERvim
tmux
CTRLB]
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の"+y
nvimにコピーする必要があります。
マイネットワーク情報
私はwin10をローカルコンピュータとして使用し、SSHをキャンパスのUbuntuコンピュータに使用します(VPNを介してEasy Connectというソフトウェアの助けを借りて)。私のローカルコンピュータでは、次のように動作します(pwsh7、Windowsターミナルを使用)。ssh [email protected]
echo $SSH_CLIENT
その後、リモートシェルから10.11.220.32 50859 22
。10.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
、、、、、失敗しましたxclip
。xlogo
マルチプレクサ
~/.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の"+y
nvimにコピーする必要があります。
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
]