Outils pour utilisateurs

Outils du site


Panneau latéral

linux:vim (lu 70190 fois)

VIM

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.

Utilisation courante

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

Raccourcis

  • G va à la fin du fichier
  • gg va au début du fichier
  • 123gg va à la ligne 123
  • dd efface la ligne courante
  • 123dd efface les 123 lignes à partir de la ligne courante
  • yy copie la ligne courante
  • 123yy copie les 123 lignes à partir de la ligne courante
  • p 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 file

Sélection

  • v passe en mode visuel qui permet de faire une sélection de texte
  • Maj + v permet une sélection par ligne
  • Ctrl + v permet une sélection par bloc (ou vertical)

après votre sélection faite

  • x ou d supprime la sélection
  • s supprime et passe en mode insertion
  • un appuie sur : 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
  • Insérer du texte, faire un i majuscule 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 curseur
  • g* (et g#) recherche en avant (en arrière) du mot sous le curseur en tant que string
  • g* permet de chercher un nom de variable quelle que soit son préfixe (, . ou $), en PHP par exemple.

Multi fenêtrage

  • Toutes les commandes suivantes commencent par Ctrl+w (w pour window)
    • n crée un split horizontal
    • v crée un split vertical
    • w 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

Commande

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 ligne
  • i : ne pas être sensible à la casse
  • c : demande confirmation à chaque remplacement (mode interactif)
  • On peut remplacer le motif seulement sur une sélection de plusieurs lignes données (avec <Maj-v>). L’appui sur : 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

Encodage

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

Fichier de conf exemple

Finalement, j’ai trouvé un fichier de config qui déchire bien :)

.vimrc
" /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

Couleurs

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/.

Coloriser les fichiers de log

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 ;)

Supprimer plusieurs lignes contenant ...

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

Tweaker vim

vim sublime

Visual mode

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.

linux/vim.txt · Dernière modification: 27-10-2020 11:34 de edmc73