我注意到 zsh 有很多我在 emacs 中看到的东西。我可以使用 ctrl+space 进行选择并选择一个区域。当我留在 zsh 中时,我可以像在 emacs 中一样制作副本。在 emacs 中,我可以使用我的系统剪贴板(以前需要一些额外的配置,但现在在 emacs 中可以开箱即用)。在 zsh 中,我似乎无法使用 Cy 从剪贴板粘贴,从 zsh 复制到系统剪贴板也有同样的问题。有没有解决的办法?
Gil*_*il' 14
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
Run Code Online (Sandbox Code Playgroud)
这使用 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 剪贴板交互。事实证明,“^Xw”和“^Xy”在 Emacs 和 Zsh 中都未使用,因此我可以通过在两个应用程序中绑定它们来获得一致的接口。这样,正常的编辑操作、cutbuffer 和 kill ring 就不用管了。如果我想将某些内容复制到剪贴板,我会设置该区域并执行“^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
Run Code Online (Sandbox Code Playgroud)