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

我可以在Vim中映射Alt键吗?,vim,Vim,我试图将下面的一行添加到.vimrc,但它不起作用。我检查了。vimrc是由Vim加载的 map 此映射是否有错误?使用: map <A-D> <C-D> map 请参见:help key notation:help key notation描述映射不同键需要使用的格式。在alt的情况下,您可以使用您的终端可能无法“正确”传输alt-D。您可以使用C-V将实际的转义序列发送到Vim,并使用它创建映射。编辑你的.vimrc 并通过键入以下序列“C-V Alt-D”替换实

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

map

此映射是否有错误?

使用:

map <A-D> <C-D>
map

请参见
:help key notation

:help key notation
描述映射不同键需要使用的格式。在alt的情况下,您可以使用
您的终端可能无法“正确”传输alt-D。您可以使用C-V将实际的转义序列发送到Vim,并使用它创建映射。编辑你的.vimrc

并通过键入以下序列“C-V Alt-D”替换实际值,以便在vimrc中具有正确的转义序列。如果您的终端没有向vim发送任何信息,这将不起作用。

对于Mac用户:为了映射ALT+hjkl,请使用生成的真实字符(在插入模式下使用组合查找哪个字符),例如,我的键盘:

<ALT+j> ==> ª
<ALT+k> ==> º
堆栈溢出上的

我使用它在我的.vimrc上使用ALT+k\j上下移动行:

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
nnoremapª:m.+1==
nnoremapº:m.-2==
inoremapª:m.+1==gi
inoremap::m.-2==gi
vnoremapª:m'>+1gv=gv

vnoremap::m'在Mac OSx上映射Vim中的Alt键:

首先查看终端发送给vim的钥匙代码:

$ sed -n l
^[[1;9D 
在上面的示例中,我运行命令并按Alt+Left

^[[1;9D
是发送给vim的转义序列,因此我们可以使用它进行映射

map <Esc>[1;9D 
map[1;9D
我不确定是否“可能”。请阅读下面的更新

是的,您甚至可以在终端vim中使用,但没有真正的全面答案。您基本上必须遵循两个步骤:

  • 确保
    符号存在,并准确映射终端输入(
    ^[
    是转义字符):

    $cat
    ^[d]
    $
    “在你的房间里
    执行“set=\ed”
    “你必须使用双引号!
    
  • 将某些内容映射到新“创建”的组合:

    noremap <M-d> :echo "m-d works!"<cr>
    
    noremap:echo“m-d有效!”
    
  • 了解它的工作原理后,您可以将此“技巧”扩展到其他“奇怪”组合,例如,我使用的是白蚁,vim不识别
    ,使用cat I get
    ^[[1;2P
    。然后,在我的vimrc中,我执行:
    执行“set=\e[1;2P”
    ,然后我可以将其映射到任何对象

    注意:我不知道为什么,但是对于一些人来说,使用
    \
    代替
    \e
    是有效的


    更新(2016年2月)

    根据您的终端运行的终端,也许您可以…在大多数终端中,例如,“alt+h”被映射到
    ^[h
    ,即“escape+h”。因此它可以覆盖键。我刚刚(再次)尝试过,它似乎可以工作,但我相信它是一个非常有缺陷且容易出错的实现

    然而,对于足够勇敢的人,这里有一个实验性插件:


    我的终端将产生
    ^[x
    命令(例如,用于alt-x)。使其在Vim中工作的是以下小脚本:

    范围内i的
    (97122)
    设c=nr2char(i)
    exec“map\e.c.”
    exec“映射!\e”.c.“
    外循环
    

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

    你好,在mac上测试了多年之后,我一直在搜索

    以下是我的解决方案:

    要创建包含Alt的组合击键,您必须在preference>keyboard中声明组合,并在vim设置文件中使用该组合(选中use option as meta key)

    输出必须是不寻常的字符(例如,no
    a
    ),这样您就不会覆盖常规字符

    在下面的示例中,您应该能够使用ALT Up来创建vim

    vim设置:

    mac设置:

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

    这将为您提供Vim中选项(
    A
    )键的“正常”行为

    例如,在
    iterm2
    中,可以在
    Preferences>Profiles>Keys
    下找到此选项:


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

    :help key-notation
    
    它将显示所有键映射

    在我的UbuntuSystem for Alt中是这样的。可能是因为您的版本映射可能不同。如果您也有相同的映射,那么下面应该可以工作

    map <M-D> <C-D>
    
    map
    
    这似乎仍然不起作用。Alt+d将向Vim输入一个奇怪的字符,这与取消映射的情况相同。对我有效(我在Windows上使用
    gvim
    )这仍然没有任何效果。Alt+D input仍然向Vim输入一些奇怪的字符。这是一个单独的问题。您的终端正在向Vim发送一个多字节字符,Vim不知道如何将其解释为
    。您可能需要更改终端的设置,以便它将
    作为
    D
    @jamessan发送在iterm2上?您是在终端中使用vim,还是在gui版本(gvim、macvim)中使用vim?还请注意,如果映射运行后
    编码发生变化,您从Alt键中获得的内容可能与最初设置的内容不匹配。在插入模式下,按
    control+v
    ,然后按组合键
    Alt+d
    ,它应该插入
    ^[d
    。所以你最终得到了
    map^[d
    或你拥有的东西。请注意,键入
    ^[d
    做的不是同一件事。这正是我来这里的目的(Alt+HJKL移动拆分)!谢谢!使用
    cat
    可以很容易地找到它是哪个字符。只需键入
    cat
    ,然后在cat窗口中输入您想要的组合键。在我的mac上,找到alt+括号是“和”。这非常好,因为alt+HJKL可以在拆分之间移动,我的手指喜欢它!!
    nmap˙nmap‍nmap˚nmap∆ 这些精确映射在未来版本中可能无法按预期工作
    
    for i in range(97,122)
      let c = nr2char(i)
      exec "map \e".c." <M-".c.">"
      exec "map! \e".c." <M-".c.">"
    endfor
    
    :help key-notation
    
    map <M-D> <C-D>