Как переопределить команду в Vim? - PullRequest
11 голосов
/ 09 апреля 2010

В vim, в моем .vimrc, как я могу переопределить команду (т.е. e) как что-то еще? Я хочу переопределить :e * как :tabe *.

Ответы [ 3 ]

10 голосов
/ 09 апреля 2010

Я нашел способ сделать это. Смотрите Как отключить встроенную команду в vim . Из этого мы видим, что мы можем использовать cabbrev, чтобы изменить то, что делает команда. Для моих нужд cabbrev e tabe идеально.

Но мы можем обобщить это решение, чтобы сделать команды, начинающиеся с символов нижнего регистра, доступными для пользователей для пользовательских: используйте cabbrev для (пере) определения встроенной команды как пользовательской. Таким образом, мы можем переопределить как встроенные, так и определяемые пользователем команды.

Вот пример, который эквивалентен моему вышеупомянутому решению моей проблемы:

:command -nargs=+ E :tabe "<args>"
:cabbrev e E

Вот и все.

6 голосов

cnoreabbrev Обходной путь

Лучший обходной путь без плагина, который я видел до сих пор:

cnoreabbrev <expr> e getcmdtype() == ":" && getcmdline() == 'e' ? 'tabe' : 'e'

Если вы используете простое:

cnoreabbrev e E

в соответствии с предложением @Yktula нарушит вашу команду, если вы захотите сделать:

echo e f

который станет:

echo E f

вместо.


Как пояснил @pydave в комментариях, плагин cmdalias добавляет более простой интерфейс для создания безопасного псевдонима просто как:

:Alias e tabe

На момент написания плагин также использовал технику getcmdtype() == ":" для реализации своей функциональности.

1 голос
/ 09 апреля 2010

Насколько я понимаю, ты не можешь. Пользовательские команды должны иметь заглавную первую букву.

  :help :command

для получения дополнительной информации

...