【问题标题】:Map :E to :Explore in command mode?在命令模式下将 :E 映射到 :Explore?
【发布时间】:2013-01-18 00:29:00
【问题描述】:

如何将:E 映射到:Explore?如果我现在执行:E,我已经安装了一个指向E464: Ambiguous use of user-defined command 的扩展,但我的手指不会忘记命令!

我尝试了map :E :Explore,但这很难看,因为它使访问其他命令变得困难。

我试过这些:

cmap :E<CR> :Explore<CR>
cmap :E^M :Explore^M

(其中^M = control-v + enter)但这些不起作用,除非我真的非常快地按 enter。

【问题讨论】:

    标签: vim


    【解决方案1】:

    :E 通常就足够了,就像:Explore 是唯一以E 开头的已定义命令一样。您显然定义了多个此类命令,因此 :E 不明确并导致错误。

    :cmap 会导致立即的文字替换,因此会产生不必要的副作用。一个稍微好一点的替代方案是:cabbrev,它可以用来定义命令模式的缩写:

    cabbrev E Explore
    

    这会在 EEnterESpace 之后触发。前者是需要的,因为键入 :EEnter 将调用 :Explore,但后者在命令模式下再次具有副作用。

    为了使:E 正确别名为:Explore,必须将其定义为单独的命令:

    command! E Explore
    

    但是,:command E 列出了所有以 E 开头的已定义命令,表明 :E:Explore 具有不同的属性。例如,不可能执行:E ~,因为:E 不接受任何参数。此外,与:Explore 不同,:E 不会自动完成目录。

    要弥补这些缺陷,:E 的定义方式必须与 :Explore 完全相同。执行:verbose command Explore会显示定义:Explore的脚本的位置; :E 然后可以用同样的方式定义,加上&lt;args&gt;:

    command! -nargs=* -bar -bang -count=0 -complete=dir E Explore <args>
    

    虽然可以从:command Explore 提供的信息中推断出大部分这些属性,但仍可能存在差异,例如在本例中为-bar

    注意如果定义了:Explore:Example,则:Exp:Exa 是可以使用的最短的明确命令。如上所述,将 :E 显式别名为其中之一,会覆盖 Vim 的默认行为并允许消除歧义。但是,:Ex 仍然是模棱两可的。

    【讨论】:

    • 另一种快速打开资源管理器的方法是使用:e.。这将:Explore 当前目录。这还有一个好处,就是不需要 shift 键。
    • @PeterRincker Neat,但用于完全不同的用例。
    • 对于完整的 n00b,将 command! E Explore 放入您的 ~/.vimrc 文件中,然后 :E 将正确地别名为 :Explore。
    猜你喜欢
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多