我可以在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,但是没有什么真正的答案。 你基本上必须遵循两个步骤:
-
确保
<Md>
符号存在,并准确地映射您的terminalinput(^[
是转义字符]):$ cat ^[d $ " in your .vimrc execute "set <Md>=\ed" " you have to use double quotes!
-
将某些东西映射到您最近创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键映射。