Слияние команды в vim
Vim
- мой предпочтительный текстовый редактор, когда я программирую, и поэтому я всегда сталкиваюсь с особенно раздражающей проблемой.
Часто, когда мне нужно быстро сохранить буфер и перейти к другой другой задаче, я делаю типичный
:w
Однако я - то, что кажется более чем в 50% случаев, всегда умеет использовать этот :w
. Естественно, vim кричит на меня, потому что W
является недопустимой командой
E492: Not an editor command: W
Мой вопрос в том, как один псевдоним команды двоеточия в vim. В частности, вы могли бы показать, как псевдоним W
- W
.
Мне известно о процессе сопоставления ключей определенным командам. К сожалению, это не то, что я ищу.
Ответы
Ответ 1
Чтобы завершить работу без изменений, попробуйте использовать
cnoreabbrev W w
он заменит W
в командной строке на W
, но только если он не будет следовать и не будет предшествовать символу слова, поэтому :W<CR>
будет заменен на :W<CR>
, но :Write
не будет.
Update
Вот как я напишу сейчас:
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")
Ответ 2
При дополнительном поиске я обнаружил, что кто-то спросил почти то же question, что и я.
:command <AliasName> <string of command to be aliased>
сделает трюк.
Помните, что, как указывает Richo, пользовательская команда должна начинаться с заглавной буквы.
Ответ 3
Я считаю, что преобразование ключа ;
в :
будет лучшим решением и сделает вас более продуктивным для ввода других команд.
nnoremap ; :
vnoremap ; :
Ответ 4
Предположим, вы хотите добавить псевдоним для команды tabnew в gvim. вы можете просто ввести следующую команду в ваш .vimrc файл (если не в домашней папке, чем создать его)
cabbrev t tabnew
Ответ 5
Возможно, вы хотите сопоставить одну из ваших функциональных клавиш (F1..F12) с: w? Затем поместите это в свой .vimrc:
noremap <f1> :w<return>
inoremap <f1> <c-o>:w<return>
(ctrl-o в режиме вставки временно переключается в обычный режим).
Ответ 6
Лучшее решение включает запись пользовательской функции для обработки аббревиатур, которые имеют место только в начале командной строки.
Для этого добавьте следующий файл 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('[email protected]', '[email protected]\v')
call Cabbrev('%[email protected]', '%[email protected]\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("'<,'>[email protected]", "'<,'>[email protected]\v")
call Cabbrev("'<,'>s!", "'<,'>s!\v")
Ответ 7
в моем .vimrc
У меня есть:
nmap :W :w
nmap :Q :q
nmap :wQ :wq
nmap :WQ :wq
который делает trрик для меня
Ответ 8
Самым безопасным и простым является плагин, например cmdalias.vim или мое последнее обновление vim-alias, которые учитывают
- предшествующие пробелы или модификаторы, такие как
:sil(ent)(!)
или :redi(r)
,
- модификаторы диапазона, такие как
'<,'>
для текущего визуального выбора,
- escape специальных символов, таких как кавычки, и
- проверьте, является ли выбранный псевдоним допустимым сокращением командной строки.