Vim / gVim, éditeur texte, une icône

Vim a depuis assez longtemps été mon éditeur de texte préféré !

C’est un peu mon couteau suisse de l’édition de texte. Je l’utilise pour rédiger mes notes, modifier les fichiers de configuration de mes serveurs distants ou programmer (GShutdown ou Jargon Informatique ont été entièrement écrits avec cet éditeur !).

Les aspects qui m’ont toujours séduits dans cet éditeur c’est son côté geek, avec ses centaines de fonctions permettant de faire tout et n’importe quoi, et son extensibilité (j’en parlerai dans un autre billet, pour vous faire découvrir les plugins à ne pas rater), grâce aux plugins.

Une des choses légèrement ennuyantes avec Vim, quand on débute, c’est qu’il n’est pas par défaut configuré pour qu’on profite de toutes ses jolies fonctionnalités ; qui devraient pourant être activées d’office ! C’est pour cette raison que, avec le temps, j’ai créé puis amélioré mon vimrc, pour que Vim me permette de mieux travailler.

Pour vous faire gagner du temps, j’ai décidé de mettre en ligne mon vimrc, pour que tout intéressé puisse l’étudier, l’utiliser, le modifier, etc. et pourquoi pas proposer des améliorations !

Grâce au Vimrc disponible ci-dessous, vous profiterez des avantages suivants :

  • Des backups automatiques dans le répertoire ~/.vim/backup (pour ne pas encombrer vos répertoires de fichiers de sauvegarde finissant avec ~ par exemple)
  • Une indentation activée automatiquement lorsque vous éditerez un code source. Idem pour la colorisation syntaxique.
  • Quand vous chercherez dans votre texte avec un mot-clé, ce mot-clé se voit attribué une couleur de fond.
  • Les fichiers avec les extensions *.o, *.dll, *.so et *.a sont ignorés, quand vous utilisez l’astérisque (gain de temps pour sélectionner le fichier qui vous intéresse).
  • Quand vous utilisez l’astérisque et le bouton tab, pour sélectionner un fichier par exemple, un menu horizontal apparaît dans la barre des status, permettant de mieux sélectionner les fichiers.
  • Les PDFs sont lus d’une manière transparente, en utilisant pdftotext (logiciel à installer)
  • Des raccourcis claviers utiles sont ajoutés, comme « ,lf », pour avoir la correction orthographique en français, « ,le », pour avoir celle en anglais, « ,ln » pour désactiver la correction orthographique, « ,t » pour ouvrir un nouvel onglet, « ,w » pour le fermer, « ,m » pour cacher le menu de gvim, ctrl-a pour tout sélectionner, ctrl-c pour copier et ctrl-p pour coller et « ,h » pour convertir un code source colorié en HTML.
  • Et bien d’autres options, que je vous invite à découvrir dans le script (que j’ai commenté pour vous rendre sa compréhension plus facile. Néanmoins, à la moindre lacune, n’hésitez pas à passer par l’aide de vim « :help » ou à poster un commentaire !)

Pour installer le script Sous GNU/Linux, mettez son contenu dans le fichier « ~/.vimrc ».

Le vimrc personnalisé (qui est aussi disponible en téléchargement) :

scriptencoding utf-8
"=============================================================================
"
" Fichier de configuration VIM personnalisé (meilleur pour la programmation,
" raccourcis clavier utiles, etc. pour mieux profiter de cet excellent
" éditeur).
"
" Auteur : Asher256
" Email  : contact@asher256.com
"
" Licence : GPL
"
" Site: http://blog.asher256.com/
"
"=============================================================================

" Options {{{1

" Options Internes {{{2

" Mode non compatible avec Vi
set nocompatible 

" Le backspace
set backspace=indent,eol,start

" Activer la sauvegarde
set backup

" un historique raisonnable
set history=100

" undo, pour revenir en arrière
set undolevels=150

" Suffixes à cacher
set suffixes=.jpg,.png,.jpeg,.gif,.bak,~,.swp,.swo,.o,.info,.aux,.log,.dvi,.bbl,.blg,.brf,.cb,.ind,.idx,.ilg,.inx,.out,.toc,.pyc,.pyo

" Backup dans ~/.vim/backup
if filewritable(expand("~/.vim/backup")) == 2
    " comme le répertoire est accessible en écriture,
    " on va l'utiliser.
	set backupdir=$HOME/.vim/backup
else
	if has("unix") || has("win32unix")
        " C'est c'est un système compatible UNIX, on
        " va créer le répertoire et l'utiliser.
		call system("mkdir $HOME/.vim/backup -p")
		set backupdir=$HOME/.vim/backup
	endif
endif

" Inclusion d'un autre fichier avec des options
if filereadable(expand("~/.vimrc_local.vim"))
    source ~/.vimrc_local.vim
endif

" Activation de la syntaxe
if has("syntax")
    syntax on
endif

" Quand un fichier est changé en dehors de Vim, il est relu automatiquement
set autoread

" Aucun son ou affichage lors des erreurs
set errorbells
set novisualbell
set t_vb=

" Quand une fermeture de parenthèse est entrée par l'utilisateur,
" l'éditeur saute rapidement vers l'ouverture pour montrer où se
" trouve l'autre parenthèse. Cette fonction active aussi un petit
" beep quand une erreur se trouve dans la syntaxe.
set showmatch
set matchtime=2

" Afficher la barre d'état
set laststatus=2

" }}}2

" Options de recherche {{{2 

" Tout ce qui concerne la recherche. Incrémentale
" avec un highlight. Elle prend en compte la
" différence entre majuscule/minuscule.
set incsearch
set noignorecase
set infercase

" Quand la rechercher atteint la fin du fichier, pas
" la peine de la refaire depuis le début du fichier
set hlsearch

