我如何在zsh中綁定右控制鍵?
我搜尋了網際網路,找不到任何人問這個問題。我對向右移動和自動完成
autosuggest-accept
是相同的鍵綁定感到惱火。我的猜測是bindkey -v '<C-Right>' autosuggest-accept
和
bindkey '\xffe4' autosuggest-accept
但他們沒有工作。我應該如何去尋找如何做到這一點?
我不認為它可以通過在終端內執行的任何軟體/程序
zsh
來完成,包括.或者至少,我從未在任何軟體中看到,無論是
Right Ctrl (alone)
綁定到某個東西,還是手冊中解釋的綁定它的方式,或者Left Ctrl
和Right Ctrl
. 如果您知道具有此選項的軟體(與任何終端一起使用),請告訴我。我配置的軟體包括 :
vim
,zsh
,lf
,fzf
,tmux
,htop
,less
,most
和visidata
,沒有人說你想要什麼。因此,如果某些軟體可以在終端中做到這一點,那至少是極其罕見的。
我看到類似於
C-Left, C-Right
(quote fromman tmux
)的唯一時間是用(It does mean )any Ctrl
壓制:還有left or right arrow``Left or Right Ctrl``C-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 + v``Left Ctrl + a
,或者any Ctrl + v``Right Ctrl + a
,都給我看^A
,這意味著都放了相同的字元(通過檢查這個vim
,然後按g``a
,我看到它是第二個ascii
字元,帶有 value0x01
)。所以可能在andzsh
之間沒有任何區別。Left Ctrl``Right Ctrl
如果我按
any Ctrl + v``Right Ctrl (alone)
,它什麼也不做。兩者都
vim
告訴zsh
我同樣的事情:他們不知道什麼時候沒有Ctrl
按鍵按下按鍵,而不尋常的按鍵
Ctrl + v``F1
(至少在終端中不尋常)給了我一些東西:^[OP
withzsh
或<F1>
withvim
。F1
可以通過終端辨識含義。一個 shell like
zsh
可以在裡面執行tmux
,並且tmux
有一個特性,它在andsend-keys
之間沒有任何區別。這意味著您將無法在一般情況下做您想做的事情。Left Ctrl``Right 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
,而其他的則無關緊要。在某些終端上,例如st(我可以配置任何鍵),在 上
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
。所以,也許你可以:
- 使用or將鍵重新映射到任何地方
Right Ctrl
(我們稱之為) 。foo``setxkbmap``xmodmap
- 在內部
emacs
,重新映射foo
回right control
用於key-chord
某些部分,但不適用於您執行的位置zsh
。- 請注意,我沒有對此進行測試,如果可能的話,它可能並不簡單,但
emacs
它是我所知道的唯一“終端模擬器”(實際上,它應該是一個文本編輯器,但它有很多功能,包括執行 shell)具有接近“既是修飾符又是正常鍵”的功能。
簡而言之:您可能無法做到這一點
更長:您提到的
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 */
但請注意Modifiers。通常這些鍵只修改X 中的其他鍵綁定,而不是單獨作用。對於 zsh、bash 或任何其他 shell,您需要單獨執行的東西。您可以使用
xmodmap
或修改xkb,通過發明某種方法使該密鑰發送一個或多個字元,但沒有它,shell 將看不到任何東西。