Answers:
Zsh的内置剪贴板无法与其他应用程序通信。由于它非常易于编写脚本,因此您可以使其与中的几行通信~/.zshrc
。您将需要xclip或xsel。有关在vi模式下进行概念验证的信息,请参见从剪贴板粘贴到启用vi的zsh或bash shell中。这是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操作都填充到剪贴板中。例如,有时我会在浏览器中复制某些内容,然后转到shell并编辑命令行,然后粘贴。但是经常编辑命令行-例如删除单词-会修改Zsh剪切缓冲区。不管是好是坏,X只是有一个剪贴板,没有杀死环,因此当Zsh编辑操作覆盖剪贴板时,我想要粘贴的内容丢失了-我无法尽可能地将其粘贴(Cy My)在Zsh或Emacs中执行。
因此,我要做的是创建新的特殊键绑定,以通过zsh与X剪贴板进行交互。事实证明Emacs和Zsh都未使用“ ^ Xw”和“ ^ Xy”,因此我可以通过在两个应用程序中绑定它们来获得一致的接口。这样,正常的编辑操作,剪切缓冲区和终止环就不存在了。如果要复制某些内容到剪贴板,请设置区域并执行“ ^ 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
,和其他人。(我还没有找到一种更集中的方法)