noremap :hsp :botright new
noremap :vsp :botright vnew
“不是编辑器命令:hsp”
我可能在谷歌上搜索错误的东西,但我找不到很多关于别名 vim 命令的结果。我可以找到大量有关将键映射到命令的信息,例如我的选项卡:
noremap <C-t> :tabnew<CR>
但是找不到映射到其他命令的命令。
noremap :hsp :botright new
noremap :vsp :botright vnew
“不是编辑器命令:hsp”
我可能在谷歌上搜索错误的东西,但我找不到很多关于别名 vim 命令的结果。我可以找到大量有关将键映射到命令的信息,例如我的选项卡:
noremap <C-t> :tabnew<CR>
但是找不到映射到其他命令的命令。
您正在做的是使用映射模拟命令。您是说当您:hsv
在正常模式下按下 4 个键时,它应该输入这些键:botright new
(正如其他人所说,这需要 a<CR>
才能运行),但实际上并没有发出 command hsv
。您可以使用用户命令 ( :h user-commands
) 创建实际命令。但是,这些必须以大写字母开头。
:command Hsp botright new
:command Vsp botright vnew
现在您可以键入:Hsp
并按回车键来运行命令botright new
。
你试过命令缩写吗?
ca hsp botright new
ca vsp botright vnew
您必须在之后按空格键来初始化缩写的扩展。根据全局 vim 配置,在按下 enter 时也会自动进行扩展。
创建命令别名可能很棘手:
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'
:Alias
的cmdalias.vim插件使用Alias W w
cabbrev
在幕后使用类似于上述技术的表达式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>
在行尾添加。
我想如果我这样做,我会创建映射。