" }}}2

" Options d'affichage texte {{{2

" Ne pas nous afficher un message quand on enregistre un readonly
set writeany

" Afficher les commandes incomplètes
set showcmd

" Afficher la position du curseur
set ruler

" Désactiver le wrapping
set nowrap

" Options folding
set foldmethod=marker

" Un petit menu qui permet d'afficher la liste des éléments
" filtrés avec un wildcard
set wildmenu
set wildignore=*.o,*#,*~,*.dll,*.so,*.a
set wildmode=full

" Format the statusline
set statusline=%F%m\ %r\ Line:%l\/%L,%c\ %p%%

" }}}2

" Options d'affichage GUI {{{2

" Configuration de la souris en mode console
" ="" pas de souris par défaut
"set mouse=a

" Améliore l'affichage en disant à vim que nous utilisons un terminal rapide
set ttyfast

" Lazy redraw permet de ne pas mettre à jour l'écran
" quand un script vim est entrain de faire une opération
set lazyredraw

if has("gui_running")
	map <S-Insert> <MiddleMouse>
	map <S-Insert> <MiddleMouse>

	set mousehide " On cache la souris en mode gui
	set ch=2 " ligne de commande dans deux ligne
endif

" }}}2

" Noms des fichiers {{{2

" faire en sorte que le raccourci CTRL-X-F
" marche même quand le fichier est après
" le caractère égal. Comme :
" variable=/etc/<C-XF>
set isfname-==

" }}}2

" }}}1

" Autocmd {{{1

set cindent
"set autoindent
"set smartindent

if has("autocmd")
	" Détection auto du format
	" + activer indent
	filetype plugin indent on

    augroup divers " {{{2
        au!
		" Textwidth de 78 pour tous les fichiers texte
		autocmd FileType text setlocal textwidth=78

		" Remet la position du curseur comme elle était avant
		autocmd BufReadPost *
		\ if line("'\"") > 0 && line("'\"") <= line("$") |
		\   exe "normal g`\"" |
		\ endif

        " La valeur des tabs par défaut
        autocmd BufNewFile,BufRead * call ChangeTabSize(4, 0)

		" Ne pas faire de wrap dans les fichiers ChangeLog
		autocmd BufNewFile,BufRead ChangeLog set nowrap textwidth=0
		autocmd BufNewFile,BufRead ChangeLog call ChangeTabSize(8, 0)

        " PKGBUILD
		autocmd BufNewFile,BufRead PKGBUILD set syntax=sh
    augroup END " }}}2

    augroup pdf " {{{2
        au!
		autocmd BufReadPre *.pdf set ro
		autocmd BufReadPost *.pdf %!pdftotext -nopgbrk "%" - | fmt -csw78
    augroup END " }}}2
endif

" }}}1

" Fonctions {{{1

" Fonctions utilisée par vimrc {{{2

function! ChangeTabSize(tab_size, expandtab)
    execute("set tabstop=".a:tab_size." softtabstop=".a:tab_size." shiftwidth=".a:tab_size)

    if a:expandtab != 0
        execute("set expandtab")
    else
        execute("set noexpandtab")
    endif
endfunction

" }}}2

" Les fonctions utiles pour l'utilisateur {{{2

" Aller dans le répertoire du fichier édité.
function! ChangeToFileDirectory()
	if bufname("") !~ "^ftp://" " C'est impératif d'avoir un fichier local !
		lcd %:p:h
	endif
endfunction

map ,fd :call ChangeToFileDirectory()<CR>

" Entrer la commande ":e" dans le répertiore du fichier édité
if has("unix")
    map ,e :e <C-R>=expand("%:p:h") . "/" <CR>
else
    map ,e :e <C-R>=expand("%:p:h") . "\" <CR>
endif

" }}}2

" }}}1

" Raccourcis clavier {{{1

" Vim 7 spell checker
if has("spell")
    setlocal spell spelllang=
    " Language : FR
    map ,lf :setlocal spell spelllang=fr<cr>
    " Language : EN
    map ,le :setlocal spell spelllang=en<cr>
    " Language : Aucun
    map ,ln :setlocal spell spelllang=<cr>
endif

set spellsuggest=5
"autocmd BufEnter *.txt set spell
"autocmd BufEnter *.txt set spelllang=fr

" Tabs
map ,t :tabnew<cr>
map ,w :tabclose<cr>
imap <C-t> <Esc><C-t>
imap <C-w> <Esc><C-w>
map <tab> gt 

" Cacher le menu
map ,m :set guioptions=+M<cr>

" Mode normal
map ,mn :set guifont=<cr>

" Mode programmation
map ,mp :set guifont=Monospace\ 9<cr>

" Sélectionner tout
map <C-a> ggVG

" Copier (le gv c'est pour remettre le sélection)
map <C-c> "+ygv

" Couper
map <C-x> "+x

" Coller
map <C-p> "+gP

" Désactiver le highlight (lors d'une recherche par exemple)
map <F2> :let @/=""<cr>

" Convertir un html
map ,h :runtime syntax/2html.vim<cr>

" encoder rapidement
map ,c ggVGg?

" }}}1

" Les plugins Vim et leurs options {{{1

" Gérer les fichiers man
runtime ftplugin/man.vim
" Encoding
set encoding=utf-8
" }}}1
" vim:ai:et:sw=4:ts=4:sts=4:tw=78:fenc=utf-8:foldmethod=marker

Termes utilisés pour trouver cet article :

  • vimrc
  • vim extension cream
  • vim vimrc
  • utiliser vimsous unix
  • vim rc
  • VIM Windows
  • découper vimrc
  • configurer vimrc
  • gvimrc
  • windows vim orthographe