我尝试通过在.vimrc
中添加以下行将<Alt+D>映射到<Ctrl+D>,但它不起作用。 我已确认Vim已经加载了.vimrc
。
map <Alt-D> <C-D>
这个映射有错误吗?
我尝试通过在.vimrc
中添加以下行将<Alt+D>映射到<Ctrl+D>,但它不起作用。 我已确认Vim已经加载了.vimrc
。
map <Alt-D> <C-D>
这个映射有错误吗?
给Mac用户:如果要映射ALT+hjkl,请使用生成的实际字符(在插入模式下找出使用组合键生成哪个字符),例如,我的键盘可以得到:
<ALT+j> ==> ª
<ALT+k> ==> º
等等,解决方案在StackOverflow上找到了这里。
我在我的.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
如这里所解释的。
希望对您有用,享受Vim :)
备注(2019年)由Dylan_Larkin补充:在Mac上,必须在“终端->首选项->键盘”中将“使用Option作为Meta键”关闭。
更新于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>
来快速在选项卡之间移动:
您可以通过完成过渡映射 <left>
和 <right>
来快速在选项卡之间移动:
nnoremap <left> gT
nnoremap <right> gt
或者你喜欢什么(甚至像我一开始做的那样,使用了一个残酷的<NOP>
)。
cat
命令。只需在终端中输入cat
,然后在cat
窗口内按下想要查找的按键组合。我在我的Mac电脑上发现,alt键加方括号键会产生单引号和双引号符号。 - patchrailnmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
- John Moralessed -n l
查看<A-k>和<A-j>的输出。在我的情况下,<A-j>是∆
,而<A-k>是˚
。 - luk3thomasUse Option as Meta Key
或在 iTerm 配置文件中设置 ⌥ key to Esc+
时,会像传统 Linux/Unix 系统一样工作。因此,您不需要在 Vim 中将映射设置为 <^[j>
,只需将其设置为 <A+j>
或 <M+j>
即可正常工作。 - goetz:help key-notation
描述了映射不同键所需使用的格式。对于 alt 键,您可以使用 <A-
或 <M-
。因此,您的映射将是
map <M-d> <C-d>
我还建议使用 nore
变种的 :map
(例如,noremap
),除非您明确希望允许重新评估右侧进行映射。
我建议使用 noremap
替代 :map
,除非你想允许对于映射的右侧进行重新求值。
<A-d>
。你可能需要更改终端的设置,以便将 <A-d>
发送为 <Esc>d
。 - jamessan<A-j>
在IdeaVim中运行得很好。 - Richard我不确定现在是否“可能”。请阅读下面的更新。
是的,即使在终端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>
了解它的工作原理后,您可以将此“技巧”扩展到其他“奇怪”的组合上,例如,我正在使用Termite,而vim无法识别<S-F1>,使用cat我得到^[[1;2P。然后,在我的vimrc中,我执行:execute "set <S-F1>=\e[1;2P"
,然后就可以将其映射到任何内容了。
注意:我不知道为什么,但对于一些人来说,使用\<Esc>代替\e有效。
更新(2016年2月)
根据终端运行的terminfo设置不同,也许你可以...在大多数终端中,“alt + h”例如,被映射为^[h
,即:“escape + h”。所以它可能会覆盖键。我刚刚尝试了一下,似乎可以工作,但我认为这是一个非常有错误和易出错的实现。
尽管如此,对于勇敢的人,这里是一个实验性的插件:
<Esc>
然后 d
的效果和 <Alt>
+d
相同。此外,你可以像这里所述那样使用 Ctrl-v
和 <Esc>
来在一行内完成它。 - Sparhawk在Mac OSx上为Vim映射Alt键:
首先查看终端发送到Vim的按键代码:
$ sed -n l
^[[1;9D
在上面的例子中,我运行了命令并按下了Alt + Left键。
^[[1;9D
是发送到vim的转义序列,因此我们可以将其用于我们的映射。map <Esc>[1;9D
Option
键 (⌥
) 配置为 Esc+
在 iTerm2 中,我可以将 alt+q
映射到退出 vim:**`nnoremap q :qa!`**
- ryenus使用:
map <A-D> <C-D>
请参阅:help key-notation
。
gvim
) - Deqing我的终端会产生^[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 的组合按键,您必须在首选项 > 键盘中声明该组合,并在 vim 设置文件中使用该组合(检查使用选项作为元键)。
输出必须是一个不寻常的字符(例如不是 a
),以便您不会覆盖常规字符。
在下面的示例中,您应该能够使用 ALT-Up 退出 vim。
vim 设置:
mac 设置:
control+v
,然后按下你的组合键alt+d
,它应该会插入^[d
。所以最终你得到的是map ^[d <C-D>
或者其他什么的。请注意,直接打出^[d
并不能达到同样的效果。 - ReedAlt-d
按键,并执行了一个没有可见变化的操作(新建书签?)。找到你的操作系统系统设置->按键映射
工具,并删除所有与Alt-d
相关联的按键映射。同样,在你的终端设置->按键映射
中定义的按键绑定中也要这样做。现在,vim 就能接收你的Alt-d
了。 - Eric Leschinski