Bash

如何在 readline bash vi(vi shell 模式)中重新映射功能鍵?

  • March 5, 2020

關於 vi readline 中的映射功能鍵,我已經閱讀了這兩個 stackexchanges:


我有一個帶觸摸條的 MacBookPro。功能鍵始終打開,但與物理鍵不同,虛擬觸摸欄功能鍵是喜怒無常的,並且經常在我輸入的命令中註入垃圾(這在嘗試輸入下劃線時尤其成問題……我得到了很多, F9,F10可能還有一些F11)。我不使用這些鍵…所以我希望我可以禁用它們。但是,假設我可以讓他們簡單地走到行尾。

這是我多次嘗試映射到行尾的嘗試之一(在插入模式下):

set editing-mode vi
$if mode=vi
   set keymap vi-insert
   "<F9>": end-of-line
$endif

在提示符下鍵入“asdf”的結果如下:

TT->~$ [] (arg: 20)

我已放置“

$$ $$",上面,在按 後游標仍然存在的地方<F9>,以防萬一。 我嘗試過的變體如下:

  • "<F9>": end-of-line
  • <F9>": end-of-line
  • 20: end-of-line
  • "20": end-of-line
  • "arg: 20": end-of-line
  • (arg: 20): end-of-line
  • "(arg: 20)": end-of-line

更新:以下.inputrc現在正在“忽略”:

set keymap vi-insert
"\e[20~":redraw-current-line

這很瘋狂,但確實如此……我今天在一台新伺服器上,完全忘記了這個問題(以及隱藏在評論中的答案),我實際上是在Google上搜尋如何做到這一點。我正在為自己或在 vi 命令行中禁用功能鍵輸入時遇到問題的任何其他人發布我的答案:

  1. 創建或編輯您的~/.inputrc文件
  2. 要通過(MacOS、Ubuntu、CentOS至少)禁用,請使用以下命令:
set keymap vi-insert
"\e[19~":redraw-current-line
"\e[20~":redraw-current-line
"\e[21~":redraw-current-line
"\e[22~":redraw-current-line
"\e[23~":redraw-current-line

正如@mosvy 所指出的,重繪目前行可以防止煩人的“ (arg: 20)”或“ (arg: 21)”破壞您的命令行輸入。

引用自:https://unix.stackexchange.com/questions/558176