地图:E到:在命令模式下探索?

时间:2013-01-16 20:41:34

标签: vim

如何将: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)但这些不起作用,除非我真的非常快地输入。

1 个答案:

答案 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仍然不明确。