Bash
如何在 readline 中切換到 vi 編輯模式?
我想在 readline 環境中切換到 vi 編輯模式。但我不想使用’set -o vi’。我想使用鍵盤快捷鍵臨時切換。手冊頁說我可以用
M-C-j
. 但這對我不起作用。我正在使用 Ubuntu 和一個 xterm。在 gnome-terminal 下也不起作用。
Bash 明確禁用了這個和其他一些 Readline 快捷方式。查看
initialize_readline()
bash 原始碼中的函式(http://www.catonmat.net/download/bashline.c):/* In Bash, the user can switch editing modes with "set -o [vi emacs]", so it is not necessary to allow C-M-j for context switching. Turn off this occasionally confusing behaviour. */ rl_unbind_key_in_map (CTRL('J'), emacs_meta_keymap); rl_unbind_key_in_map (CTRL('M'), emacs_meta_keymap); #if defined (VI_MODE) rl_unbind_key_in_map (CTRL('E'), vi_movement_keymap); #endif
我似乎無法使用 Readline 配置文件 (.inputrc) 覆蓋此行為。
我會確認鍵盤映射
Meta
++Control
實際上j
在您的系統上是正確的。您可以使用此命令列出 Bash 各種模式的所有鍵綁定。在我的系統上也沒有鍵綁定。$ bind -P| grep edit edit-and-execute-command can be found on "\C-x\C-e". emacs-editing-mode is not bound to any keys vi-editing-mode is not bound to any keys
您可以執行以下操作,以便當您鍵入
Esc
+e
時,它將在兩種模式之間切換。$ set -o emacs $ bind '"\ee": vi-editing-mode' $ set -o vi $ bind '"\ee": emacs-editing-mode'
該
bind
命令現在顯示:在那裡模式
$ bind -P |grep edit edit-and-execute-command is not bound to any keys emacs-editing-mode can be found on "\ee". vi-editing-mode is not bound to any keys
在 emacs 模式下
$ bind -P |grep edit edit-and-execute-command can be found on "\C-x\C-e". emacs-editing-mode is not bound to any keys vi-editing-mode can be found on "\ee".
現在您可以使用
Esc
+e
在 2 種不同模式之間切換。