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

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

关于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 命令行中禁用功能键输入时遇到问题的人发布我的答案:

  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)”破坏您的命令行输入。

相关内容