Сглаживание команды в vim
Vim
является моим предпочтительным текстовым редактором, когда я программирую, и поэтому я всегда сталкиваюсь с особенно раздражающей проблемой.
часто, когда мне быстро нужно сохранить буфер и перейти к какой-то другой другой задаче, я делаю типичный
:w
тем не менее, я – то, что кажется более чем 50% времени – всегда удается капитализировать это :w
. Естественно, ВИМ кричит на меня, потому что W
является недопустимой командой
E492: Not an editor command: W
мой вопрос как можно alias colon-команды в vim. В частности, не могли бы вы проиллюстрировать, как псевдоним W
до w
.
Я знаю о процессе ключи карты некоторых команды. К сожалению, это не то, что я ищу.
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
.
Я нахожу, что отображение
;
ключ:
было бы лучшим решением и сделало бы вас более продуктивным для ввода других команд.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)
,- модификаторы диапазона, такие как
'<,'>
для текущего визуального выбора,- экранировать специальные символы, такие как кавычки, и
- проверьте, является ли выбранный псевдоним допустимой аббревиатурой командной строки.