Сглаживание команды в vim


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

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

:w

тем не менее, я – то, что кажется более чем 50% времени – всегда удается капитализировать это :w. Естественно, ВИМ кричит на меня, потому что W является недопустимой командой

E492: Not an editor command: W

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

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

7 126

7 ответов:

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

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.

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

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

будет делать трюк.

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

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

nnoremap ; :
vnoremap ; :

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

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

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

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

для этого добавьте следующий файл 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")

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

cabbrev t tabnew

самый безопасный и простой плагин, такой как cmdalias.ВИМ или мое последнее обновление vim-alias из того, что принимают во внимание

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