Vim : vimrc personnalisé pour programmeur / administrateur système Linux
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
Sympa !! merci !
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…
EDIT:
C’est « tous les « symbole inférieur » F2 « symbole supérieur » et autres ont disparu.», qu’il fallait lire, bien sûr
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 😉
Wow, sympa. Ca m’a donné l’impulsion dont j’avais besoin pour me remettre à vim. Merci !
Merci ! Il y a plein de petites fonctions utiles la dedans ^^
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 !
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.
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é) ?
Les raccourcis clavier ! que du bonheur !!!
Merci pour ton travail !
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/
@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.
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…)
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… 🙂
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 😉 .
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)
Bonjour. Voilà un expression rationnelle faite rien que pour toi Stanche ^_^ :
:%s/^\/\/\(.*\)/\/\* \1 *\//g
Merci pour l’appréciation sur l’article.
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
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….
Lance la commande :
chown user:user $HOME/.vim*
(bien sûr, remplace user:user par ton user et ton groupe)
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…
Que te donne la commande :
ls -ld $HOME/.vimrc $HOME/.vim $HOME/.vim/*
?
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
au passage,
comment déplacer le fichier de config de vim dans mon home ? ca serait quand meme plus pratique
😀 Cool alors Ben.
(Mais pourquoi tu avais dit que chown n’avait pas marché ? Il devait, pourtant !
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
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 😉 .
++ !