在 Vim 中映射左 Alt 键?

Yog*_*ora 11 vim key-binding keymap

我能够映射组合键Right Alt+ Left Arrowwith<a-left>或 by <m-left>。但我无法映射Left Alt密钥。

有没有办法做到这一点?

编辑:
只是为了清楚<a-left>意味着Alt+ Left Arrow
这里的重要问题是Left AltRight Alt从 Vim 中的键盘映射的角度来看,它们之间有什么区别?

dub*_*jim 13

如果您:help key-notation在 vim 中这样做,您会看到 Vim 识别的唯一修饰符是 shift、control、alt/meta(视为同义词)和 Mac 命令键。您可以轻松地使用 xmodmap 将您的右 alt 键映射到 Vim 识别的新修饰符,但也许这些修饰符中没有一个是您当前未使用的。(我不知道是否有可能让 Linux 系统像 Vim 看到的那样表示 Mac 命令键修饰符。)还有其他的 X 识别修饰符:Mod4、Hyper 等等,但看起来 Vim 刚刚赢了看不到它们,或者至少不能绑定它们。

另一种选择是安排 RightAlt-Left Arrow 生成特定的键序列,例如 Esc-[MyUniqueGarbageHere。这当然是可行的,然后您可以告诉 Vim 将其绑定到您喜欢的任何操作,这与您的左 alt 键绑定的操作不同。这样做的缺点是您需要为每个 RightAlt+Key 组合单独执行此操作。但是如果你只是想针对几个key做这个,那是非常可行的。

具体如何实现取决于您是在谈论在 X 或 Linux 控制台中使用 Vim,还是在其他环境中使用 Vim。我假设您正在谈论在 X 中使用它。

  1. 使用 xmodmap 将 RightAlt 绑定到 Mod3。安排它在您的 X 会话开始时运行一次。一些发行版已经有一个 /etc/X11/xinit/xinitrc 文件,它将在包含 xmodmap 命令的特定位置加载文件。

    xmodmap -e "remove Mod1 = Alt_R" -e "add Mod3 = Alt_R"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我使用终端urxvt。它允许在 Xresources 类型的文件中定义键绑定。你可以在 ~/.config/Xresources 中完成;我在 ~/.config/app-defaults/URxvt 中完成。我会在该文件中放置这样一行(确切的语法取决于您将其放入哪个文件中):

    URxvt.keysym.Mod3-Left:    \033<RAlt-Left>
    
    Run Code Online (Sandbox Code Playgroud)

    现在启动一个新终端,输入 ctrl-V,然后输入 RightAlt+Left。您应该在命令行中看到字符 ^[[<RAlt-Left>。它有效吗?好的。

  3. 在你的 ~/.vimrc 中,输入:

    set t_Ff=^[<RAlt-Left>
    
    Run Code Online (Sandbox Code Playgroud)

这里的 '^[' 是单个转义字符。每个其他字符('<'、'R'、'A' 等)都是它们自己。使用 vim 的“文字”键前缀,后跟转义符,输入 '^['(我忘记了默认情况下的“文字”键是什么——也许还有 ctrl-V?) t_Ff 只是一个未使用的终端条目. 另一个是 t_Fg。您可以:set termcap在 vim中使用以查看分配了哪些终端条目,并且只需将 t_XX 用于一些未使用的 XX。按照上面显示的 .vimrc 行进行以下操作:

    map <t_Ff> whatever-vim-keys-you-want-it-mapped-to
    map! <t_Ff> whatever-vim-keys-you-want-it-mapped-to
Run Code Online (Sandbox Code Playgroud)

也可以直接执行:

    map ^[<RAlt-Left> whatever-vim-keys-you-want-it-mapped-to
Run Code Online (Sandbox Code Playgroud)

但是,我发现使用空闲终端条目的技术可以更可靠地工作。

我在这里做了很多假设:您使用的是 Linux、X 等。如果您使用的是与 urxvt 不同的终端程序,它可能会或可能不会提供足够强大的键绑定技术来执行我所描述的操作。如果您选择较少异国情调的键,您仍然可以执行我在此处描述的操作。例如,您可以安排 RAlt-Left 绑定到 F21,然后从那里开始。让我们知道您的要求是什么。