我在互联网上搜索,找不到有人问这个问题。我对向右移动和自动完成autosuggest-accept
是相同的按键绑定感到恼火。我的最终猜测是
bindkey -v '<C-Right>' autosuggest-accept
和
bindkey '\xffe4' autosuggest-accept
但他们没有工作。我应该如何去寻找如何做到这一点?
答案1
简而言之:你可能做不到
更长:您提到的指的0xffe4
是以下内容<X11/keysymdef.h>
:
/* Modifiers */
#define XK_Shift_L 0xffe1 /* Left shift */
#define XK_Shift_R 0xffe2 /* Right shift */
#define XK_Control_L 0xffe3 /* Left control */
#define XK_Control_R 0xffe4 /* Right control */
#define XK_Caps_Lock 0xffe5 /* Caps lock */
#define XK_Shift_Lock 0xffe6 /* Shift lock */
但请注意这一点修饰符。通常只有这些键调整X 中的其他键绑定,并且不单独起作用。对于 zsh、bash 或任何其他 shell,您需要单独运行的东西。您可以使用xmodmap
或修补xkb,通过发明某种方法使该键发送一个或多个字符,但如果没有这种方法,shell 将看不到任何内容。
答案2
我不认为这是可以做到的任何软件/程序在终端内运行,包括zsh
.
或者至少,我从未在任何软件中看到过,要么Right Ctrl (alone)绑定到某个东西,要么在手册中解释了绑定它的方式,或者Left Ctrl和之间的明确区别Right Ctrl。如果您知道一款具有此选项的软件(适用于任何终端),请告诉我。我配置的
软件包括:vim
、、、、、、、、和,没有zsh
一个谈到 你想要什么。因此,如果某些软件可以在终端中执行此操作,那么至少是极其罕见的。 我唯一看到类似(引用自)的内容是关于按下(它确实意味着):也有在普通键盘上没有向上/向下键的情况。lf
fzf
tmux
htop
less
most
visidata
C-Left, C-Right
man tmux
any Ctrlleft or right arrowLeft or Right CtrlC-Up, C-Down
Ctrl
你不能zsh
(假设zsh
手册是正确的):
搜索后man zshall
(man zsh
不完整),我看到有一个Ctrl + v快捷方式:
quoted-insert (^V) (unbound) (unbound)
Insert the next character typed into the buffer literally. An interrupt character will not be inserted.
所以,现在,我尝试any Ctrl + vLeft Ctrl + a, 或any Ctrl + vRight Ctrl + a,都显示给我^A
,这意味着两者都放置相同的字符(通过检查它vim
,然后按ga,我看到它是第二个ascii
字符,值为0x01
)。所以和zsh
之间可能没有任何区别。Left CtrlRight Ctrl
如果我按any Ctrl + vRight Ctrl (alone),它什么也不做。
两者都vim
告诉zsh
我同样的事情:他们不知道何时Ctrl按下没有键的键,
而不寻常的键Ctrl + vF1(至少在终端中不常见)给了我一些东西: ^[OP
withzsh
或<F1>
with vim
。F1可以用终端来识别含义。
像这样的 shellzsh
可以在 内部运行tmux
,并且tmux
有一个功能,即和send-keys
之间没有任何区别。这意味着在一般情况下您将无法做您想做的事情。Left CtrlRight Ctrl
可以肯定的是,我还在tmux
源代码中进行了搜索(我用 得到了它git clone tmux
),并尝试rgrep -i "ctrl\|control" | grep -i "right\|ctrl.\?r\|r.\ctrl"
查看每次它谈到Right Ctrl密钥时的情况,我发现的是:
tty-keys.c:134: { "\033Oc", KEYC_RIGHT|KEYC_CTRL },
tty-keys.c:405: { TTYC_KRIT5, KEYC_RIGHT|KEYC_CTRL },
tty-keys.c:406: { TTYC_KRIT6, KEYC_RIGHT|KEYC_SHIFT|KEYC_CTRL },
tty-keys.c:407: { TTYC_KRIT7, KEYC_RIGHT|KEYC_META|KEYC_IMPLIED_META|KEYC_CTRL },
CHANGES:2395: control the maximum length of left and right components of the
status bar.
CHANGES:2550: C- for ctrl keys (^ is still accepted as an alternative).
status.c:1168: case KEYC_RIGHT|KEYC_CTRL:
所以,大多数都是在谈论Ctrl + Right,其他的则无关紧要。
在某些终端上,例如英石(我可以在其中配置任何键),在 上config.h
,我看到如下代码:
{ XK_KP_End, ControlMask, "\033[1;5F", +1, 0},
{ XK_KP_End, ShiftMask, "\033[K", -1, 0},
Ctrl + End意味着当您按或 时,某些事情就会完成Shift + End,而且我没有看到左或右之间有任何区别Ctrl。只有一个ControlMask
,也只有一个ShiftMask
(所以,如果是关于键的话,我的答案是一样的Shift)。
我还在源代码rgrep
上尝试了我的命令st
,同样,它只谈论Ctrl + Right.
我可以为任何其他终端模拟器执行此操作。我认为考虑到在一般情况下无法做到这一点就足够了。实际上,有一种方法可以实现这种行为,并且只能打开它,zsh
但这非常困难:编辑 的源代码zsh
,以及终端仿真器的源代码,也许还可以编辑xorg
.
如果您想更改Right Ctrl的行为,则需要Right Ctrl为每个软件绑定 。有关键盘配置的更多信息,
请参阅man xmodmap
、man setxkbmap
和。man xkeyboard-config
通常,Ctrl键是修饰符。这意味着只有当您用另一个键按下它们时,它们才应该执行某些操作。
笔记 :在极少数情况下,键可以充当修饰符或键,例如:
- 在某些软件(包括
libreoffice
)中,当您按 时,您会看到一些带有下划线的字母Alt。 xev
是一个用于测试事件的工具,因此,它可以识别一切,包括按任意键。- 双功能键来自QMK允许某些键在快速键入时表现得像“常规键”,而在按下另一个键时表现得像修饰键。
emacs
有一个调和弦特征。这并不完全是关于官方修饰符(Shift或Control或Alt等),但如果在一定延迟内与其他键一起按下,它可以使常规键充当修饰符。emacs
可以从终端外部运行,并且可以在内部运行 shellemacs
。所以,也许你可以:- 使用或将密钥重新映射Right Ctrl到任何地方的某个东西(我们称之为
foo
)。setxkbmap
xmodmap
- 在里面
emacs
,重新映射foo
回right control
用于key-chord
某些部分,但不用于您运行的位置zsh
。 - 请注意,我还没有测试过这个,如果可能的话,它可能并不简单,但它
emacs
是我所知道的唯一“终端模拟器”(实际上,它应该是一个文本编辑器,但它有很多功能,包括运行外壳)具有接近“既是修饰键又是常规键的东西”的功能。
- 使用或将密钥重新映射Right Ctrl到任何地方的某个东西(我们称之为