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

“不是编辑器命令:hsp”

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

noremap <C-t> :tabnew<CR> 

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

4

4 回答 4

3

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

:command Hsp botright new
:command Vsp botright vnew

现在您可以键入:Hsp并按回车键来运行命令botright new

于 2013-09-04T21:35:30.387 回答
1

你试过命令缩写吗?

ca hsp botright new
ca vsp botright vnew

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

于 2013-09-04T20:49:13.670 回答
0

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

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

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

  • 通过创建命令:command
    • 例如command W w
    • 命令的第一个字母必须是大写字母
    • 必须根据别名的需要提供-nargs, -bar,-complete和options-range
  • :cabbrev防止缩写在适当位置扩展的 表达式。
    • 表达式映射使用<expr>选项
    • 验证getcmdtype()等于:
    • getcmdline()通过或验证缩写是否在命令行的开头getcmdpos()
    • 例如cnoreabbrev <expr> W getcmdtype() == ':' && getcmdline() ==# 'W' ? 'w' : 'W'
  • 通过Hari Krishna Dara :Aliascmdalias.vim插件使用
    • 例如Alias W w
    • cabbrev在幕后使用类似于上述技术的表达式
于 2013-09-05T13:32:32.580 回答
0

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

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

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

c(nore)map用于命令映射。

例如,您可以:

cnoremap hsp botright new

上面一行,和你原来的一样,你必须手动按Enter,如果你想执行它,你需要<CR>在行尾添加。

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

于 2013-09-04T21:15:39.013 回答