为什么这个Vim映射不起作用?

时间:2013-09-04 20:46:14

标签: vim

noremap :hsp :botright new
noremap :vsp :botright vnew

“不是编辑器命令:hsp”

我可能在谷歌搜索错误的东西,但我找不到很多关于别名vim命令的结果。我可以找到大量关于将键映射到命令的信息,比如我的选项卡:

noremap <C-t> :tabnew<CR> 

但找不到映射到其他命令的命令。

4 个答案:

答案 0 :(得分:3)

您正在做的是使用映射模拟命令。你说当你在正常模式下按下4个键:hsv时,它应该输出键:botright new(需要<CR>才能运行,正如其他人所说的那样),但它实际上并没有发出命令hsv。您可以使用用户命令(:h user-commands)创建实际命令。但这些必须以大写字母开头。

:command Hsp botright new
:command Vsp botright vnew

现在您可以输入:Hsp并按Enter键以运行命令botright new

答案 1 :(得分:1)

您是否尝试过命令缩写?

ca hsp botright new
ca vsp botright vnew

您必须通过之后按空格键来初始化缩写的扩展。根据全局vim配置,只有在按下enter时,扩展也会自动发生。

答案 2 :(得分:0)

使用相同的映射,我无法使用我的vim(v7.4)获取Not an editor command: hsp错误消息。

您的映射工作正常,但最后没有<cr>,因此当您在正常模式下按:hsp时,您的映射将切换到命令行模式,并将映射的命令放在那里,而不执行它。您必须手动按Enter

@ XZS的答案有效,但请记住它是缩写(ab),而不是映射。 ab不是命令别名,它与映射不完全相同。例如,您必须在hsp之后按另一个键(如空格)来触发ab。另外,你不能用一些特殊键,这将是ab的另一个限制。

命令映射有c(nore)map

e.g。你可以:

cnoremap hsp botright new

使用上一行,与原始行相同,您必须手动按Enter,如果您希望执行该行,则需要在行末添加<CR>

我想如果我这样做,我会创建映射。

答案 3 :(得分:0)

创建命令别名可能很棘手:

  • 使用简单的cabbrev和/或cmap会导致扩展和映射在意外的地方触发,例如在/搜索期间和文件名中间。
  • cmap在输出到屏幕时会有明显的延迟,这就是经常使用cabbrev的原因。

但是,有几种方法可以创建正确的别名:

  • 通过:command创建命令。
    • e.g。 command W w
    • 命令的第一个字母必须是大写字母
    • 必须根据别名的需要提供-nargs-bar-complete-range选项
  • 表达式:cabbrev以防止缩写在适当的位置扩展。
    • 表达式映射使用<expr>选项
    • 验证getcmdtype()等于:
    • 通过getcmdline()getcmdpos()
    • 验证缩写位于命令行的开头
    • e.g。 cnoreabbrev <expr> W getcmdtype() == ':' && getcmdline() ==# 'W' ? 'w' : 'W'
  • 通过Hari Krishna Dara的cmdalias.vim插件使用:Alias
    • e.g。 Alias W w
    • 在封面下使用类似于上述技术的表达式cabbrev