在Vim中映射向左Alt键?


12

我可以使用或按来映射组合键Right Alt+ 。但是我无法映射密钥。Left Arrow<a-left><m-left>Left Alt

有没有办法做到这一点?

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

Answers:


14

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

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

确切的实现方式将取决于您是在谈论在X中还是在Linux控制台中还是在其他环境中使用Vim。我假设您正在谈论在X中使用它。

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

    xmodmap -e "remove Mod1 = Alt_R" -e "add Mod3 = Alt_R"
    
  2. 我使用终端urxvt。它允许在Xresources类型的文件中定义键绑定。您可以在〜/ .config / Xresources中完成;我在〜/ .config / app-defaults / URxvt中执行此操作。我会在该文件中放入这样的行(确切的语法对放入的文件敏感):

    URxvt.keysym.Mod3-Left:    \033<RAlt-Left>
    

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

  3. 在您的〜/ .vimrc中,输入以下内容:

    set t_Ff=^[<RAlt-Left>
    

这里的'^ ['是一个转义字符。其他每个字符(“ <”,“ R”,“ A”等)都是它们自己。使用vim的“ literal”键前缀,后跟一个转义符,以输入'^ ['(我忘记了默认情况下“ literal”键是什么-也许还有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

也可以直接执行以下操作:

    map ^[<RAlt-Left> whatever-vim-keys-you-want-it-mapped-to

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

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


这也适用于gvim吗?
Glyph

我发现这特别有帮助。我使用lxterminal并想在vim中映射我的alt键。在终端中,当我键入Ctrl-V然后输入所需的组合键(例如Alt-T)时,它会吐出^ [t。我在.vimrc而不是<At>中使用它来执行映射(^ [当然是单个转义字符),并且它执行得很完美。(^ [^ T还可以正确绑定Ctrl + Alt + T)
elynnaie 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.