Comment pouvez-vous supprimer automatiquement de fuite espaces dans vim
Je suis 'trailing espaces" erreurs de la tentative de perpétration de certains fichiers dans le dépôt git.
Je veux supprimer ces traînant les espaces automatiquement juste avant que je enregistrer des fichiers python.
Pouvez-vous configurer vim pour ce faire? Si oui, comment?
- ce n'est pas la préoccupation python seul
- Utiliser mon DeleteTrailingWhitespace plugin.
- Connexes: Quelle est la façon la plus simple de la bande de fuite des espaces de toutes les lignes dans un fichier? à Vim SE
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la réponse ici.
Ajoutant ce qui suit à mon .fichiers vimrc a fait le tour.
gi
va vous remettre sur la précédente position du curseur.:%!sed -r 's/\s+$//'
que la commande semble être d'une autre façon (d'ailleurskeepjumps
) pour empêcher le déplacement du curseur. Voir:h filter
.gi
passe à la dernière position où le texte a été inséré (pas toujours la position du curseur avant le:%s
de commande) et:%!sed -r 's/\s+$//'
saute au début du fichier. Je ne comprends pas commentkeepjumps
est censé être utilisé,:keepjumps :%s/\s+$//e
ne semble pas faire quelque chose de différent. Je suis en utilisant:%s/\s\+$//e|normal ''
et il semble fonctionner comme prévu (va à la position du curseur avant d'utiliser le:%s
de commande).:%s/\s\+$//e|normal ''
va passer à la mauvaise position si aucune fuite d'espaces ont été trouvés.e
à la fin signifie que, si nous n'avons pas trouver le modèle, vi ne considère pas la commande de substitution comme un échecCompilation de plus de plus de sauver la position du curseur:
Si vous souhaitez appliquer ce sur enregistrer n'importe quel fichier, de laisser de côté la deuxième
autocmd
et utilisez un caractère générique*
:autocmd FileType c,cpp,java,php,ruby,python
partie pour le faire appliquer à tous les fichiers.<buffer>
avec*
si vous voulez qu'il fonctionne sur tous les fichierskeepp
, cela n'affectera pas votre historique de recherche, c'est à direkeepp %s/\s\+$//e
J'ai aussi généralement un :
dans mon
.vimrc
fichier, de sorte que la fin de la ligne, les espaces sont hilighted.Todo syntax sa mise en surbrillance nom-groupe qui est utilisé pour sa mise en surbrillance des mots-clés comme
TODO
,FIXME
ouXXX
. Il a une fâcheusement laid jaunâtre couleur d'arrière-plan, et je trouve que c'est le meilleur pour hilight choses que vous ne pas voulez dans votre code 🙂:hi Todo
. J'ai donc parcouru:hi <Tab>
et:help hi
. J'ai considéréCursor
etError
, mais je pense que je vais essayermatch VisualNOS /\s\+$/
. Je pourrais combiner cela avec certains de laautocmd
s d'autres réponses ici.J'ai à la fois mis en évidence les de fuite des espaces et aussi bande de fuite espaces.
- Je configurer mon éditeur (vim) pour afficher l'espace blanc à la fin, par exemple
avec cette à la fond de mon .vimrc:
et je 'auto-strip" à partir de fichiers lors de la sauvegarde, dans mon cas *.rb pour ruby, de nouveau dans mon ~/.vimrc
Ici un moyen de filtrer par plus d'un Type de fichier.
Copié et collé à partir http://blog.kamil.dworakowski.name/2009/09/unobtrusive-highlighting-of-trailing.html (le lien ne fonctionne plus, mais le peu que vous avez besoin est ci-dessous)
"Cela a l'avantage de ne pas mettre en valeur chaque espace que vous tapez à la fin de la ligne, uniquement lorsque vous ouvrez un fichier ou quitter le mode insertion. Très soigné."
J'ai vu cette solution dans un commentaire à l'
VIM Wikia - Supprimer les espaces
J'ai vraiment aimé. Ajoute un
.
sur les espaces indésirables.Mettre ceci dans votre
.vimrc
C'est la façon dont je le fais. Je ne me souviens pas où je l'ai volé à partir de tbh.
%s
le global (g) indicateur est aussi inutile que d'un espace en fin de ligne (EOL 🙂Une solution qui, tout simplement, supprime les caractères d'espace blanc à partir du fichier n'est pas acceptable dans toutes les circonstances. Il travaillera dans un projet qui a eu cette politique de le début, et donc il n'y a pas de tels espaces que vous n'avez pas seulement ajouter vous-même dans votre prochain commit.
Supposons que vous souhaitiez simplement de ne pas ajouter de nouveaux cas de fuite d'espaces, sans touchant les espaces dans les lignes que vous ne souhaitez pas modifier, afin de garder votre s'engager à des changements qui ne sont pas pertinents pour votre travail.
Dans ce cas, avec git, vous pouvez utiliser un script comme ceci:
C'est-à-dire, on planque les modifications, puis filtrer tous les
+
lignes dans le diff pour retirer leur fuite espaces comme nous l'avons re-appliquer le changement de répertoire de travail. Si cette commande, la pipe est un succès, nous laissons tomber la cachette.Autres approches, ici, d'une certaine manière ne fonctionne pas pour moi en MacVim lorsque utilisé dans le
.vimrc
fichier. Voici donc un qui le fait et les faits saillants espaces:set listchars=trail:·
disant:E474: Invalid argument: listchars=trail:·
. Pouvez-vous valider votre exemple?autocmd BufWritePre * :%s/\s\+$//<CR>:let @/=''<CR>
Pour les personnes qui veulent l'exécuter pour certains types de fichiers (types de fichiers ne sont pas toujours fiables):
Ou avec vim7:
Si vous coupez des espaces, vous devez seulement de le faire sur des fichiers qui sont déjà propres. "Lorsqu'à Rome...". C'est de bon ton lorsque l'on travaille sur des bases de codes où les parasites des changements sont les bienvenus.
Cette fonction détecte la fuite des espaces et des virages sur l'ajustement que si elle était déjà propre.
Le crédit pour cette idée va à un joyau d'un commentaire ici: https://github.com/atom/whitespace/issues/10 (la plus longue bug billet commentaire stream jamais)
let _s=@/
et de restaurer à la fin de " laisser @/=_s` .Dans ce cas, nous sommes en utilisant le trou noir s'inscrire