我尝试映射为将以下行添加到.vimrc,但它不起作用。我查了.vimrc是由Vim加载的。
map <Alt-D> <C-D>
此映射中是否有错误?
答案 0 :(得分:117)
对于Mac用户:为了映射ALT + hjkl,请使用生成的真实字符(在INSERT模式下找出使用该组合的字符),例如我的键盘:
<ALT+j> ==> ª
<ALT+k> ==> º
等等。 解决方案在StackOverflow上找到here。
我用它在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
解释here。
希望它有用,享受Vim:)
ADDENDUM BY Dylan_Larkin(2019):为了在Mac上运行,“使用选项作为元键”必须在终端中关闭 - &gt ;首选项&GT;键盘的
答案 1 :(得分:39)
:help key-notation
描述了需要使用哪种格式来映射不同的密钥。对于alt,您可以使用<A-
或<M-
。所以你的映射将是
map <M-d> <C-d>
我还建议使用nore
的{{1}}变体(例如:map
),除非您明确希望允许右侧重新评估映射。
答案 2 :(得分:28)
我不确定是否“可能”了。请阅读以下更新。
是的,你甚至可以在终端vim中,但没有真正的捕获所有答案。你基本上必须遵循两个步骤:
确保<M-d>
符号存在,并准确映射终端输入(^[
是转义字符):
$ cat
^[d
$
" in your .vimrc
execute "set <M-d>=\ed"
" you have to use double quotes!
将某些内容映射到您新创建的组合:
noremap <M-d> :echo "m-d works!"<cr>
了解它是如何工作的,你可以将这个“技巧”扩展到其他“奇怪”组合,例如,我使用的是白蚁,而vim无法识别<S-F1>
,使用cat我得到{{1 }}。然后,在我的vimrc中,我执行:^[[1;2P
,然后我可以将它映射到任何东西。
注意:我不知道为什么,但对于使用execute "set <S-F1>=\e[1;2P"
的某些人来说,而不是\<Esc>
。
更新(2016年2月)
根据您的终端运行的terminfo,也许您可以...在大多数终端中,例如,“alt + h”映射到\e
,即:“escape + h”。所以它可以覆盖密钥。我刚刚尝试(再次)它似乎工作,但我相信这是一个非常错误和容易出错的实现。
然而,对于勇敢的人来说,这是一个实验插件:
答案 3 :(得分:18)
在Mac OSx上的Vim中映射Alt键:
首先查看终端发送给vim的密钥代码:
$ sed -n l
^[[1;9D
在上面的例子中,我运行了命令并按 Alt + Left 。
^[[1;9D
是发送到vim的转义序列,因此我们可以将其用于我们的映射。
map <Esc>[1;9D
答案 4 :(得分:10)
使用:
map <A-D> <C-D>
请参阅:help key-notation
。
答案 5 :(得分:8)
您的终端可能无法“正确”传输Alt-D。您可以使用C-V实际获取发送给Vim的实际转义序列并使用它来创建映射。即,编辑你的.vimrc 并通过键入以下序列“C-V Alt-D”来替换实际值,这样您将在vimrc中拥有正确的转义序列。如果您的终端没有向vim发送任何内容,那将无效。
答案 6 :(得分:1)
答案 7 :(得分:0)
在Mac上对上述各项进行了多年测试之后,您好,如果没有好的解决方案,我一直在搜索。
这是我的解决方法:
要创建包含Alt的组合击键,您必须在首选项>键盘中声明该组合,并在vim设置文件中使用该组合(请选中use选项作为元键)。
输出必须是不寻常的字符(例如,没有a
),以便您不会覆盖常规字符。
在下面的示例中,您应该能够充分利用ALT-Up。
vim设置:
mac设置:
答案 8 :(得分:0)