J'ai les éléments suivants dans mon vimrc:
func! AddSpaceBeforeEqual()
s/\([a-z)_0-9"'\[\]]\)=/\1 =/ge
endfunc
J'utilise Vint à peluches mon vimrc, et a obtenu l'avertissement suivant:
ProhibitCommandWithUnintendedSideEffect Évitez les commandes avec des effets secondaires involontaires. Évitez d'utiliser: s [ubstitute] car il déplace le curseur et imprime des messages d'erreur. Préférez les fonctions (telles que search ()) mieux adaptées aux scripts. Pour de nombreuses commandes vim, il existe des fonctions qui font la même chose avec moins d'effets secondaires. Voir: fonctions d'aide () pour une liste des fonctions intégrées. Guide de style Google Vimscript
Cependant, je ne pense pas que ce soit un moyen de faire la substitution sans utiliser la :s
commande.
Par exemple, la search()
fonction donne les lignes correspondant à un modèle, mais il n'y a aucun moyen de faire une substitution. La substitute()
fonction fonctionne sur une chaîne et ne se substitue pas à un fichier entier.
Dois-je implémenter une méthode de remplacement moi-même, ou est-ce un moyen plus intelligent de réécrire ma fonction?
la source
:help function-search-undo
La
:s
commande est une approche Vimscript pure.Je suppose que l'avertissement signifie uniquement que le curseur sera très probablement mal positionné après son utilisation (que vous pouvez contourner en utilisant la
winsaveview()
fonction avant et lawinrestview()
commande après son utilisation). Vous devez également prendre soin des erreurs possibles qui pourraient survenir. Ceci est généralement géré à l'aide due
drapeau. Il faut également prendre soin de certains paramètres comme legdefault
paramètre, qui inverse la signification dug
drapeau.Il faut prendre soin de ces détails et c'est probablement la cause première de ces avertissements. Mais cela ne signifie pas pour autant d'éviter l'utilisation de la
:s
commande. Il est tout à fait correct d'utiliser la:s
commande si vous souhaitez remplacer quelque chose dans le tampon actuel.(Remarque, on pourrait bien sûr parcourir toutes les lignes et utiliser une approche search () / getline () / setline (). Mais cela est généralement plus lent.)
la source