如何将 stty 重新绑定到 ^q 旁边?

如何将 stty 重新绑定到 ^q 旁边?

您可以按字面意思输入字符使用

tty 驱动程序中的“lnext”功能(默认情况下通常为 ^V)

但是,我将Ctrl+绑定v到终端模拟器中的“粘贴”。 (因为我不使用控制流)我想重新绑定lnextCtrl+ 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

然而,它似乎不起作用。有没有办法重新绑定lnextCtrl+ 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

相关内容