您可以按字面意思输入字符使用
tty 驱动程序中的“lnext”功能(默认情况下通常为 ^V)
但是,我将Ctrl+绑定v到终端模拟器中的“粘贴”。 (因为我不使用控制流)我想重新绑定lnext
到Ctrl+ q。我尝试了以下内容~/.zshrc
setopt noflowcontrol # Don't use ^s and ^q for control flow
bindkey -r "^Q" # Unbind ^q from push-line
stty lnext '^Q' # Bind ^q to lnext
然而,它似乎不起作用。有没有办法重新绑定lnext
到Ctrl+ q?
编辑
我已经完成了更多故障排除,并且似乎无法重新绑定其他 stty 键。我删除setopt noflowcontrol
进行测试,然后尝试stty start '^A'
或stty start '^B'
。两者都没有任何效果;start
仍然绑定到Ctrl+ q。 (FWIW 我尝试了文字^A
或以及前面的^B
字符本身。)lnext
答案1
stty lnext
只影响终端设备行规则内部编辑器(当运行这样的应用程序时,您得到的编辑器非常有限,cat
没有自己的行编辑器)。对于 zsh 的编辑器,您需要使用bindkey
(zle
不像readline
(bash
的行编辑器) 那样查询 tty LD 设置以在其自己的编辑器中执行相同的操作)。
stty lnext '^Q' start '' -ixon # for tty LD editor
bindkey '^Q' quoted-insert # for zle
请注意,您需要stty
为每个终端执行该部分操作,并在 tty LD 设置恢复为默认值(如 after )时再次执行此操作stty sane
。
有些系统允许您更改默认的 tty 设置,例如 HPUX 和stty lnext '^Q' < /dev/ttyconf
.
^V
在 zsh 行编辑器中将 X11 CLIPBOARD 选择的内容粘贴到光标处:
get-clipboard() {
local clip
clip=$(xclip -sel c -o 2> /dev/null && echo .) || return
LBUFFER+=${clip%.}
}
zle -N get-clipboard
bindkey '^V' get-clipboard