Ответ 1
:E
обычно будет достаточным, как если бы :Explore
была единственной определенной командой, которая начиналась с E
. Очевидно, у вас есть несколько таких команд, поэтому :E
неоднозначно и приводит к ошибке.
:cmap
вызывает немедленную литеральную замену и, следовательно, имеет нежелательные побочные эффекты. Немного лучшей альтернативой является :cabbrev
, которая может использоваться для определения сокращений для командного режима:
cabbrev E Explore
Это вызывает следующие E Enter или E Space. Первое желательно, потому что ввод : E Enter будет вызывать :Explore
, но последний снова имеет побочные эффекты в командном режиме.
Чтобы :E
был должным образом сглажен до :Explore
, он должен быть определен как отдельная команда:
command! E Explore
Однако :command E
, в котором перечислены все определенные команды, начинающиеся с E
, показывает, что :E
и :Explore
имеют разные свойства. Например, невозможно выполнить :E ~
, потому что :E
не принимает никаких аргументов. Кроме того, в отличие от :Explore
, :E
не автозаполняет каталоги.
Чтобы устранить эти недостатки, :E
должен быть определен точно так же, как :Explore
. Выполнение :verbose command Explore
показывает местоположение script, в котором определено :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
все равно будет неоднозначным.