关于vi readline中的映射功能键,我已经阅读了这两个堆栈交换:
我有一台带触摸栏的 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
答案1
这很疯狂,但却是事实……我今天在一台新服务器上,完全忘记了这个问题(答案埋在评论中),我实际上正在谷歌搜索今天如何做到这一点。我为自己或其他任何在 vi 命令行中禁用功能键输入时遇到问题的人发布我的答案:
- 创建或编辑您的
~/.inputrc
文件 - 通过(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)
”破坏您的命令行输入。