L'alias de commande dans vim
Vim
est mon éditeur de texte préféré quand je programme, et donc je tombe toujours sur un problème particulièrement ennuyeux.
souvent, quand j'ai besoin rapidement de sauver le tampon et continuer à une autre tâche Divers, je fais le typique
:w
cependant, I – ce qui semble être plus de 50% du temps – parviennent toujours à capitaliser ce :w
. Naturellement, vim me crie dessus parce que W
est un invalide commande
E492: Not an editor command: W
ma question est comment peut-on alias colon-commandes dans vim . En particulier, pourriez-vous illustrer comment alias W
à w
.
je suis conscient de le processus de map à certains commandes . Malheureusement, ce n'est pas ce que je cherche.
7 réponses
pour laisser l'achèvement intact, essayez d'utiliser
cnoreabbrev W w
, il remplacera W
en ligne de commande par w
, mais seulement s'il n'est ni suivi ni précédé par un caractère de mot , ainsi :W<CR>
sera remplacé par :w<CR>
, mais :Write
ne sera pas. (Notez que cela affecte toutes les commandes qui correspondent, y compris celles que vous ne pouvez pas attendre , par exemple la commande :saveas W Z
sera remplacée par :saveas w Z
, alors faites attention avec ce.)
mise à Jour
Voici comment je l'écrirais maintenant :
cnoreabbrev <expr> W ((getcmdtype() is# ':' && getcmdline() is# 'W')?('w'):('W'))
en fonction:
fun! SetupCommandAlias(from, to)
exec 'cnoreabbrev <expr> '.a:from
\ .' ((getcmdtype() is# ":" && getcmdline() is# "'.a:from.'")'
\ .'? ("'.a:to.'") : ("'.a:from.'"))'
endfun
call SetupCommandAlias("W","w")
ceci vérifie que le type de commande est :
et la commande est W
, donc c'est plus sûr que juste cnoreabbrev W w
.
avec une recherche supplémentaire, j'ai trouvé que quelqu'un a demandé presque le même question que I.
:command <AliasName> <string of command to be aliased>
fera l'affaire.
veuillez noter que, comme le souligne Richo , la commande Utilisateur doit commencer par une lettre majuscule.
je trouve que le mappage de la ;
à la :
serait une meilleure solution, et vous rendrait plus productif pour taper d'autres commandes.
nnoremap ; :
vnoremap ; :
peut-être que vous aimeriez mapper une de vos touches de fonction (F1..F12) à: w ? Alors mettez ça dans votre .vimrc:
noremap <f1> :w<return>
inoremap <f1> <c-o>:w<return>
(ctrl-o en mode insertion bascule temporairement en mode normal).
la meilleure solution consiste à écrire une fonction personnalisée pour traiter les abréviations qui n'ont lieu qu'au début de la barre de commande.
pour cela, ajoutez le fichier vimrc suivant ou n'importe où ailleurs.
" 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')
quelques utile les abréviations de la matériel source où j'ai trouvé ce genre de choses:
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")
supposons que vous voulez ajouter un alias pour la commande tabnew dans gvim. vous pouvez simplement taper la commande suivante dans votre .fichiers vimrc (si pas dans le dossier d'accueil que d'en créer un)
cabbrev t tabnew
le plus sûr et le plus facile est un plugin tel que cmdalias.vim ou ma récente mise à jour vim-alias qui prennent en compte
- précédant les blancs ou les modificateurs tels que
:sil(ent)(!)
ou:redi(r)
, - modificateurs de portée tels que
'<,'>
pour la sélection visuelle actuelle, - échapper aux caractères spéciaux tels que les guillemets, et
- vérifier si le pseudo est une ligne de commande valide abréviation.