我可以在Vim中映射Alt键吗?
我试图将下面的一行添加到.vimrc,但它不起作用。我检查了。vimrc是由Vim加载的我可以在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”替换实
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)
输出必须是不寻常的字符(例如,noa
),这样您就不会覆盖常规字符
在下面的示例中,您应该能够使用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˙nmapnmap˚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>