Aller au contenu principal

Quelques "killer tips" pour vim

Vim est comme un vieux gruyère suisse, Goldorak, les cacahuètes grillées à sec avec le pastis, ou encore Marseille, à savoir trop puissant. Surtout lorsque l'on dispose de quelques astuces (les plus secrètes possibles s'entend) qui d'une part accélèrent le travail et surtout, laissent bouche bée vos collègues qui ne les connaissaient pas encore.

Une pas connue qui va bien pour démarrer : transformer le fichier édité en html...

:runtime syntax/2html.vim

TERRIBLE : Complète la ligne courante

En mode insertion :

CTRL-X CTRL-L

Si vous avez tapé abc, alors complète la ligne comme la première ligne du fichier commençant par abc, chaque nouvelle frappe de CTRL-L complétant la ligne par la ligne suivante du fichier qui commence par abc

SUPER TERRIBLE : Complète le mot courant

En mode insertion :

CTRL-X CTRL-N
ou
CTRL-X CTRL-P

Si vous avez tapé sou, alors complète le mot avec le premier mot du fichier commençant par sou, chaque nouvelle frappe de CTRL-N complétant le mot par le mot suivant du fichier qui commence par sou. CTRL-P inverse le sens de parcours de la liste des mots. Avec une version de vim suffisament récente, la liste des mots possibles s'affiche en pop-up et vous pouvez la parcourir avec les touches "flèche" aussi bien qu'avec CTRL-N/P.

MONSTRUEUX : positionne le curseur sur la dernière modification du fichier

'.
ou, mieux
`.

'. : positionne au début de ligne de la dernière modification `. : encore plus fort, positionne sur l'emplacement exact de ladite dernière modification...

La calculette : vous la cherchiez, non ???

En mode insertion :

CTRL-R=10*81

insère 810...

Celle-là, ça fait un moment que vous la rêviez : rechercher sans tenir compte de la casse

/\cJean

recherche Jean ou jean ou JEan, etc.

Ce fichier sous le curseur, si je l'éditais

gf

ouvre le fichier dont le nom est sous le curseur

Cherche le mot sous le curseur en avant... ou en arrière

*

cherche en avant le mot qui est sous le curseur tandis que

#

fait la même recherche en arrière

C'est la sortie de cette commande qu'il faut que j'édite

#grep users /etc/passwd | awk -F: '{print $1}' | sort | vim -

édite le résultat de la commande grep users /etc/passwd | awk -F: '{print $1}' | sort

CHAUD, CHAUD : Faire agir une commande externe sur une sélection du fichier

Par exemple,

:26,100!grep -iv sarko

dégagera de votre fichier toutes les lignes entre la 26ème et la 100ème qui contiennent sarko indépendamment de la casse. Pour la même chose pour tout le fichier, c'est évidemment :

:%!grep -iv sarko

Attention CHAUD BOUILLANT : lancer depuis vim firefox sur la page de recherche google du mot sur le curseur

Ceci une fois posé dans votre .vimrc, un simple vg sur un mot quelconque du fichier édité et firefox vous ouvre la page de résultat de la recherche de ce mot dans google...

vmap g :<C-U>!firefox "http://www.google.fr/search?hl=fr&q=<cword>&btnG=Recherche+Google&meta=" >& /dev/null <CR><CR>

