我可以在Vim中映射Alt键吗?

我试图映射为添加到.vimrc下面的行,但它不起作用。 我检查了.vimrc是由Vim加载的。

map <Alt-D> <CD>

这个映射有没有错误?

到Mac用户那里:为了映射ALT + hjkl,使用代替生成的真实字符(在INSERT模式下找出使用组合的那个字符),例如用我的键盘得到:

 <ALT+j> ==> ª <ALT+k> ==> º 

等等。 在StackOverflow上find解决scheme。

我用这个上下移动ALT + K \ j,在我的.vimrc上使用这个:

 nnoremap ª :m .+1<CR>== nnoremap º :m .-2<CR>== inoremap ª <Esc>:m .+1<CR>==gi inoremap º <Esc>:m .-2<CR>==gi vnoremap ª :m '>+1<CR>gv=gv vnoremap º :m '<-2<CR>gv=gv 

如这里所解释的。

希望它是有用的,享受Vim 🙂

:help key-notation描述了需要使用哪种格式来映射不同的密钥。 在alt的情况下,可以使用<A-<M- 。 所以你的映射将是

 map <Md> <Cd> 

我还build议使用:map (例如, noremap )的nore变体,除非你明确地想要允许右边的映射重新评估。

我不确定是否“可能”了。 请阅读下面的更新。

是的,你甚至可以在vimterminal,但是没有什么真正的答案。 你基本上必须遵循两个步骤:

  1. 确保<Md>符号存在,并准确地映射您的terminalinput( ^[是转义字符]):

     $ cat ^[d $ " in your .vimrc execute "set <Md>=\ed" " you have to use double quotes! 
  2. 将某些东西映射到您最近创build的组合:

     noremap <Md> :echo "md works!"<cr> 

理解它是如何工作的,你可以扩展这个“诡计”到其他“奇怪”的组合,例如,我正在使用白蚁,VIM不识别<S-F1> ,使用猫我得到^[[1;2P 。 然后,在我的vimrc中: execute "set <S-F1>=\e[1;2P" ,然后我可以将其映射到任何东西。

注意:我不知道为什么,但对于一些使用\<Esc>而不是\e


更新(2016年2月)

根据您的terminal运行的terminfo,也许您可​​以……在大多数terminal中,例如,“alt + h”被映射到^[h ,即:“escape + h”。 所以它可以覆盖键。 我刚刚尝试(再次),似乎工作,但我相信这是一个非常容易出错和容易出错的实现。

尽pipe如此,勇敢的,这是一个实验性的插件:

在Mac OSx中在Vim中映射Alt键:

首先查看您的terminal发送给vim的键码:

 $ sed -nl ^[[1;9D 

在上面的例子中,我运行了命令并按下了Alt + Left

^[[1;9D是发送给vim的转义序列,所以我们可以将其用于我们的映射。

 map <Esc>[1;9D 

使用:

 map <AD> <CD> 

请参阅:help key-notation

您的terminal可能无法正确传输Alt-D。 你可以使用CV实际得到实际的转义序列发送给Vim,并用它来创build你的映射。 也就是说,编辑你的.vimrc文件,通过input下面的序列“CV Alt-D”来replace实际的文件,这样你的vimrc中就会有正确的转义序列。 如果你的terminal不发送任何东西给vim,这将不起作用。

我的terminal会产生^[x命令(例如alt-x)。 Vim里面有什么工作是vim.wikia.com的这个小脚本:

 for i in range(97,122) let c = nr2char(i) exec "map \e".c." <M-".c.">" exec "map! \e".c." <M-".c.">" endfor 

添加到.vimrc来修复所有的ALT键映射。