219 votes

Comment supprimer automatiquement les espaces blancs de fin de ligne dans vim ?

J'obtiens des erreurs de type "espaces blancs traînants" en essayant de livrer certains fichiers dans Git.

Je veux supprimer automatiquement ces caractères d'espacement de queue juste avant de sauvegarder les fichiers Python.

Pouvez-vous configurer Vim pour faire cela ? Si oui, comment ?

3 votes

Cela ne concerne pas uniquement python

2 votes

Utilisez mon DeleteTrailingWhitespace plugin.

221voto

Paul D. Eden Points 4842

J'ai trouvé la réponse aquí .

L'ajout de ce qui suit à mon fichier .vimrc a fait l'affaire :

autocmd BufWritePre *.py :%s/\s\+$//e

El e à la fin signifie que la commande n'émet pas de message d'erreur si le modèle de recherche échoue. Voir :h :s_flags pour plus.

1 votes

Intéressant ! L'espace blanc de fin est une bataille au travail. Je le déteste, les autres ne comprennent pas pourquoi. Nous utilisons autant vi que vim (j'utilise vim ; ils ne le font pas car ils devraient l'installer). J'ai un programme que j'appelle stb pour Strip Trailing Blanks et je l'utilise comme un filtre ; cela fonctionne aussi dans vi. Ceci est mieux.

22 votes

Cela change la position du curseur à chaque sauvegarde. Est-il possible de l'éviter ?

0 votes

OK, j'ai trouvé, la réponse est ci-dessous.

179voto

stepancheg Points 2229

Compilation de ce qui précède plus sauvegarde de la position du curseur :

function! <SID>StripTrailingWhitespaces()
  if !&binary && &filetype != 'diff'
    let l:save = winsaveview()
    keeppatterns %s/\s\+$//e
    call winrestview(l:save)
  endif
endfun

autocmd FileType c,cpp,java,php,ruby,python autocmd BufWritePre <buffer> :call <SID>StripTrailingWhitespaces()

Si vous voulez appliquer cette mesure à la sauvegarde de n'importe quel fichier, laissez le deuxième élément autocmd et utiliser un joker * :

autocmd BufWritePre,FileWritePre,FileAppendPre,FilterWritePre *
  \ :call <SID>StripTrailingWhitespaces()

9 votes

Vous pourriez améliorer votre fonction en enregistrant également la dernière recherche et en la restaurant. let _s=@/ let @/=_s

0 votes

Pour les autres novices comme moi, c'est la façon de limiter les fichiers sur lesquels la fonction est appelée :

0 votes

C'est vraiment génial. J'utilise vim mais je suis trop paresseux pour chercher des trucs comme ça habituellement. Cela m'a donné un moyen d'automatiser l'application de mon arsenal de regex sur la sauvegarde. Je suis coincé avec Ruby pour l'instant, alors j'adore ne pas avoir à couper et coller mes regex tueuses de hash-rocket :wa

70voto

mat Points 5365

J'ai aussi habituellement un :

match Todo /\s\+$/

dans mon .vimrc de sorte que les espaces en fin de ligne soient mis en évidence.

Todo étant un éclaircissement de la syntaxe nom-groupe qui est utilisé pour mettre en évidence des mots clés comme TODO , FIXME o XXX . Il a une couleur de fond jaunâtre très laide, et je trouve que c'est le meilleur moyen de mettre en évidence les choses que vous Ne le fais pas. dans votre code :-)

7 votes

Ou vous pouvez définir la liste et définir listchars+=trail :.

0 votes

Excellent - c'est le juste milieu entre la suppression automatique des espaces blancs de fin de ligne (même si je n'en suis pas conscient, ou si c'est le code de quelqu'un d'autre avec lequel je travaille dans le même fichier), et le fait de ne rien faire. Merci.

2 votes

Malheureusement, ma palette de couleurs préférée n'est pas mise en valeur par zenburn.

53voto

Michael Durrant Points 30342

Je mets en évidence les espaces blancs de fin de ligne existants et je supprime également les espaces blancs de fin de ligne.

Je configure mon éditeur (vim) pour qu'il affiche un espace blanc à la fin, par ex.

enter image description here

avec ceci au bas de mon .vimrc :

highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()

et je le supprime automatiquement des fichiers lors de leur sauvegarde, dans mon cas *.rb pour les fichiers ruby, à nouveau dans mon ~/.vimrc.

function! TrimWhiteSpace()
    %s/\s\+$//e
endfunction
autocmd BufWritePre     *.rb :call TrimWhiteSpace()

0 votes

Super ! Merci, j'aime particulièrement la fonction.

13voto

syvex Points 2244

Voici une façon de filtrer par plus d'un type de fichier.

autocmd FileType c,cpp,python,ruby,java autocmd BufWritePre <buffer> :%s/\s\+$//e

0 votes

Chaque fichier : autocmd FileType * autocmd BufWritePre <buffer> :%s/ \s\ +$//e

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X