Explications...

  • vmap car macro en mode visual
  • g est la touche associée, qui va déclencher la macro
  • <C-U> va permettre de ne pas remplacer le mot courant par le résultat (vide) de la commande (j'ai mis un petit moment pour le trouver celui-là...)
  • ! : on lance une commande shell
  • remplacer firefox par le chemin complet s'il n'est pas dans votre $PATH
  • <cword> dans l'URL : c 'est ce qui permet de désigner en langage vim "le mot sur lequel est positionné le curseur"
  • on redirige vers /dev/null histoire de ne pas être pollué par d'éventuels messages générés par le lancement de la commande
  • <CR><CR> parce qu'il faut taper deux fois enter pour terminer cette commande

Cadeau : la même pour Wikipedia france : il faut taper cette fois vw sur le mot voulu pour l'activer :

vmap w :<C-U>!firefox "http://fr.wikipedia.org/wiki/" >& /dev/null <CR><CR>

[Ajout 7/5/2007] Dans le même esprit : ouvrir dans firefox l'URL sélectionnée en mode visuel Envoyé par strix/gérard bonneton, vimmeur averti, merci à lui :

vmap ,o :<C-U>!firefox "<cfile>" >& /dev/null <CR><CR>

Explications...

  • <cfile> dans l'URL : c'est ce qui permet de désigner en langage vim "le chemin sur lequel est positionné le curseur" : en pratique ça n'est pas exactement une URL... c'est pourquoi il faut sélectionner l'URL en mode visuel et non simplement se positionner dessus

La recherche c'est bien, la recherche incrémentale ET "highlighted", c'est mieux

Facile, posez dans votre .vimrc ces deux petites lignes

set incsearch           " recherche incrémentale
set hlsearch            " "highlighte" le dernier motif de recherche

La recherche incrémentale permet de positionner dynamiquement le curseur sur le motif de recherche tapé au fur et à mesure qu'on le tape. La recherche "highlightée" met en valeur le motif de recherche partout dans le fichier.

Incontournable : rouvrir le fichier avec le curseur positionné là où il était quand on l'a fermé

Un peu de code ésotérique supplémentaire dans votre .vimrc pour permettre ce comportement :

" When editing a file, always jump to the last known cursor position.
  " Don't do it when the position is invalid or when inside an event handler
  " (happens when dropping a file on gvim).
  autocmd BufReadPost *
    \ if line("'\"") > 0 && line("'\"") <= line("$") |
    \   exe "normal g`\"" |
    \ endif

Marre d'avoir tout votre texte décalé plein de tabulations quand vous copier-collez à la souris dans vim : here is the solution

Une commande à taper avant de copier-coller et le tour est joué

set paste

Prenez soin de taper

set nopaste

ensuite car l'option paste invalide pas mal de chose (from http://vim.dind inx.net/traduit/html/options.txt.php#'paste') :

Lorsque l'option 'paste' est activée :
        - les mappages en mode Insertion et Lignecmd sont annulés ;
        - les abréviations sont annulées ;
        - 'textwidth' est fixé à 0 ;
        - 'wrapmargin' est fixé à 0 ;
        - 'autoindent' est désactivé ;
        - 'smartindent' est désactivé ;
        - 'softtabstop' est fixé à 0 ;
        - 'revins' est désactivé ;
        - 'ruler' est désactivé ;
        - 'showmatch' est désactivé ;
        - 'formatoptions' est utilisé comme s'il était vide.
        Ces options conservent leur valeur, mais leur effet est annulé :
        - 'lisp' ;
        - 'indentexpr' ;
        - 'cindent'.

Du coup poser :set paste dans le .vimrc n'est pas forcément une bonne solution...

Pour avoir le background dark sous vim afin d'avoir une coloration syntaxique adapté au fond noir... mais pas sous gvim (qui vient de base avec un agr éable fond blanc ou gris)

Dans le .vimrc :

" En general j'edite sur background noir sauf sous gvim
if ! has("gui_running")
    se background=dark
endif

Le bouquet final, l'apothéose : LA CORRECTION ORTHOGRAPHIQUE !!!

Nécessite l'install d'aspell et du dictionnaire français (17 secondes : aptitude install aspell aspell-fr). Une fois que vous pouvez fair e en ligne de commande aspell -c et que vous avez le comportement voulu, c'est bon, vous êtes prêt pour l'ajouter dans vim. Dans le .vimrc :

" La correction orthographique, c'est très très bien
map ,C :w:!aspell -c %:e %

Explications :

  • map car c'est une macro pour le mode "normal" (pas insertion, ni visual)
  • ,C est ce qu'il faut taper pour active r la macro
  • :w = on sauve le fichier
  • :!aspell -c % : on applique aspell sur l'ensemble du fichier, ce qui va le modifier
  • :e % : on recharge le fichier une fois aspellisé Tout simplement terrible...