gvim Expression réguliére Eof - Logiciels - Linux et OS Alternatifs
Marsh Posté le 01-07-2007 à 17:31:03
Hummm...
Peut-être qu'on doit considérer comme une "ligne blanche" le fait que \n apparaisse plus d'une fois..
Non ?
Marsh Posté le 01-07-2007 à 18:35:33
Fork Bomb a écrit : Hummm... |
En fait, je veux supprimer seulement les lignes blanches qui sont apres la derniére ligne contenant des caractéres ... si avant, on a des caractéres, ca doit pas les modifier ...
Code :
|
Je viens de trouver une expression réguliére qui me parait correct. Mais mon probléme c'est de determiner le dernier numéro de ligne (ici la ligne 14) qui contient un caractére et aprés j'applique l'expression régulière..
T'en penses quoi ?
Marsh Posté le 01-07-2007 à 19:20:45
phdenis a écrit : T'en penses quoi ? |
Rien, je suis nul en prog'.
Je pensais juste que plus d'un \n a la suite permettait de repérer les lignes vides.
Ma reflection s'arrête là. Désolé.
Marsh Posté le 01-07-2007 à 21:51:43
Tu veux forcément du vim pur ou on peut utiliser des outils shell (avec :!cmd ou autre) ?
avec sed :
virer les lignes du début :
sed '/./,$!d' file |
virer les lignes de la fin :
sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba' file |
Marsh Posté le 01-07-2007 à 23:51:24
Re,
Je veux mettre la commande dans mon .vimrc de facon à l'éxécuter dès que je fais un enregistrement d'un fichier *.c,*.h et *.mk
Si on peut le faire avec une commande de type sed, on doit pouvoir le faire dans gvim aussi.
Non, qu'en penses-tu ?
Marsh Posté le 02-07-2007 à 10:02:00
phdenis a écrit : Re, |
Oui c'est tout à fait possible en te faisant une petite fonction en vim script
Marsh Posté le 02-07-2007 à 20:29:04
Re,
En essayant d'analyser l'expression du sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba' file
J'avoue ne pas tout avoir compris ...
Le sed -e :a correspond à une etiquette
et aprés -e '/^\n*$/{$d;N;};/\n$/ba'
-> ^\n*$ -> toutes les lignes vides ...
->{$d;N;} apparement c'est la que ca bloque ... Tu comprends cette partie ?
J'ai compris que l'on remplace toutes les lignes vides par un seul retour à la ligne à partir de l'étiquette ba ..
Non, si tu as des indices je suis preneur ?
Marsh Posté le 02-07-2007 à 22:07:30
phdenis a écrit : Re, |
Tu n'es pas loin (un peu à côté )
Déjà un bon truc pour pas se paumer avec sed, c'est de bosser avec des lignes numérotées, genre
yes | head -10 | cat -n | sed blablabla |
Pour comprendre $d, regarde ce que fait :
yes | head -10 | cat -n | sed '6,$ d' |
Pour N, il faut comprendre comment marche sed. En gros :
- sed prend une ligne du fichier en entrée, et la copie dans le "pattern space"
- on applique la première commande sed sur le pattern space
- on applique la seconde commande sed sur le pattern space
- etc etc
- quand on a appliqué tout, on copie le pattern space (qu'on a bien modifié ) vers stdout
- on lit la ligne suivante
Test un petit :
yes | head -10 | cat -n | sed -e '/8/{N;/9/d}' |
Ca devrait aller mieux...
edit :
Par contre pour vim on s'en fout hein, à priori tu te fais une fonction qui va à la fin du fichier et qui delete tant que c'est vide, et ca devrait marcher tout seul .
Un truc genre :
aller à la fin du fichier, fin de la dernière ligne :
G$ |
rechercher (à contresens) une ligne non-vide :
?. |
Bon ce . est très limite, libre à toi de mettre une regexp plus poussée.
- si tu veux virer les lignes non-vides mais contenant juste des espaces/tabulations . sera trop tolérant pour toi
- si tu es au début d'une ligne non-vide, ?. ira matcher la fin de la ligne précédente (c'est pour ca que je commence par G$ et pas seulement G)
effacer les lignes blanches entre ici et la fin du fichier :
:,$g/^\s$/d |
Marsh Posté le 01-07-2007 à 17:22:29
Bonjour,
Je suis à la recherche d'une expression réguliére permettant de supprimer toutes les lignes blanches à la fin d'un fichier.
Exemple:
C'est à dire supprimer la ligne 15,16,17,18. (que j'ai noté ligne blanche de façon à ceux qu'elles apparaissent).
Dans mon gvim, j'avais pensé à une expression réguliére du genre :
Ou le \x26 represente le EOF (d'aprés la table ASCII) mais sans succès.
D'ailleurs, je me demande si il est possible de voir le caractére EOF
Merci pour votre aide.