Vim est pour moi le meilleur éditeur de texte tout du moins en mode texte.
Voici juste quelques améliorations pour nous rendre la vie plus facile.
Ouvrir un fichier à une ligne spécifique (ex: ligne 64)
vim fichier.txt +64
Ouvrir plusieurs fichiers en même temps
vim -o fichier1 fichier2 fichier3
G
va à la fin du fichiergg
va au début du fichier123gg
va à la ligne 123dd
efface la ligne courante123dd
efface les 123 lignes à partir de la ligne couranteyy
copie la ligne courante123yy
copie les 123 lignes à partir de la ligne courantep
colle les lignes copiés sous la ligne courante:list
ou :l
affiche dans la barre de status la ligne avec tous les caractères cachés:n
→ Move to next file:N
→ Move to previous fileSélection
v
passe en mode visuel qui permet de faire une sélection de texteMaj + v
permet une sélection par ligneCtrl + v
permet une sélection par bloc (ou vertical)après votre sélection faite
x
ou d
supprime la sélections
supprime et passe en mode insertion:
fait apparaître :'<,’>
représentant votre sélection. Vous pouvez ensuite faire un remplacement de texte en rajoutant s#texte à remplacer#texte de remplacement#g
I
, tapez votre texte (il n’apparaît que sur la 1ère ligne), faite échap
puis échap
Recherche
/
recherche en avant?
recherche en arrière*
recherche en avant du mot entier sous le curseur#
recherche en arrière du mot entier sous le curseurg*
(et g#
) recherche en avant (en arrière) du mot sous le curseur en tant que stringg*
permet de chercher un nom de variable quelle que soit son préfixe (→
, .
ou $
), en PHP par exemple.Multi fenêtrage
Ctrl+w
(w pour window)n
crée un split horizontalv
crée un split verticalw
ou les flèches permettent de naviguer entre les fenêtres<
ou >
permet d’élargir ou de rétrécir horizontalement une fenêtre-
ou +
permet d’élargir ou de rétrécir verticalement une fenêtre=
permet d’égaliser les tailles des fenêtres ouvertent:split fichier.txt
ouvre fichier.txt en split horizontal:vsplit fichier.txt
ouvre fichier.txt en split vertical
A taper dans vim en tapant :
Lorsque que vous faite un set toto
, vous pouvez désactiver en rajoutant no set nototo
Remplacer le mot TOTO par TATA sur une ligne pour la 1ère occurrence rencontrée
:s/TOTO/TATA
Sur toutes les occurrences de la ligne
:s/TOTO/TATA/g
Sur toutes les occurrences de la page
:%s/TOTO/TATA/g
:%s#original#remplacement#flags
Remplace automatiquement le motif «original» par «replacement». %
signifie qu’on travaille sur tout le fichier. Les flags sont :
g
: remplacer toutes les occurrences du motif s’il apparaît plusieurs fois par lignei
: ne pas être sensible à la cassec
: demande confirmation à chaque remplacement (mode interactif):
fait apparaître :'<,’>
sur la ligne de commande, cela désigne l’intervalle sélectionné. Cela donne ::'<,’>s#original#remplacement#flags
Commenter quelques lignes. Faites une sélection par bloc du 1er caractère de chaque ligne avec Ctrl + v
, ensuite tapez Maj + i
, tapez votre caractère à placer (ex: #
, ;
…) puis tapez la touche Esc
2 fois de suites et magie…
Mettre à jour le fichier si il a été modifié entre temps
:e
Recharger le fichier automatiquement dès qu’il y a eu une modification
:set autoread
Mettre en surbrilliance le résultat d’une recherche
:set hlsearch
Pour désactiver
:nohlsearch
Pour les copier/coller qui partent en vrille
:set paste
Coloration syntaxique
:syntax on
Afficher les numéros de lignes
:set nu
Afficher les caractères invisibles
:set list
Pour désactiver
:set nolist :set list!
Règles de tabulations
Tabulations de 4 espaces
:set expandtab :set shiftwidth=4 :set softtabstop=4 :set tabstop=4
Ou en abrégé inclus à la fin du fichier en commentaire (modeline) :
// vim: ts=4 sts=4 sw=4 et
Alignement
Pour rendre le code plus beau en alignant les opérateurs, exemple :
array( 'a' => 'A', 'salut' => 'SALUT', 'très long' => 'TRÈS LONG', )
Sélectionner les lignes avec avec <S-v> puis taper :
:'<,'>Align=>
array( 'a' => 'A', 'salut' => 'SALUT', 'très long' => 'TRÈS LONG', )
Plus ⇒ http://www.catswhocode.com/blog/100-vim-commands-every-programmer-should-know
Si on veut un fichier compatible windows au niveau des retours chariots
:set fileformat=dos
au contraire
:set fileformat=unix
Convertir en utf-8
:set fileencoding=utf-8
Convertir en iso-8859-15
:set fileencoding=iso-8859-15
Connaitre l’encodage d’un fichier
$ file monfichier
Finalement, j’ai trouvé un fichier de config qui déchire bien :)
" /etc/vim/vimrc ou ~/.vimrc " Fichier de configuration de Vim " Formation Debian GNU/Linux par Alexis de Lattre " http://formation-debian.via.ecp.fr/ " ':help options.txt' ou ':help nom_du_paramètre' dans Vim " pour avoir de l'aide sur les paramètres de ce fichier de configuration " Avertissement par flash (visual bell) plutôt que par beep set vb " Active la coloration syntaxique syntax on " Définit le jeu de couleurs utilisé " Les jeux de couleur disponibles sont les fichiers avec l'extension .vim " dans le répertoire /usr/share/vim/vimcurrent/colors/ colorscheme delek " Affiche la position du curseur 'ligne,colonne' set ruler " Affiche une barre de status en bas de l'écran set laststatus=2 " Contenu de la barre de status set statusline=%<%f%h%m%r%=%l,%c\ %P " Largeur maxi du texte inséré " '72' permet de wrapper automatiquement à 72 caractères " '0' désactive la fonction set textwidth=0 " Wrappe à 72 caractères avec la touche '#' map # {v}! par 72 " Wrappe et justifie à 72 caractères avec la touche '@' map @ {v}! par 72j " Ne pas assurer la compatibilité avec l'ancien Vi set nocompatible " Nombre de colonnes (inutile, voire gênant) "set columns=80 " Nombre de commandes dans l'historique set history=50 " Options du fichier ~/.viminfo set viminfo='20,\"50 " Active la touche Backspace set backspace=2 " Autorise le passage d'une ligne à l'autre avec les flèches gauche et droite set whichwrap=<,>,[,] " Garde toujours une ligne visible à l'écran au dessus du curseur set scrolloff=1 " Affiche les commandes dans la barre de status set showcmd " Affiche la paire de parenthèses set showmatch " Essaye de garder le curseur dans la même colonne quand on change de ligne set nostartofline " Option de la complétion automatique set wildmode=list:full " Par défaut, ne garde pas l'indentation de la ligne précédente " quand on commence une nouvelle ligne set noautoindent " Options d'indentation pour un fichier C set cinoptions=(0 " xterm-debian est un terminal couleur if &term =~ "xterm-debian" || &term =~ "xterm-xfree86" set t_Co=16 set t_Sf=^[[3%dm set t_Sb=^[[4%dm endif " Quand on fait de la programmation, on veut qu'il n'y ait jamais de " vraies tabulations insérées mais seulement 4 espaces autocmd BufNewfile,BufRead *.c set expandtab autocmd BufNewfile,BufRead *.c set tabstop=4 autocmd BufNewfile,BufRead *.h set expandtab autocmd BufNewfile,BufRead *.h set tabstop=4 autocmd BufNewfile,BufRead *.cpp set expandtab autocmd BufNewfile,BufRead *.cpp set tabstop=4 " Décommentez les 2 lignes suivantes si vous voulez avoir les tabulations et " les espaces marqués en caractères bleus "set list "set listchars=tab:>-,trail:- " Les recherches ne sont pas 'case sensitives' set ignorecase " Le découpage des folders se base sur l'indentation set foldmethod=indent " 12 niveaux d'indentation par défaut pour les folders set foldlevel=12 " Police de caractère pour Gvim qui supporte le symbole euro set guifont=-misc-fixed-medium-r-semicondensed-*-*-111-75-75-c-*-iso8859-15 " Uncomment the following to have Vim jump to the last position when " reopening a file if has("autocmd") au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif endif
Différents thèmes de couleurs sont disponibles par défaut, on peut les choisir en tapant colorscheme puis la touche TAB pour faire défiler les différents thèmes disponibles. Par exemple :
:colorscheme delek
D’autre thèmes sont disponibles sur le Net, il suffit de les télécharger et de les placer dans /usr/share/vim/vimcurrent/colors/.
vim stocke tous ses fichiers de syntax dans /usr/share/vim/vim73/syntax
73 est le numéro de version, il peut donc évoluer.
Chaque fichier de syntax permet de définir une colorisation syntaxique. Pour les log, il y a le fichier messages.vim
J’ai pu remarquer que en ouvrant le fichier /var/log/messages on obtient une colorisation syntaxique très pratique et que bizarrement en ouvrant /var/log/syslog il n’y a aucune colorisation.
Nous allons comprendre pourquoi, grace au fichier /usr/share/vim/vim73/filetype.vim qui permet de définir pour un type de fichier ouvert la syntax à appliquer.
Dans notre cas, je me retrouve avec ceci
" Messages au BufNewFile,BufRead /var/log/messages,/var/log/messages.*[0-9] setf messages
Qui dit clairement que si j’ouvre le fichier /var/log/messages ou tout autre fichier /var/log/messages. suivi d’un numéro, on applique la colorisation syntaxique défini par le fichier syntax/messages
.vim
Afin de prendre en compte la plupart des fichiers de log connu, nous allons modifier cette ligne comme suit
" Messages (logs mostly) au BufNewFile,BufRead */log/{auth,cron,daemon,debug,kern,lpr,mail,messages,news/news,syslog,user}{,.log,.err,.info,.warn,.crit,.notice}{,.[0-9]*,-[0-9]*} setf messages
Maintenant vous aurez moins mal aux yeux en consultant vos logs ;)
Suppression des lignes contenant un caractére dans un fichier avec VIM
:g/.*com*.*/d
Suppression Ligne vide dans un fichier avec VIM
:g/^$/d
Sous debian, installer d’abord
Par défaut sous debian 9, le mode visual est activé et je ne supporte pas ce mode car on ne peut plus faire une sélection de texte pour le coller ensuite avec le clic du milieu.
Pour le désactiver
vi /usr/share/vim/vim80/defaults.vim
Commenter avec le double quote
" In many terminal emulators the mouse works just fine. By enabling it you " can position the cursor, Visually select and scroll with the mouse. "if has('mouse') " set mouse=a "endif
Sinon, le mieux est de s’habituer à ce nouveau mode car installé par défaut de partout..
shift+select pour sélectionner et coller ailleurs.
shift clic droit ou molette pour coller.