我能够用或映射组合键Right Alt+ 。但是我无法映射键。Left Arrow<a-left>
<m-left>
Left Alt
有没有办法做到这一点?
编辑:
只是为了清楚起见,<a-left>
意思是Alt+ Left Arrow。
这里重要的问题是,从 Vim 中的键映射的角度来看Left Alt, 和之间有什么区别?Right Alt
答案1
如果您:help key-notation
在 vim 中执行此操作,您将看到 Vim 唯一识别的修饰符是 shift、control、alt/meta(视为同义词)和 Mac 命令键。您可以轻松地使用 xmodmap 将右 alt 键映射到 Vim 识别的新修饰符,但也许您当前没有使用这些修饰符。(我不知道是否有可能让 Linux 系统将 Mac 命令键修饰符表示为 Vim 所看到的。)还有其他 X 识别的修饰符:Mod4、Hyper 等等,但看起来 Vim 只是看不到它们,或者至少不能绑定它们。
另一个选项是安排 RightAlt-Left Arrow 生成特定的按键序列,例如 Esc-[MyUniqueGarbageHere。这当然是可行的,然后您可以告诉 Vim 将其绑定到您喜欢的任何操作,这与左 alt 键绑定的操作不同。这样做的缺点是您需要为每个 RightAlt+Key 组合单独执行此操作。但如果您只想对几个键执行此操作,这是非常可行的。
具体如何实现取决于您是在 X 中还是在 Linux 控制台中,还是在其他环境中使用 Vim。我假设您是在 X 中使用它。
使用 xmodmap 将 RightAlt 绑定到 Mod3。安排在您的 X 会话启动时运行一次。某些发行版已经有一个 /etc/X11/xinit/xinitrc 文件,该文件将在特定位置加载包含 xmodmap 命令的文件。
xmodmap -e "remove Mod1 = Alt_R" -e "add Mod3 = Alt_R"
我使用终端 urxvt。它允许在 Xresources 类型的文件中定义键绑定。您可以在 ~/.config/Xresources 中执行此操作;我在 ~/.config/app-defaults/URxvt 中执行此操作。我会在该文件中放入如下一行(确切的语法取决于您将其放入哪个文件):
URxvt.keysym.Mod3-Left: \033<RAlt-Left>
现在启动一个新终端,输入 ctrl-V,然后输入 RightAlt+Left。您应该在命令行中看到字符 ^[[<RAlt-Left>。它起作用了吗?很好。
在你的 ~/.vimrc 中输入:
set t_Ff=^[<RAlt-Left>
这里的 '^[' 是一个转义字符。其他每个字符('<'、'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
也可以直接这样做:
map ^[<RAlt-Left> whatever-vim-keys-you-want-it-mapped-to
不过,我发现使用空闲终端条目的技术工作得更加可靠。
我在这里做了很多假设:您使用的是 Linux、X 等等。如果您使用的是不同于 urxvt 的终端程序,它可能会提供或可能不会提供足够强大的键绑定技术来完成我所描述的操作。如果您选择不太奇特的键,您仍然可以执行我在此处描述的操作。例如,您可以将 RAlt-Left 绑定到 F21,然后从那里开始。请告诉我们您的要求。