我该如何映射:E
到:Explore
?我已经安装了一个扩展,E464: Ambiguous use of user-defined command
如果我:E
现在这样做,但我的手指不会忘记命令!
我试过了map :E :Explore
,但这很难看,因为它使访问其他命令变得困难.
我试过这些:
cmap :E<CR> :Explore<CR>
cmap :E^M :Explore^M
Run Code Online (Sandbox Code Playgroud)
(其中^M
= control-v + enter)但这些不起作用,除非我真的非常快速地输入.
Nik*_*vda 35
:E
通常就足够了如果:Explore
是唯一定义的命令以一个开头的E
.您显然已定义了多个此类命令,因此:E
不明确并导致错误.
:cmap
导致立即文字替代,从而产生不必要的副作用.一个稍微好一些的替代方案:cabbrev
,可用于定义命令模式的缩写:
cabbrev E Explore
Run Code Online (Sandbox Code Playgroud)
这会触发以下EEnter或ESpace.前者是需要的,因为键入:EEnter将调用:Explore
,但后者在命令模式下再次具有副作用.
为了:E
正确别名:Explore
,必须将其定义为单独的命令:
command! E Explore
Run Code Online (Sandbox Code Playgroud)
但是,:command E
列出所有以...开头的已定义命令E
,会显示:E
并:Explore
具有不同的属性.例如,它不可能执行,:E ~
因为:E
不接受任何参数.此外,与:Explore
,:E
不自动完成目录.
要弥补这些不足,:E
必须以完全相同的方式定义:Explore
.执行:verbose command Explore
显示:Explore
定义的脚本的位置; :E
然后可以以相同的方式定义,增加<args>
:
command! -nargs=* -bar -bang -count=0 -complete=dir E Explore <args>
Run Code Online (Sandbox Code Playgroud)
虽然可以从提供的信息中推断出大部分属性:command Explore
,但仍然存在差异,例如-bar
在这种情况下.
NB如果:Explore
和:Example
已定义,:Exp
并且:Exa
是可以使用的最短的明确命令.:E
如上所述,显式别名为其中一个,会覆盖Vim的默认行为并允许消除歧义.但是,:Ex
仍然会含糊不清.