Псевдоним команды в vim - PullRequest
       1

Псевдоним команды в vim

139 голосов
/ 07 октября 2010

Vim - мой любимый текстовый редактор, когда я программирую, и поэтому я всегда сталкиваюсь с особенно раздражающей проблемой.

Часто, когда мне нужно быстро сохранить буфер и перейти к какой-то другой дополнительной задаче, я выполняю типичную

:w

Однако я - то, что похоже на более чем 50% времени - всегда удается заработать на этом :w.Естественно, vim кричит на меня, потому что W - недопустимая команда

E492: Not an editor command: W

Мой вопрос заключается в том, как можно псевдоним-двоеточие команды в vim .В частности, не могли бы вы привести пример, как псевдоним от W до w.

Мне известен процесс сопоставления ключей с некоторыми командами .К сожалению, это не то, что я ищу.

Ответы [ 7 ]

116 голосов
/ 07 октября 2010

Чтобы оставить завершение без изменений, попробуйте использовать

cnoreabbrev W w

, он заменит W в командной строке на w, но только в том случае, если за ним не следует и не предшествует символ слова, поэтому :W<CR> будет заменен :w<CR>, а :Write , (Обратите внимание, что это влияет на любые совпадающие команды, в том числе те, которые вы не ожидаете, например, команда :saveas W Z будет заменена на :saveas w Z, поэтому будьте осторожны с этим.)

Обновление

Вот как бы я написал это сейчас :

cnoreabbrev <expr> W ((getcmdtype() is# ':' && getcmdline() is# 'W')?('w'):('W'))

Как функция:

fun! SetupCommandAlias(from, to)
  exec 'cnoreabbrev <expr> '.a:from
        \ .' ((getcmdtype() is# ":" && getcmdline() is# "'.a:from.'")'
        \ .'? ("'.a:to.'") : ("'.a:from.'"))'
endfun
call SetupCommandAlias("W","w")

Это проверяет, что тип команды :, а команда W, так что это безопаснее, чем просто cnoreabbrev W w.

88 голосов
/ 07 октября 2010

При дополнительном поиске я обнаружил, что кто-то задал почти тот же вопрос , что и я.

:command <AliasName> <string of command to be aliased>

сделает свое дело.

Обратите внимание, что, как указывает Richo , команда пользователя должна начинаться с заглавной буквы.

19 голосов
/ 13 февраля 2014

Я считаю, что сопоставление клавиши ; с : было бы лучшим решением и повысило бы производительность при вводе других команд.

nnoremap ; :
vnoremap ; :
8 голосов
/ 22 мая 2012

Лучшее решение заключается в написании пользовательской функции для обработки сокращений, которые встречаются только в начале панели команд.

Для этого добавьте следующий файл vimrc или куда-либо еще.

" cabs - less stupidity                                                      {{{
fu! Single_quote(str)
  return "'" . substitute(copy(a:str), "'", "''", 'g') . "'"
endfu
fu! Cabbrev(key, value)
  exe printf('cabbrev <expr> %s (getcmdtype() == ":" && getcmdpos() <= %d) ? %s : %s',
    \ a:key, 1+len(a:key), Single_quote(a:value), Single_quote(a:key))
endfu
"}}}

" use this custom function for cabbrevations. This makes sure that they only
" apply in the beginning of a command. Else we might end up with stuff like
"   :%s/\vfoo/\v/\vbar/
" if we happen to move backwards in the pattern.

" For example:
call Cabbrev('W', 'w')

Несколько полезных сокращений из исходного материала , где я нашел этот материал:

call Cabbrev('/',   '/\v')
call Cabbrev('?',   '?\v')

call Cabbrev('s/',  's/\v')
call Cabbrev('%s/', '%s/\v')

call Cabbrev('s#',  's#\v')
call Cabbrev('%s#', '%s#\v')

call Cabbrev('s@',  's@\v')
call Cabbrev('%s@', '%s@\v')

call Cabbrev('s!',  's!\v')
call Cabbrev('%s!', '%s!\v')

call Cabbrev('s%',  's%\v')
call Cabbrev('%s%', '%s%\v')

call Cabbrev("'<,'>s/", "'<,'>s/\v")
call Cabbrev("'<,'>s#", "'<,'>s#\v")
call Cabbrev("'<,'>s@", "'<,'>s@\v")
call Cabbrev("'<,'>s!", "'<,'>s!\v")
6 голосов
/ 27 февраля 2013

Предположим, вы хотите добавить псевдоним для команды tabnew в gvim. Вы можете просто ввести следующую команду в свой файл .vimrc (если не в домашней папке, чем создать)

cabbrev t tabnew
6 голосов
/ 07 октября 2010

Может быть, вы хотите отобразить одну из ваших функциональных клавиш (F1..F12) на: w?Затем поместите это в ваш .vimrc:

noremap  <f1> :w<return>
inoremap <f1> <c-o>:w<return>

(ctrl-o в режиме вставки временно переключается в обычный режим).

3 голосов
/ 11 апреля 2016

Самым безопасным и простым является плагин, такой как cmdalias.vim или мое недавнее обновление vim-alias , которое учитывает

  • предшествующих пробеловили модификаторы, такие как :sil(ent)(!) или :redi(r),
  • модификаторы диапазона, такие как '<,'> для текущего визуального выбора,
  • экранирование специальных символов, таких как кавычки, и
  • проверьте, является ли выбранный псевдоним допустимым сокращением командной строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...