Vim

De bricosoft
Aller à la navigation Aller à la recherche
Fichier:Vim.gif
Fichier:Hot fuzz ver4 xlg.jpg
Utilisateurs de vim
Fichier:Answer to Life.png
Pourquoi vim ? Réponse : 42
Erreur dans le widget Twitter Search: unable to write file /home/gbp4dt5/zones/bricosoft.com/www/extensions/Widgets/compiled_templates/wrt693903567f5066_76379873
<google uid="C06" position="left"></google>

Vim est un éditeur de texte surpuissant présent chez tous les bons systèmes d'exploitation.

Des nombreuses voix s'élèvent dans le monde entier pour le renommer en vtp pour Vim trop puissant.

regexp

utiliser le mode very magic

Par exemple, la substitution inbitable suivante

:%s/\(\d\+\)\s\+/\1, '/gc

deviens plus claire :

:%s/\v(\d+)\s+/\1, '/gc

Utiliser "\v" change tous les caractères ASCII en sens spécial sauf '0'-'9', 'a'-'z', 'A'-'Z' et '_'.

Utiliser "\V" signifie que seul l'antislash indique un caractère spécial.

Exemples avec \m, \M, \v et \V :

après:  \v       \m       \M       \V          capture :
               'magic' 'nomagic'
         $        $        $        \$         fin de ligne
         .        .        \.       \.         n'importe quel caractère
         *        *        \*       \*         0 à infini
         ()       \(\)     \(\)     \(\)       stocke dans une variable
         |        \|       \|       \|         séparation d'alternatives
         \a       \a       \a       \a         caractère alphabétique
         \\       \\       \\       \\         antislash
         \.       \.       .        .          point
         \{       {        {        {          accolade
         a        a        a        a          a

opérations courantes

Quitter un fichier sans enregistrement

:q!

Quitter avec enregistrement

:x

Quitter en ignorant les modifications puis réouvre le même fichier

:e!

Aller à la fin

GG

Aller au début

gg

Se déplacer

En plus de h,j,k,l il existe :

gg : début du fichier
GG : fin du fichier
$ : fin de ligne
} : § suivant
{ : § précédent 
] :
[ :
w : mot suivant
b : mot précédent
% : sur une parenthèse, accolade ouvrante ou fermante cela vous ramène à sa ptite soeur.

Modification

Insérer

i

Insérer à la ligne suivante

o

Insérer à la ligne au dessus

O

Recherche et substitution

Recherche vers la fin

/toto

Recherche vers le début

?toto

Recherche et substitution interactive

:%s/toto/riri/gc

Exemples :

Pour ajouter en début de ligne un guillemet simple

:%s/^/'/gc

Rajouter un guillemet en début et fin de ligne :

:%s/.*/'&'/gc

Pour ajouter en fin de ligne un guillemet simple suivi d'une virgule

:%s/$/',/gc

Efface ce qui se trouve à l'intérieur de doubles apostrophes "" et démarre l'insertion

ci"

Efface ce qui se trouve entre crochets [] autour de la position du curseur

da[

Met en surbrillance ce qui se trouve entre simple guillemets

vi'

Met en surbrillance les parenthèses

ya(

Va à la prochaine occurence du mot sur le curseur

*

Copier, coller, couper

Fichier:Vim.gif

Copier

Copier une ligne

yy

Copier 6 lignes

6yy

Coller

Coller après

p

Coller avant

P

Couper

Couper une ligne

dd

Couper 6 lignes

6dd

Couper un mot

dw

Couper 3 mots

d3w

Couper une lettre

x

Couper 6 lettres

6x

Dupliquer dix lignes à la suite

yy10p

charset

:language

édition

:set encoding=utf-8

écriture du fichier

:set fileencodings=utf-8
:set fileencodings=ucs-bom,utf-8,latin1

bidouiller du xml

indente + efface espace dans balise

:%s%>\(\s\|\r\|\n\)*<%>\r<%g

bidouiller un texte

enlever tous les caractères d'une ligne après ; et les remplacer par une virgule :

:%s/;.\+$/,/gc

En vrac

Erreur dans le widget Twitter: unable to write file /home/gbp4dt5/zones/bricosoft.com/www/extensions/Widgets/compiled_templates/wrt693903568f1c34_90879527

Lancer une commande depuis vim

Lancer une commande shell

!ls

Afficher le nombre de lignes du fichier de travail :

w !wc -l

Cela va envoyer le fichier dans un pipe vers la commande (wc -l) qui va compter le nombre de lignes

Enlever les espaces au début s'une ligne

:%s/^\s\+//gc

Avant :

                  glop glop

Après :

glop glop
  • ^ indique le début de la ligne
  • \s c'est la famille des espaces
  • \+ token magique pour dire 1 ou plusieurs truc(s)

Remplacer des espaces par des virgules

:%s/\(\d\+\)\s\+/\1, '/gc

Avant :

69 Nice Position 

Après :

69, 'Nice Position
  • \(\d\+\) les parenthèses échappées capturent ce qu'il y a dedans et le range dans \1. S'il y avait eu d'autre parenthèses ça aurait été dans \2
  • \1 c'est le contenu des parenthèses de la partie à gauche

Rajouter une quote à chaque fin de ligne

<google uid="C06" position="left"></google>
%s/$/'/gc

Avant :

69, 'Nice Position 

Après :

69, 'Nice Position'
  • $ est le caractère magique de fin de ligne

insérer la date

Avoir le choix dans la date peut procurer des sensations :

:r !date

Va coller la date dans le texte.

mercredi 19 décembre 2010, 11:12:13 (UTC+0100)

Source: [1]

supprimer les lignes vides

:g/^$/d

supprimer les lignes qui ne contiennent pas babelfish

:g!/babelfish/d

supprimer les lignes qui contiennent plop

:g/plop/d

supprimer les saut de lignes

:%s/\n//g

supprimer toutes les lignes jusqu'à la fin du fichier qu'à partir d'un motif

:%g/motif/normal ndG

Pour chaque ligne, si c'est le bon motif, exécute les commandes en mode normal ndG'. 'n' saute au motif et 'dG' efface tout jusqu'à la fin du fichier.

rajouter un saut de ligne à la place d'une virgule

Il faut passer en mode very magic (\v) :

:%s/\v,/\r/gc

traiter une liste de noms de fichiers

Dans cet exemple une liste de noms de fichiers est transformé en wiki markup : Avant :

[[image:duck yeah!.png
:%s/\v([a-z\. A-Z'\!]+)/\1|thumb|35px|\1\]\]/gc

Après :

[[image:duck yeah!.png|thumb|35px|duck yeah!.png]]

générer un script sql d'insertion

Votre fichier csv ressemble à :

boule,bill
asterix,obelix
zavatta,zapata

%s/\v(.*),(.*)$/insert into couples values ('\1','\2');/gc

insert into couples values ('boule','bill');
insert into couples values ('asterix','obelix');
insert into couples values ('zavatta','zapata');

inverser l'ordre de 2 colonnes

2 colonnes séparées par un espace (sans que celui ci n'apparaisse dans les colonnes aussi)

:%s/^\(.*\) \(.*\)$/\2 \1/gc

remplacer sous condition

Remplace POW par POS si la ligne contient shitcoin :

:%g/shitcoin/s/POW/POS/g

Remplace ARGENT par MOULAGA si la ligne ne commence pas par Jul :

:%g!/^Jul/s/ARGENT/MOULAGA/g

Editeur préféré

Pour changer votre traitement de texte (editeur en franglais) pour vim :

sudo /usr/sbin/update-alternatives --config editor 
Il y a 5 alternatives fournissant « editor ».

  Sélection    Alternative
-----------------------------------------------
*         1    /usr/bin/vim.tiny
          2    /bin/ed
          3    /bin/nano
 +        4    /usr/bin/vim.gnome
          5    /usr/bin/mcedit-debian

Appuyez sur Entrée pour conserver la valeur par défaut[*] ou choisissez le numéro sélectionné :

Vous y aurez directement accès avec le raccourcis :

<ctrl+x> <ctrl+e>

Qui ouvre un fichier de type "/tmp/bash-fc-7308262366", vous permettant de saisir une longue commande sans se faire emm.rder par ce p#!@* de buffer.

Ou avec fc, qui ouvre un fichier avec la dernière commande saisie

$ fc

enregistrer un fichier sans en avoir la permission

S'il vous arrive d'oublier de lancer vim en sudo, pour un fichier nous vous appartenant pas, vous risquez d'avoir l'erreur 45 ou la 212 :

$ vim /etc/hosts
:x
E45: L'option 'readonly' est activée (ajoutez ! pour passer outre) 

Et en rajoutant le ! :

:x!
 E212: Impossible d'ouvrir le fichier pour y écrire

Pas la peine de sortir :

:w !sudo tee %

Le shell vous demandera(ou pas) le mdp sudoer.

Ensuite vim vous propose de le recharger en appuyant sur C car il a été changé par une autre commande (ici tee).

idem dans ~/.vimrc

Si vous oubliez trop souvent de faire un sudo vim fichier et que préférez vous rappeler d'une nouvelle commande vim, rajoutez une nouvelle commande utilisateur dans ~/.vimrc (les commandes user commencent par une majuscule) :

command! Wsudo :w !sudo tee > /dev/null %

Dans le fichier :

:Wsudo
[sudo] password for totoche : 
Appuyez sur ENTRÉE ou tapez une commande pour continuer

[...]


changer la casse : passer toutes les premières lettres en minuscule

:%s/^./\L&/gc

{{#switch:|subgroup|child=|none=|#default=

}}