如何将:E
映射到:Explore
?如果我现在E464: Ambiguous use of user-defined command
,我已经安装了导致:E
的扩展程序,但我的手指不会忘记命令!
我尝试了map :E :Explore
,但这很难看,因为它会让访问其他命令变得困难。
我试过这些:
cmap :E<CR> :Explore<CR>
cmap :E^M :Explore^M
(其中^M
= control-v + enter)但这些不起作用,除非我真的非常快地输入。
答案 0 :(得分:35)
:E
是唯一以:Explore
开头的已定义命令,那么 E
通常就足够了。您显然已定义了多个此类命令,因此:E
不明确并导致错误。
:cmap
会立即引起字面替换,从而产生不必要的副作用。稍微好一点的替代方法是:cabbrev
,可用于定义命令模式的缩写:
cabbrev E Explore
这会触发 E Enter 或 E Space 。前者是理想的,因为键入: E Enter 将调用:Explore
,但后者在命令模式下再次出现副作用。< / p>
为了使:E
正确别名为:Explore
,必须将其定义为单独的命令:
command! E Explore
但是,: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>
虽然可以从:command Explore
提供的信息中推断出大多数这些属性,但仍然存在差异,例如-bar
。
N.B。如果定义了:Explore
和:Example
,则:Exp
和:Exa
是可以使用的最短的明确命令。如上所述,将:E
显式别名化为其中一个,会覆盖Vim的默认行为并允许消除歧义。但是,:Ex
仍然不明确。