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

时间:2011-09-21 14:00:31

标签: vim

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

map <Alt-D> <C-D>

此映射中是否有错误?

9 个答案:

答案 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中,但没有真正的捕获所有答案。你基本上必须遵循两个步骤:

  1. 确保<M-d>符号存在,并准确映射终端输入(^[是转义字符):

    $ cat
    ^[d
    $
    
    " in your .vimrc
    execute "set <M-d>=\ed"
    " you have to use double quotes!
    
  2. 将某些内容映射到您新创建的组合:

    noremap <M-d> :echo "m-d works!"<cr>
    
  3. 了解它是如何工作的,你可以将这个“技巧”扩展到其他“奇怪”组合,例如,我使用的是白蚁,而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)

作为针对Mac用户的Bruno回答的后续操作,请尝试确保将选项键映射到Esc+

这将使您在Vim中具有选项(A)键的“正常”行为。

例如,在iterm2的{​​{1}}下可以找到此选项:

iterm2 preferences screenshot

答案 7 :(得分:0)

在Mac上对上述各项进行了多年测试之后,您好,如果没有好的解决方案,我一直在搜索。

这是我的解决方法:

  

要创建包含Alt的组合击键,您必须在首选项>键盘中声明该组合,并在vim设置文件中使用该组合(请选中use选项作为元键)。

输出必须是不寻常的字符(例如,没有a),以便您不会覆盖常规字符。

在下面的示例中,您应该能够充分利用ALT-Up。

vim设置: vim setting

mac设置: mac setting

答案 8 :(得分:0)

通过在 vim 编辑器中输入以下命令来找出键映射

:help key-notation

它将显示所有的键映射。

enter image description here

在我的 ubuntu 系统中,Alt 是 。您的版本映射可能不同。如果您也有相同的映射,那么以下应该可以工作。

map <M-D> <C-D>