====== 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 ). 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 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 :) " /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 ===== http://blog.kewah.com/2014/from-sublime-text-to-vim/ ===== vim sublime ===== Sous debian, installer d'abord https://levlaz.org/installing-powerline-in-debian/ https://github.com/grigio/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.**