繁体   English   中英

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

[英]Can I map Alt key in Vim?

我试图通过将以下行添加到.vimrc来将 <Alt+D> 映射到 <Ctrl+D> ,但它不起作用。 我检查了 .vimrc 是由 Vim 加载的。

map <Alt-D> <CD>

这个映射有错误吗?

对于那里的 Mac 用户:对于映射 ALT+hjkl,请改用生成的真实字符(在 INSERT 模式下找出使用该组合的字符),例如使用我的键盘我得到:

<ALT+j> ==> ª
<ALT+k> ==> º

等等。 在 StackOverflow 上找到解决方案。

我用它来用 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

如此所述。

希望它有用,享受 Vim :)

Dylan_Larkin 的附录(2019 年):要在 Mac 上运行,必须在Terminal->Preferences->Keyboard关闭Use Option as Meta Key

更新 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>以在选项卡之间快速移动:

nnoremap <left> gT
nnoremap <right> gt

或者你喜欢的任何东西(甚至是残酷的<NOP> ,就像我在旅程开始时所做的那样)。

:help key-notation描述了需要使用什么格式来映射不同的键。 在 alt 的情况下,您可以使用<A-<M- 所以你的映射将是

map <M-d> <C-d>

我还建议使用:mapnore变体(例如noremap ),除非您明确希望允许重新评估右侧的映射。

我不确定是否“可能”了。 请阅读下面的更新。

是的,你甚至可以在终端 vim 中,但没有真正的包罗万象的答案。 您基本上必须遵循两个步骤:

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

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

     noremap <Md> :echo "md works!"<cr>

了解它是如何工作的,您可以将此“技巧”扩展到其他“奇怪”组合,例如,我正在使用白蚁,而 vim 无法识别<S-F1> ,使用 cat 我得到^[[1;2P . 然后,在我的 vimrc 中: execute "set <S-F1>=\e[1;2P" ,然后我可以将它映射到任何东西。

注意:我不知道为什么,但是对于使用\<Esc>代替\e的某些人来说。


更新(2016 年 2 月)

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

尽管如此,对于足够勇敢的人来说,这里有一个实验性插件:

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

首先查看终端发送给 vim 的关键代码:

$ sed -n l
^[[1;9D 

在上面的示例中,我运行命令并按下Alt + Left

^[[1;9D是发送到 vim 的转义序列,因此我们可以将其用于映射。

map <Esc>[1;9D 

利用:

map <A-D> <C-D>

请参阅:help key-notation

我的终端会产生^[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-D。 您可以使用 CV 将实际的转义序列发送到 Vim 并使用它来创建映射。 即,编辑您的.vimrc 并通过键入以下序列“CV Alt-D”替换实际的,这样您的vimrc 中就会有正确的转义序列。 如果您的终端不向 vim 发送任何内容,那将无法正常工作。

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

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

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

iterm2 偏好截图

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

:help key-notation

它将显示所有键映射。

在此处输入图像描述

在我用于 Alt 的 ubuntu 系统中,它是 <M-...>。 您的版本映射可能会有所不同。 如果您也有相同的映射,那么以下应该可以工作。

map <M-D> <C-D>

你好经过多年的测试,经过多年的测试,我一直在寻找。

这是我的解决方案:要创建包含Alt的组合击键,您必须在首选项>键盘中声明组合,并在vim设置文件中使用该组合(选中使用选项作为元键)。

输出必须是一个不寻常的字符(例如没有),这样你就不会覆盖常规字符。

在下面的示例中,您应该能够使用ALT-Up进行调整。

祝你有美好的一天

在此输入图像描述

在此输入图像描述

您好,经过多年在 mac 上测试上述所有内容后没有好的解决方案,我一直在寻找。

这是我的解决方案:

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

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

在下面的示例中,您应该能够使用 ALT-Up 非常灵活。

vi 设置:vim 设置

mac设置:mac设置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM