【问题标题】:How to customize vim key bindings outside vim (eg: terminal)?如何在 vim 之外自定义 vim 键绑定(例如:终端)?
【发布时间】:2020-05-25 09:07:25
【问题描述】:

在我的 vim 编辑器中,我重新映射了一些操作,因为我不喜欢它们的默认键绑定。 (例如,我使用 Ctrl h/l 代替 0/$ 转到行的开头/结尾,因为以前的绑定更容易使用。)

我还在我的终端(bash 和 tmux)中使用 vim 绑定,并且一些命令(如“less”)也使用 vim 绑定。我的自定义在那里不起作用,所以我需要记住我的自定义以及默认键绑定,这很不方便。

如何在 vim 之外自定义键绑定(例如:在 bash、tmux 和 less 中)?

【问题讨论】:

  • 那么,您的问题是如何自定义其他所有工具/操作系统/终端以具有与 Vim 相同的绑定?如果是这样,请删除此问题并询问有关特定工具和特定操作系统的特定问题

标签: vim terminal


【解决方案1】:

尽管许多实用程序声称实现了 Vim 和/或 Emacs 键绑定,但它们实际上并没有在实现中涉及 Vim 或 Emacs。我不了解 Emacs,但 Vim 不提供任何类型的通用密钥管理库,因此即使想从其他程序中使用 Vim 也无法使用。

Tmux 和 Less 都有自己完全独特的密钥管理系统。它们都有据可查。一旦确定了所需的绑定,就可以将它们保存在配置文件中。 (分别为.tmux.conf.less.less实际上是lesskey创建的二进制文件;.tmux.conf是一个文本文件。)

Bash 使用 Readline 库,这是一个通用库,也被许多控制台应用程序使用。您可以使用单个配置文件自定义所有(或至少大多数)基于 readline 的实用程序。 (通常是.inputrc。)

上面提到的配置文件在你的主目录中。大多数实用程序还将参考(或将回退到)/etc 目录中具有相似名称的系统范围配置文件。实用程序通常具有命令行参数,可让您使用不同的配置文件;这对调试很有用。

对于真正详细的信息,您可能会在您的系统上找到相应的联机帮助页。所以你可以试试,例如

man bash
man less
man lesskey
man readline
man tmux

Bash 和 Readline 还应该有 info 页面,这样可以更容易导航。并非所有发行版都默认安装文档文件;您可能需要安装关联的 doc 软件包。例如,在 Ubuntu 和 Debian 上,您将需要 bash-docreadline-doc 软件包。

【讨论】:

  • @D.BenKnoble:对,我忘了补充。谢谢 现在添加它,带有一些注释。
【解决方案2】:

对于使用 readline 的应用程序,您可以在 ~/.inputrc 中自定义它们的键绑定。

set keymap vi-insert
set keymap vi-command
"\C-h": beginning-of-line
"\C-l": end-of-line
# Line navigation in insert mode.
bind -m vi-insert "\C-h":beginning-of-line
bind -m vi-insert "\C-l":end-of-line
# Line navigation in command mode (after hitting ESC).
bind -m vi-command "\C-h":beginning-of-line
bind -m vi-command "\C-l":end-of-line

运行bind -f ~/.inputrc重新加载你的inputrc文件

现在,您可以使用 Ctrl+h 和 Ctrl+l 分别移动到行首或行尾。

此链接包含您可以在映射中使用的所有 readline 命令: https://www.gnu.org/software/bash/manual/html_node/Bindable-Readline-Commands.html

【讨论】:

  • 您必须使用变体在终端中绑定到普通模式
  • 你能提供一个如何在普通模式下绑定的例子吗?
猜你喜欢
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多