Espace d'Asher256

Vim : vimrc personnalisé pour programmeur / administrateur système Linux





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).
"
" Licence : GPL
"
" Site: https://www.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




Déjà 28 commentaires dans “Vim : vimrc personnalisé pour programmeur / administrateur système Linux”
  1. ga6ri3l

    Sympa !! merci !

  2. Yannick_LM

    C’est marrant, ça doit être le 15ème fichier vimrc que je lis, et j’y trouve toujours une option qui manquait.

    (en l’occurence, le isfname, qui va m’être bien utile).

    Sinon, le fichier que tu donnes n’est pas valide
    (tous les et autres ont disparu)
    Copier/coller trop hâtif dans le html ?

    PS:
    autocmd BufNewFile,BufRead PKGBUILD set syntax=sh

    Hé,hé un Archer 😉 ça nous fait deux points communs…

  3. Yannick_LM

    EDIT:

    C’est « tous les « symbole inférieur » F2 « symbole supérieur » et autres ont disparu.», qu’il fallait lire, bien sûr

  4. Asher256

    C’est bon, j’ai rajouté les « lt » et « gt » car les signes supérieur et inférieur n’étais pas pris en compte. Merci pour cette remarque Yannick !

    Aussi, je suis assez d’accord, un Vimrc, on y découvre toujours quelque chose de croustillant 🙂

    Pour ga6ri3l, de rien 😉

  5. Bastes

    Wow, sympa. Ca m’a donné l’impulsion dont j’avais besoin pour me remettre à vim. Merci !

  6. Hiéroglyphe

    Merci ! Il y a plein de petites fonctions utiles la dedans ^^

  7. Pezzos

    Salut, sympa ton .vimrc, le mien fait pitié à côté!
    Juste une question, comment fait-on pour dérouler les menus ? Je ne connaissais pas du tout et je n’arrive pas à les dérouler, Google ne m’aide pas trop…

    Merci en tous cas pour mon nouveau .vimrc !

  8. Rhyhann

    Très sympa, ton vimrc. Mais n’utiliserais-tu pas Gvim aux dernières nouvelles ?
    Et, au fait, j’aimerais savoir comment implémenter un copier-coller de bonne qualité (en effet, le clic-milieu indente à chaque ligne), et comment enlever les ~ en début de ligne.

  9. Rhyhann

    Tu devrais utiliser SimpleFold, c’est 100 fois mieux que le fold inclus de base…
    Et, au fait… Quel est le meilleur explorateur de fichiers (par listes déroulantes), et le meilleur trouveur de fichiers (en gros, on écrit un régex (ou un nom de fichier) et on a une liste de fichiers dans les sous-dossiers relatifs au mot-clé) ?

  10. chauffe-eau

    Les raccourcis clavier ! que du bonheur !!!

    Merci pour ton travail !

  11. sbz

    Salut, pour tous les gens qui découvrent la magie vim, ils peuvent se baser sur une configuration préétablie qui se nomme cream [1]. Mais bon quelque fois, c’est trop exhaustif, il convient donc juste de s’en inspirer ou alors passer sa vie dans :help 🙂

    @Asher256: Pour convertir un fichier au format HTML, il y a déjà une fonction définie :TOhtml. Ce qui est pratique c’est quelle peut être appliquée à un range ou en mode visual.

    voir :help TOhtml

    [1] http://cream.sourceforge.net/

  12. Asher256

    @sbz: merci pour ta suggestion !

    @Bastes, chauffe-eau: excellent !

    @Rhyhann: trouveur de fichiers ? Par exemple find ou grep ?

    @Rhyhann: pour que le clic du milieu ne fasse pas trop de soucis d’indentation lors du coller, désactive autoindent avec « set noai » (désactive aussi les autres indent si cela ne marche pas, comme cindent). À mon avis, le mieux est d’utiliser le « vrai coller » de Vim (pas celui du clic). Dans mon vimrc, il y a un raccourci, ctrl-p, qui permet cela. L’indentation reste intacte grâce à ce coller standard (similaire au ctrl-v d’autres éditeurs !).

    @Pezzos: dérouler le menu ? càd ? Tu parles peut-être des folds ? Si c’est le cas, utilise le raccourci « zo » pour ouvrir et « zc » pour fermer. Puis « zm » pour fermer le fold et tous les sous-fold.

  13. Pezzos

    Merci pour ton conseil, je m’en vais tester !
    (oui, je parlais des espèces de titre qui permettent de cacher toute un partie du texte, ça peux être pratique mais quand on ne sait pas s’en servir…)

  14. Skippy the Kangoo

    Cool, je me mets ça sous le bras.

    Je ne l’ai pas sous la main (pas ma machine) masi j’ai fait pareil que toi pour les PKGBUILD (archlinux4ever), mais en ouvrant le .install si il existe.

    Maintenant, truc bien, xce serais d’implémenter ,la syntaxe de VIM dans les forum et autres posts, j’ai trops de mal à ne pas faire :wq pour enregistrer mon post… 🙂

  15. Asher256

    Cela existe probablement…

    Par exemple, j’ai cherché avec le mot clé « bbcode » et cela me donné déjà deux scripts : http://www.vim.org/scripts/script_search_results.php?keywords=bbcode&script_type=&order_by=rating&direction=descending&search=search 😉 .

  16. stanche

    si qqn connait un moyen simple pour transformer tout les commentaire c++ en « // » par des commentaire c en « /* */ » je suis preneur.
    (J’ai un prof de c extremiste, et avec « gcc -ansi -pedantic » les « // » donnent des erreurs, et j’ai pas envie de changer mes habitudes)

    Tres bon article au passage j’ai repris la config, juste rajouter le jeu de couleur desert « colors desert » (mais c’est une question de gout)

  17. Asher256

    Bonjour. Voilà un expression rationnelle faite rien que pour toi Stanche ^_^ :
    :%s/^\/\/\(.*\)/\/\* \1 *\//g

    Merci pour l’appréciation sur l’article.

  18. stanche

    geniale, faudra que je me penche sur les expr rationnel un de ces 4 (tjrs mieux à faire c’est bizarre).
    Je suppose que si je met :
    autocmd BufWrite * silent! %s/^\/\/\(.*\)/\/\* \1 *\//g
    dans mon vimrc ça le fera à chaque enregistrement.
    ça doit pas remplacer si je met le commentaire en fin de ligne de code mais vu que ça doit être compliqué à gérer je vais juste eviter de faire ça.
    Merci 1000 fois ça va me simplifier les choses

  19. ben

    Si je n’édite pas les fichiers en root, il m’indique une erreur à la sauvegarde (impossible de générer le fichier de sauvegarde)
    Pourtant HOME/.vim/ n’est pas un endroit protégé en écriture….

  20. Asher256

    Lance la commande :
    chown user:user $HOME/.vim*

    (bien sûr, remplace user:user par ton user et ton groupe)

  21. ben

    Merci de ta réponse rapide….
    Mais ca ne marche pas…

    D’ailleurs je comprend pas pourquoi je devrais faire ça, ce dossier m’appartient déjà…

    Bizarre…

  22. Asher256

    Que te donne la commande :
    ls -ld $HOME/.vimrc $HOME/.vim $HOME/.vim/*

    ?

  23. ben

    xD

    ok… autant pour moi, le dossier backup était owned par root

    mon vimrc se trouve dans /etc/vim/ , je doit être root pour le modifier, il aura donc créé le dossier backup en root

  24. ben

    au passage,
    comment déplacer le fichier de config de vim dans mon home ? ca serait quand meme plus pratique

  25. Asher256

    😀 Cool alors Ben.

    (Mais pourquoi tu avais dit que chown n’avait pas marché ? Il devait, pourtant !

  26. ben

    chown aurait du marcher en effet …
    Il n’a pas pris les dossier inclus dans /.vim/, il a juste considéré celui-ci…

    pourtant j’avais mis l’*
    … mystère

    Merci en tout cas pour tes réponse rapides, précises et sympathiques =D

  27. Asher256

    Re Ben,

    Pour avoir ton répertoire à toi :

    mkdir ~/trash
    mv ~/.vim ~/trash
    mkdir ~/.vim
    cp /etc/vim/* ~/.vim

    Après, si le contenu de ~/trash n’est plus utile, supprime le aussi 😉 .

    ++ !