[英]Can I map Alt key in Vim?
我试图通过将以下行添加到.vimrc
来将 <Alt+D> 映射到 <Ctrl+D> ,但它不起作用。 我检查了 .vimrc 是由 Vim 加载的。
map <Alt-D> <CD>
这个映射有错误吗?
对于那里的 Mac 用户:对于映射 ALT+hjkl,请改用生成的真实字符(在 INSERT 模式下找出使用该组合的字符),例如使用我的键盘我得到:
<ALT+j> ==> ª
<ALT+k> ==> º
等等。 在 StackOverflow 上找到的解决方案。
我用它来用 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 :)
Dylan_Larkin 的附录(2019 年):要在 Mac 上运行,必须在Terminal->Preferences->Keyboard中关闭“ Use Option as Meta Key ”
更新 09/2021
我最近从“英式”键盘切换到“ABC - 扩展” ,并注意到此配置无法按预期工作。 作为替代方案,我映射了<up>
和<down>
键来执行相同的操作(我猜,这也解决了这个问题的其他答案中解释的大部分复杂性):
nnoremap <down> :m .+1<CR>==
nnoremap <up> :m .-2<CR>==
inoremap <down> <Esc>:m .+1<CR>==gi
inoremap <up> <Esc>:m .-2<CR>==gi
vnoremap <down> :m '>+1<CR>gv=gv
vnoremap <up> :m '<-2<CR>gv=gv
对于初学者来说,这也是一个很好的方式来改变使用箭头的习惯,而是学习更有效的 Vim 运动方式来移动代码。 ;)
您可以完成过渡映射<left>
和<right>
以在选项卡之间快速移动:
nnoremap <left> gT
nnoremap <right> gt
或者你喜欢的任何东西(甚至是残酷的<NOP>
,就像我在旅程开始时所做的那样)。
:help key-notation
描述了需要使用什么格式来映射不同的键。 在 alt 的情况下,您可以使用<A-
或<M-
。 所以你的映射将是
map <M-d> <C-d>
我还建议使用:map
的nore
变体(例如noremap
),除非您明确希望允许重新评估右侧的映射。
我不确定是否“可能”了。 请阅读下面的更新。
是的,你甚至可以在终端 vim 中,但没有真正的包罗万象的答案。 您基本上必须遵循两个步骤:
确保存在<Md>
符号,并准确映射终端输入的内容( ^[
是转义字符):
$ cat ^[d $ " in your .vimrc execute "set <Md>=\ed" " you have to use double quotes!
将某些内容映射到您新“创建”的组合:
noremap <Md> :echo "md works!"<cr>
了解它是如何工作的,您可以将此“技巧”扩展到其他“奇怪”组合,例如,我正在使用白蚁,而 vim 无法识别<S-F1>
,使用 cat 我得到^[[1;2P
. 然后,在我的 vimrc 中: execute "set <S-F1>=\e[1;2P"
,然后我可以将它映射到任何东西。
注意:我不知道为什么,但是对于使用\<Esc>
代替\e
的某些人来说。
更新(2016 年 2 月)
根据您的终端运行的 terminfo,也许您可以...在大多数终端中,例如,“alt + h”映射到^[h
,即:“escape + h”。 所以它可以覆盖键。 我刚刚(再次)尝试过,它似乎可以工作,但我相信这是一个非常错误且容易出错的实现。
尽管如此,对于足够勇敢的人来说,这里有一个实验性插件:
在 Mac OSx 上的 Vim 中映射 Alt 键:
首先查看终端发送给 vim 的关键代码:
$ sed -n l
^[[1;9D
在上面的示例中,我运行命令并按下Alt + Left 。
^[[1;9D
是发送到 vim 的转义序列,因此我们可以将其用于映射。
map <Esc>[1;9D
利用:
map <A-D> <C-D>
请参阅:help key-notation
。
我的终端会产生^[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 键映射。
您的终端可能无法“正确”传输 Alt-D。 您可以使用 CV 将实际的转义序列发送到 Vim 并使用它来创建映射。 即,编辑您的.vimrc 并通过键入以下序列“CV Alt-D”替换实际的,这样您的vimrc 中就会有正确的转义序列。 如果您的终端不向 vim 发送任何内容,那将无法正常工作。
您好,经过多年在 mac 上测试上述所有内容后没有好的解决方案,我一直在寻找。
这是我的解决方案:
要创建包含 Alt 的组合击键,您必须在首选项 > 键盘中声明组合并在 vim 设置文件中使用该组合(检查使用选项作为元键)。
输出必须是不寻常的字符(例如没有a
),这样您就不会覆盖常规字符。
在下面的示例中,您应该能够使用 ALT-Up 非常灵活。
vi 设置:
mac设置:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.