回答:
Zshには、他のアプリケーションと通信しないビルトインクリップボードがあります。非常にスクリプト可能なため、の数行で通信することができます~/.zshrc
。xclipまたはxselが必要です。viモードでの概念実証については、クリップボードからvi対応のzshまたはbashシェルへの貼り付けを参照してください。emacsモードに対応するコードは次のとおりです(おそらく他のkill-*
ウィジェットと同じようなことをしたいと思うでしょう)。
x-copy-region-as-kill () {
zle copy-region-as-kill
print -rn $CUTBUFFER | xsel -i -b
}
zle -N x-copy-region-as-kill
x-kill-region () {
zle kill-region
print -rn $CUTBUFFER | xsel -i -b
}
zle -N x-kill-region
x-yank () {
CUTBUFFER=$(xsel -o -b </dev/null)
zle yank
}
zle -N x-yank
bindkey -e '\ew' x-copy-region-as-kill
bindkey -e '^W' x-kill-region
bindkey -e '^Y' x-yank
これはX11クリップボードを使用します(通常はCtrl+ C/ Ctrl+でアクセスされますV)。-b
代わりにX11プライマリ選択を使用するオプションを削除します(選択時に自動的にコピーし、マウスの中央ボタンで貼り付けます)。
ZshのカットバッファーをXクリップボードに統合したいと思っていました。前述のhttp://stchaz.free.fr/mouse.zshを試しましたが、すべてのZsh操作でクリップボードにデータを入力するのが嫌いでした。たとえば、ブラウザで何かをコピーしてから、シェルに移動してコマンドラインを編集し、貼り付けます。しかし、コマンドラインを編集する(たとえば、単語を削除する)と、Zshカットバッファーが変更されることがよくあります。良くも悪くも、Xにはキルリングではなくクリップボードしかないため、Zshの編集操作でクリップボードを上書きすると、貼り付けたかったものが失われます-できる限りヤンクポップ(Cy My)できません。 ZshまたはEmacsで行います。
そのため、代わりに、zshを介してXクリップボードと対話するための新しい特別なキーバインドを作成しています。"^ Xw"と "^ Xy"はEmacsとZshの両方で使用されていないことが判明したので、両方のアプリケーションでそれらをバインドすることにより、一貫したインターフェイスを取得できます。このように、通常の編集操作、カットバッファ、キルリングはそのままにされます。何かをクリップボードにコピーしたい場合は、リージョンを設定して "^ Xw"を実行します(または、既にそれを削除してリージョンが非アクティブの場合は、 "^ Xw"を実行してカットバッファーをコピーできます)。クリップボードからの貼り付けは「^ Xy」で行います。
# define commands to copy and paste x clipboard
# ^Xw - copy region, or cut buffer
# ^Xy - paste x clipboard
# in both cases, modifies CUTBUFFER
copy-to-xclip() {
[[ "$REGION_ACTIVE" -ne 0 ]] && zle copy-region-as-kill
print -rn -- $CUTBUFFER | xclip -selection clipboard -i
}
zle -N copy-to-xclip
bindkey "^Xw" copy-to-xclip
paste-xclip() {
killring=("$CUTBUFFER" "${(@)killring[1,-2]}")
CUTBUFFER=$(xclip -selection clipboard -o)
zle yank
}
zle -N paste-xclip
bindkey "^Xy" paste-xclip
あなたは見ていたいかもしれhttp://stchaz.free.fr/mouse.zshマウスのサポートを追加するほかにも、Xのクリップボードと対話しようとします。
kill-region
とvi-delete
してyank
とvi-put-after
同様に包むなどvi-yank
、など。(私はそれをもっと集中的に行う方法を見つけていません)