vim/vimrc

979 lines
34 KiB
VimL
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

" ----------------------------------------------------------------------
" | Fichiers de configuration de vim |
" | Emplacement : ~/.vim/vimrc |
" | Auteur : Gardouille |
" | Version : 1.12 |
" | |
" | ----------------------- Modification à apporter -------------------|
" | Modifications à apporter: |
" | - voir le pliage/dépliage (za, zm, zr, ...) |
" | - voir l'option d'encodage (encoding, ...) |
" | - remapper l'incrémentation sur un chiffre avec CTRL-A |
" | - permettre une incrémentation sur les lettres, hexa, ... |
" | en plus des chiffres |
" -------------------------------------------------------------------- |
" | |
" | --------------------------------------- Liens utiles ------------- |
" | Liens utiles: |
" | http://www.debian-fr.org/vim-t8605.html |
" | http://www.swaroopch.com/notes/Vim_fr:Table_des_Mati%C3%A8res |
" | http://www.rayninfo.co.uk/vimtips.html |
" | http://www.vim.org/tips/index.php |
" | http://linuxfr.org/news/vim-f%C3%AAte-son-20e%C2%A0anniversaire |
" | http://vimdoc.sourceforge.net/htmldoc/map.html#mapmode-n |
" ----------------------------------------------------------------------
""""""""""""""""""""""""""""""""""""""""""""""""
" Diverses options
""""""""""""""""""""""""""""""""""""""""""""""""
" Thème de couleur par défaut:
"colorscheme peachpuff
" Autre thèmes possibles: desert, delek, zellner, torte, elflord, evening, pablo, morning, peachpuff, blue, murphy, ron, zellner, darkblue, desert, koehler, and shine
"liste des couleur : ll /usr/share/vim/vim7*/colors/
"colorscheme torte
let g:hybrid_use_Xresources = 1 " le colorscheme utilise les couleurs du .Xressources
set background=dark
colorscheme hybrid
syntax on " activation de la coloration syntaxique
set number " numérotation des lignes
hi LineNr ctermbg=none ctermfg=2
"set autoindent " indentation automatique avancée
"set smartindent " indentation plus intelligente
"set backspace=indent,eol,start " autorisation du retour arrière
set bs=2 " redéfinition du backspace
set history=50 " fixe l'historique à 50 commandes maxi
set ruler " affiche la position courante au sein du fichier
set showcmd " affiche la commande en cours
set shiftwidth=2 " taille des tabulations (nb d'espace)
set softtabstop=2 " taille des tabulations mixtes (tabulations et espaces)
set tabstop=2 " taille des tabulations à l'affichage (nb d'espace)
set expandtab " transforme les tabulations en espaces
set showmatch " vérification présence (, [ ou { à la frappe de ), ] ou }
filetype plugin indent on " détection automatique du type de fichier
autocmd FileType text setlocal textwidth=80 " les fichiers de type .txt sont limités à 80 caractères par ligne
autocmd FileType tex setlocal textwidth=80 " les fichiers de type .tex sont limités à 80 caractères par ligne
set fileformats=unix,mac,dos " gestion des retours chariot en fonction du type de fichier
set hlsearch " surligne les résultats de la recherche
" set nohls " ne pas surligner les résultats de la recherche
set incsearch " recherche en même temps que la saisie
set ignorecase " ne pas prendre en compte la casse pour les recherches
"set noic " Prendre en compte la casse pour les recherches
set smartcase " recherche respectueuse de la case quand une majuscule est saisie
set cursorline " met en avant la ligne courante
"set cursorcolumn " met en avant la colonne courante
set so=2 " Place le curseur sur la 2ème ligne lors de mouvements verticaux
set pt=<F11> " évite la double indentation lors de c/c
set t_Co=256 " pour tmux 256 colors
set cpoptions+=$ " ajoute un $ pour indiquer la fin d'un remplacement
set title " Modifier le titre du terminal (ne semble pas fonctionner avec screen)
set autochdir " Modifie le répertoire courant pour vim en fonction du fichier ouvert
set wildignore=*.swp,*.bak " Liste des fichiers ignorés lors de l'auto-complétion
set virtualedit=all " Permet de se déplacer la ou il n'y a pas de caractères
set formatoptions+=awt
"set colorcolumn=81 " Coloration bar caractère 80
set wrapmargin=0
" Encodage par défaut des buffers et des fichiers
set encoding=utf-8
set fileencoding=utf-8
" Path pour la recherche de fichier avec :find, :sfind et :tabfind
" :find ouvrira à la place du fichier en cours le fichier trouvé
" :sfind splittera l'écran
" :tabfind ouvrira le fichier dans un nouvel onglet
set path=.,/usr/include,/usr/local/include
" Couleur des éléments
"hi StatusLine ctermfg=black ctermbg=green
"hi TabLineFill ctermfg=black ctermbg=grey
"hi TabLine ctermfg=black ctermbg=red
"hi TabLineSel ctermfg=green ctermbg=black
""""""""""""""""""""""""""""""""""""""""""""""""
" Touche MapLeader :
""""""""""""""""""""""""""""""""""""""""""""""""
" Activation de la touche mapleader qui permet de faire des combinaisons
" supplémentaires
let mapleader = ","
let g:mapleader = ","
" Sauvegarde rapide
nmap <leader>w :w<cr>
imap <leader>w <esc>:w<cr>
nmap <leader>q :wq<cr>
imap <leader>q <esc>:wq<cr>
map <leader>a <Esc>:wa<CR>
" Sauvegarder et exécuter le fichier courant
nmap <leader>x :w<cr>:!./"%"<cr>
" Édition rapide de vimrc avec <leader>+e
map <leader>e :e! ~/.vim/vimrc<cr>
""" Buffers
" Gestion des splits
map <C-w><Space> :split<Space>
map <C-w><Return> :vsplit<Space>
" Navigation
" Détails sur les buffers: http://vim-fr.org/index.php/Buffer
"map <leader>p :bp<cr>
"map <leader>s :bn<cr>
map <leader>b <Esc>:b<Space>
"Navigation splits
map <leader>j <C-w>j
map <leader>h <C-w>h
map <leader>k <C-w>k
map <leader>l <C-w>l
" Save with sudo permissions
nmap <leader>s :w !sudo tee %<cr>
imap <leader>s <esc>:w !sudo tee %<cr>
""""""""""""""""""""""""""""""""""""""""""""""""
" UN PEU D'EXERCICE
" H pour <-
" L pour ->
" J pour flèche bas
" K pour flèche haut
""""""""""""""""""""""""""""""""""""""""""""""""
"Désactiver les flèches
" Mode commande
nmap <right> <esc>
nmap <left> <esc>
nmap <up> <esc>
nmap <down> <esc>
" Mode insertion:
imap <right> <esc>
imap <left> <esc>
imap <up> <esc>
imap <down> <esc>
""""""""""""""""""""""""""""""""""""""""""""""""
" Mapping - Raccourcis clavier
""""""""""""""""""""""""""""""""""""""""""""""""
"Désactive le surlignage des résultats d'une recherche en utilisant CTRL-n
nnoremap <silent> <C-N> :set hlsearch!<cr>:set hlsearch?<cr>
"Ajoute une ligne avant le curseur sans passer en mode insertion
nnoremap <Space><Enter> o<ESC>
"Ajoute une ligne après le curseur sans passer en mode insertion
map <Enter> O<ESC>
" Activer/désactiver la surbrillance des recherches avec F2
noremap <F2> :set hlsearch!<cr>:set hlsearch?<cr>
" Activer/désactiver la correction avec F3
noremap <F3> :set spell!<cr>:set spell?<cr>
" Activer/désactiver le mode collage
noremap <F5> :set paste!<cr>:set paste?<cr>
" Remap de Echap sur jj
imap jj <ESC>
""""""""""""""""""""""""""""""""""""""""""""""""
" Vim-Scripts :
""""""""""""""""""""""""""""""""""""""""""""""""
"##########################
" Vundle :
"##########################
" https://github.com/VundleVim/Vundle.vim
" IF not available, use:
" git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/vundle
set nocompatible " be iMproved
let has_vundle=1
let vundle_readme=expand('~/.vim/bundle/Vundle.vim/README.md')
if !filereadable(vundle_readme)
echo "Installing Vundle…"
echo ""
silent !mkdir -p ~/.vim/bundle
silent !git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
let has_vundle=0
endif
filetype off " required!
set rtp+=~/.vim/bundle/Vundle.vim/
call vundle#begin()
" Add all bundles you want
" Vundle plugin (required)
Plugin 'VundleVim/Vundle.vim'
" Snippets like textmate
Plugin 'MarcWeber/vim-addon-mw-utils'
Plugin 'tomtom/tlib_vim'
Plugin 'garbas/vim-snipmate'
Plugin 'honza/vim-snippets'
" Display a tree of directories
Plugin 'scrooloose/nerdtree'
" Super easy commenting, toggle comments, …
Plugin 'scrooloose/nerdcommenter'
" <Tab> everything
Plugin 'ervandew/supertab'
" Awesome syntax checker
" REQUIREMENTS: See :h syntastic-intro
Plugin 'scrooloose/syntastic'
" Advanced auto-completion system
Plugin 'Shougo/neocomplcache'
" Make vim mor Puppet friendly
Plugin 'rodjek/vim-puppet'
" Auto alignment (for Puppet for example)
Plugin 'godlygeek/tabular'
" A pretty statusline, bufferline integration
Plugin 'itchyny/lightline.vim'
Plugin 'bling/vim-bufferline'
"Plugin 'bling/vim-airline'
"Bundle 'edkolev/tmuxline.vim'
" Give viual aid to navigate marks
Plugin 'jacquesbh/vim-showmarks'
" Furry finder (files, mru, …)
Plugin 'kien/ctrlp.vim'
" Undo history visualizer
Plugin 'mbbill/undotree'
" Autoclose (, ", …
Plugin 'Townk/vim-autoclose'
" Functions, class data …
" REQUIREMENTS: (exuberant)-ctags
Plugin 'majutsushi/tagbar'
" Git wrapper inside Vim
Plugin 'tpope/vim-fugitive'
" Glorious colorscheme
Plugin 'w0ng/vim-hybrid'
" Finish Vundle stuff
call vundle#end()
" Auto install all plugins
if has_vundle == 0
echo "Installing Plugins/Bundles, please ignore key map error messages"
echo ""
silent !vim +PluginInstall +qall
":silent! PluginInstall
":qa
endif
""" User interface {{{
""" Custom highlighting, where NONE uses terminal background {{{
function! CustomHighlighting()
highlight Normal ctermbg=NONE
highlight NonText ctermbg=NONE
highlight LineNr ctermbg=NONE
highlight SignColumn ctermbg=NONE
highlight SignColumn guibg=#151515
highlight CursorLine ctermbg=235
endfunction
call CustomHighlighting()
""" }}}
""" }}}
"##########################
" SnipMate
"##########################
"Plugin "MarcWeber/vim-addon-mw-utils"
"Plugin "tomtom/tlib_vim"
"Plugin "garbas/vim-snipmate"
" Optional:
"Plugin "honza/vim-snippets"
filetype plugin indent on " required!
"##########################
" Pathogen :
"##########################
" http://github.com/tpope/vim-pathogen
"Plugin "tpope/vim-pathogen"
"execute pathogen#infect()
"##########################
" Nerd_tree :
"##########################
" https://github.com/scrooloose/nerdtree
" Nerd_tree - Permet d'afficher une arborescence du répertoire courant.
"Plugin "scrooloose/nerdtree"
" Raccourcis de la commande avec F10
map <F10> :NERDTreeToggle<cr>
" Et <leader>n
nmap <leader>n :NERDTreeToggle<cr>
" Placer le volet à droite
let NERDTreeWinPos='right'
"##########################
" Nerd_commenter :
"##########################
" https://github.com/scrooloose/nerdcommenter
" Mettre en commentaire une ligne
" Également disponible dans le paquet vim-scripts
"Plugin "scrooloose/nerdcommenter"
" Commentaire basique, mais permet également de décommenter (Attention, il y a
" un espace avec le C!)
" Commenter/décommenter une ligne
map ,, <leader>c<space>
"map <F7> <Leader>c
imap <F7> <esc><F7>
" Commentaire plus sexy, mais impossible à décommenter
map <F8> <Leader>cs
" Note, utilisé le mode visuel ligne SHIFT+V ou le mode visuel bloc CTRL+V
"##########################
" Supertab-continued :
"##########################
" http://github.com/ervandew/supertab
" SuperTab offre une autocomplétion amélioré.
" http://www.vim.org/scripts/script.php?script_id=182
"Plugin "ervandew/supertab"
" CTRL-N en mode insertion pour rechercher le suivant
" CTRL-X - CTRL-L: rechercher une ligne complète à partir du début
" CTRL-X - CTRL-K: rechercher dans le dictionnaire
" Permet notamment de compléter avec des noms de variables déjà définies.
" Pas de configuration spécifiques
"imap <leader>d 
"imap <leader>l 
"##########################
" Syntastic :
"##########################
" https://github.com/scrooloose/syntastic
"Plugin "scrooloose/syntastic"
" Won't work ...
let g:syntastic_mode_map = { 'mode': 'active',
\ 'active_filetypes': ['markdown', 'php', 'ruby', 'sh', 'zsh'],
\ 'passive_filetypes': ['puppet', 'sql', 'vim'] }
"let g:syntastic_puppet_checkers = ['puppet']
let g:syntastic_puppet_checkers = ['puppetlint']
"##########################
" Neocomplcache :
"##########################
" http://github.com/Shougo/neocomplcache
"Plugin "Shougo/neocomplcache"
" Use neocomplcache.
let g:neocomplcache_enable_at_startup = 1
" Set minimum syntax keyword length.
let g:neocomplcache_min_syntax_length = 3
let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'
"##########################
" Puppet :
"##########################
" github.com/rodjek/vim-puppet.git
"Plugin "rodjek/vim-puppet"
"##########################
" Tabular :
"##########################
" https://github.com/godlygeek/tabular
"Plugin "godlygeek/tabular"
"##########################
" Airline :
"##########################
" https://github.com/bling/vim-airline
"Plugin 'bling/vim-airline'
" Toujours afficher la barre de statut
"set laststatus=2 " always show statusline
"" Smarter tab line
"let g:airline#extensions#tabline#enabled = 1
""let g:airline#extensions#tabline#left_sep = 'ˇ'
""let g:airline#extensions#tabline#left_alt_sep = 'v'
"let g:airline_powerline_fonts = 1
""let g:airline_theme='molokai'
""let g:airline_theme='lucius'
"let g:airline_theme='monochrome'
"##########################
" Tmuxline :
"##########################
" https://github.com/edkolev/tmuxline.vim
"Plugin 'edkolev/tmuxline.vim'
"##########################
" Lightline :
"##########################
""" Lightline {{{
set laststatus=2 " always show statusline
let g:lightline = {
\ 'colorscheme': 'jellybeans',
\ 'active': {
\ 'left': [
\ ['mode', 'paste'],
\ ['readonly', 'fugitive'],
\ ['ctrlpmark', 'bufferline']
\ ],
\ 'right': [
\ ['lineinfo'],
\ ['percent'],
\ ['fileformat', 'fileencoding', 'filetype', 'syntastic']
\ ]
\ },
\ 'component': {
\ 'paste': '%{&paste?"!":""}'
\ },
\ 'component_function': {
\ 'mode' : 'MyMode',
\ 'fugitive' : 'MyFugitive',
\ 'readonly' : 'MyReadonly',
\ 'ctrlpmark' : 'CtrlPMark',
\ 'bufferline' : 'MyBufferline',
\ 'fileformat' : 'MyFileformat',
\ 'fileencoding' : 'MyFileencoding',
\ 'filetype' : 'MyFiletype'
\ },
\ 'component_expand': {
\ 'syntastic': 'SyntasticStatuslineFlag',
\ },
\ 'component_type': {
\ 'syntastic': 'middle',
\ },
\ 'subseparator': {
\ 'left': 'ᑄ', 'right': 'ᑁ'
\ }
\ }
let g:lightline.mode_map = {
\ 'n' : ' Normal ',
\ 'i' : ' Insert ',
\ 'R' : ' Replace ',
\ 'v' : ' Visual ',
\ 'V' : 'Visual-L',
\ 'c' : ' C ',
\ "\<C-v>" : 'Visual-B',
\ 's' : ' Sub ',
\ 'S' : 'Sub-L',
\ "\<C-s>" : 'Sub-B',
\ '?' : ' ' }
function! MyMode()
let fname = expand('%:t')
return fname == '__Tagbar__' ? 'Tagbar' :
\ fname == 'ControlP' ? 'CtrlP' :
\ winwidth('.') > 60 ? lightline#mode() : ''
endfunction
function! MyFugitive()
try
if expand('%:t') !~? 'Tagbar' && exists('*fugitive#head')
let mark = '± '
let _ = fugitive#head()
return strlen(_) ? mark._ : ''
endif
catch
endtry
return ''
endfunction
function! MyReadonly()
return &ft !~? 'help' && &readonly ? '≠' : '' " or ⭤
endfunction
function! CtrlPMark()
if expand('%:t') =~ 'ControlP'
call lightline#link('iR'[g:lightline.ctrlp_regex])
return lightline#concatenate([g:lightline.ctrlp_prev, g:lightline.ctrlp_item
\ , g:lightline.ctrlp_next], 0)
else
return ''
endif
endfunction
function! MyBufferline()
call bufferline#refresh_status()
let b = g:bufferline_status_info.before
let c = g:bufferline_status_info.current
let a = g:bufferline_status_info.after
let alen = strlen(a)
let blen = strlen(b)
let clen = strlen(c)
let w = winwidth(0) * 4 / 11
if w < alen+blen+clen
let whalf = (w - strlen(c)) / 2
let aa = alen > whalf && blen > whalf ? a[:whalf] : alen + blen < w - clen || alen < whalf ? a : a[:(w - clen - blen)]
let bb = alen > whalf && blen > whalf ? b[-(whalf):] : alen + blen < w - clen || blen < whalf ? b : b[-(w - clen - alen):]
return (strlen(bb) < strlen(b) ? '...' : '') . bb . c . aa . (strlen(aa) < strlen(a) ? '...' : '')
else
return b . c . a
endif
endfunction
function! MyFileformat()
return winwidth('.') > 90 ? &fileformat : ''
endfunction
function! MyFileencoding()
return winwidth('.') > 80 ? (strlen(&fenc) ? &fenc : &enc) : ''
endfunction
function! MyFiletype()
return winwidth('.') > 70 ? (strlen(&filetype) ? &filetype : 'no ft') : ''
endfunction
let g:ctrlp_status_func = {
\ 'main': 'CtrlPStatusFunc_1',
\ 'prog': 'CtrlPStatusFunc_2',
\ }
function! CtrlPStatusFunc_1(focus, byfname, regex, prev, item, next, marked)
let g:lightline.ctrlp_regex = a:regex
let g:lightline.ctrlp_prev = a:prev
let g:lightline.ctrlp_item = a:item
let g:lightline.ctrlp_next = a:next
return lightline#statusline(0)
endfunction
function! CtrlPStatusFunc_2(str)
return lightline#statusline(0)
endfunction
let g:tagbar_status_func = 'TagbarStatusFunc'
function! TagbarStatusFunc(current, sort, fname, ...) abort
let g:lightline.fname = a:fname
return lightline#statusline(0)
endfunction
function! s:syntastic()
SyntasticCheck
call lightline#update()
endfunction
augroup AutoSyntastic
autocmd!
execute "autocmd FileType " .
\join(g:syntastic_mode_map["active_filetypes"], ",") .
\" autocmd BufWritePost <buffer> :call s:syntastic()"
augroup END
""" }}}
""""""""""""""""""""""""""""""""""""""""""""""""
" Paramétrage de exuberant-ctags
"http://ngressier.developpez.com/articles/vim/vim-plugin-taglist/#LC
"Indispensable pour le bon fonctionnement du plugin Taglist
"""""""""""""""""""""""""""""""""""""""""""""""""
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
"##########################
" Showmark :
"##########################
" https://github.com/jacquesbh/vim-showmarks
"Plugin 'jacquesbh/vim-showmarks'
" Show fucking marks
noremap ' :ShowMarksOnce<cr> '
"##########################
" CTRL P :
"##########################
" https://github.com/kien/ctrlp.vim
"Plugin 'kien/ctrlp.vim'
"##########################
" undo-tree :
"##########################
" https://github.com/mbbill/undotree
"Plugin 'mbbill/undotree'
" UndoTree
map <leader>u :UndotreeToggle<CR> " Mapping pour l'activer/désactiver
"##########################
" auto-close :
"##########################
" Fermeture automatique des (, [, {, ...
" https://github.com/Townk/vim-autoclose
"Plugin 'Townk/vim-autoclose'
" Disable auto-close
imap <silent> <leader>c <Esc>:AutoCloseToggle<CR>
"avance d'un caratere en mode insert (vim-autoclose -> plus besoin de fermer les (, [, {, ...)
imap <leader>n <esc>l i
"##########################
" tagbar:
"##########################
" https://github.com/majutsushi/tagbar
"Plugin 'majutsushi/tagbar'
" Open Tagbar:
nmap <leader>t :TagbarToggle<CR>
" Manage Puppet file (.pp):
let g:tagbar_type_puppet = {
\ 'ctagstype': 'puppet',
\ 'kinds': [
\'c:class',
\'s:site',
\'n:node',
\'d:definition'
\]
\}
"##########################
" fugitive:
"##########################
" https://github.com/tpope/vim-fugitive
"Plugin 'tpope/vim-fugitive'
"##########################
" openssl:
"##########################
" https://github.com/
"Plugin 'openssl.vim'
"##########################
" Exuberant-ctags:
"##########################
" https://github.com/b4n/ctags or debian package for Sid is SVN based
""""""""""""""""""""""""""""""""""""""""""""""""
" Paramétrage du plugin Taglist
"http://ngressier.developpez.com/articles/vim/vim-plugin-taglist/#LD
"Indispensable pour la deuxième status line définie dans ce fichier
"Si première utilisation, faire un vim dans le dossier ~/.vim/doc/ et faire
":helptags" pour activer le plugin
""""""""""""""""""""""""""""""""""""""""""""""""
"Mappage de l'ouverture et fermeture de la fenêtre des tags avec la touche F4
"nnoremap <silent> <F4> :TlistToggle<CR>
""map <F4> :TlistToogle<CR>
"let Tlist_WinWidth = 50
"let Tlist_Process_File_Always = 1 " activation permanente du plugin pour la barre de statut
"let Tlist_Exit_OnlyWindow = 1 " vim se ferme si il reste uniquement la fenêtre des tags
"let Tlist_Use_Right_Window = 1 " affiche les tags sur le côté droit de l'écran
""""""""""""""""""""""""""""""""""""""""""""""""
" Gestion des onglets
""""""""""""""""""""""""""""""""""""""""""""""""
" Nouvel onglet
map <C-t> :tabnew<cr>
" Changer d'onglet
map <tab> :tabnext<cr>
" Onglet suivant
map <S-tab> :tabprevious<cr>
" Se déplacer à l'onglet suivant
map <C-left> :tabnext<cr>
" Se déplacer à l'onglet précédent
map <C-right> :tabprevious<cr>
" Fermer l'onglet
map <C-x> :tabclose<cr>
"""""""""""""""""""""""""""""""""""""""""""""""""""
" Dictionnaire français
"""""""""""""""""""""""""""""""""""""""""""""""""""
set dictionary+=/usr/share/dict/french
"Liste des propositions avec CTRL-X_CTRL-K ou <leader>xk
imap <leader>xk 
"""""""""""""""""""""""""""""""""""""""""""""""""""
" Correction orthographique
"-------------En mode INSERTION :------------------
"Liste des propositions : CTRL-X_s
"-------------En mode COMMANDE :-------------------
"Liste des propositions : z=
"Prochain mot mal orthographié : ]s
"Précédent mot mal orthographié : [s
"Ajouter un mot au dictionnaire: zg
"""""""""""""""""""""""""""""""""""""""""""""""""""
if has("spell")
" La commande z= affiche 10 suggestions. En mode insertion: CRTL-X_s
set spellsuggest=10
" On règle les touches d'activation manuelle de la correction orthographique
noremap <leader>sf :setlocal spell spelllang=fr <CR>
noremap <leader>se :setlocal spell spelllang=en <CR>
noremap <leader>sn :setlocal nospell <CR>
" On active automatiquement le mode spell pour les fichiers texte et LaTeX
autocmd BufEnter *.txt,*.tex set spell
" On applique le dictionnaire français pour tous les types de fichiers
autocmd BufEnter * set spelllang=fr
endif
if !filewritable ($HOME."/.vim/spell") " Si le répertoire n'existe pas
call mkdir($HOME."/.vim/spell", "p") " Création du répertoire de sauvegarde
endif
" Choix de la langue de l'aide
set helplang=fr
" Liste des abréviations textes:
iabbrev cad c'est-à-dire
iabbrev svp s'il-vous-plaît
iabbrev stp s'il-te-plaît
iabbrev pcq parce que
"""""""""""""""""""""""""""""""""""""""""""""""""""
" Modification de la barre de statut
"""""""""""""""""""""""""""""""""""""""""""""""""""
" Pas besoin de plugin
"set laststatus=2 " Affiche la barre de statut quoi qu'il en soit (0 pour la masquer, 1 pour ne l'afficher que si l'écran est divise)
"if has("statusline")
"set statusline=
"set statusline+=%<
"set statusline+=[%02n%H%M%R%W] " Numéro du buffer (2 digit), and flags
"set statusline+=\ %m " modified flag '[+]' if modifiable
"set statusline+=%f " Nom du fichier
"set statusline+=%r " read only flag '[RO]'
"set statusline+=%h " help flag '[Help]'
""set statusline+=%1*\ [FORMAT=%{&ff}]%0* " Format du fichier
"set statusline+=\ [FORMAT=%{&ff}] " Format du fichier
"set statusline+=\ [TYPE=%Y] " Type de fichier
"set statusline+=\ [ENC=%{&fileencoding}] " Encodage du fichier
"set statusline+=\ [POS=%04l,%03v] " Position dans le fichier ligne/colonne
"set statusline+=%= " seperate between right- and left-aligned
"set statusline+=\ [%p%%] " Position dans le fichier en %
"set statusline+=\ [%l/%L] " Nombre de ligne dans le fichier
""set statusline+=%1*%y%*%* " file type
"set statusline+=%{&hlsearch?'+':'-'} " Résultat de recherche surligné (+: y; -: n)
"set statusline+=%{&paste?'=':'\ '}
"set statusline+=%{&wrap?'<':'>'}
"elseif has("cmdline_info")
"set ruler " Affiche la position du curseur en bas a gauche de l'écran
"endif
"""""""""""""""""""""""""""""""""""""""""""""""""""
" Création des répertoires
"""""""""""""""""""""""""""""""""""""""""""""""""""
"################################
" Centralisation des backups :
"################################
if !filewritable ($HOME."/.vim/backup") " Si le répertoire n'existe pas
call mkdir($HOME."/.vim/backup", "p") " Création du répertoire de sauvegarde
endif
" On définit le répertoire de sauvegarde
set backupdir=$HOME/.vim/backup
" On active le comportement précédemment décrit
set backup
"################################
" Undo persistant :
"################################
" !!! Attention à la taille des fichiers de sauvegarde !!!
if has("persistent_undo")
if !filewritable ($HOME."/.vim/undodir") " Si le répertoire n'existe pas
call mkdir($HOME."/.vim/undodir", "p") " Création du répertoire de sauvegarde
endif
" On définit le répertoire de sauvegarde
set undodir=$HOME/.vim/undodir " répertoire où seront stockés les modifications
set undofile " activation du undo persistant
set undolevels=100 " nombre maximum de changements sauvegardés
set undoreload=100 " nombre maximum de lignes sauvegardées
endif
"################################
" Répertoire de chargement automatique des scripts
"################################
if !filewritable ($HOME."/.vim/autoload") " Si le répertoire n'existe pas
call mkdir($HOME."/.vim/autoload", "p") " Création du répertoire de chargement automatique
endif
"################################
" Répertoire pour les fichiers temporaires
"################################
" Placer les fichiers .swp dans un autre répertoire
if !filewritable ($HOME."/.vim/tmp") " Si le répertoire n'existe pas
call mkdir($HOME."/.vim/tmp", "p") " Création du répertoire temporaire
endif
set directory=$HOME/.vim/tmp
"""""""""""""""""""""""""""""""""""""""""""""""""""
" Gestion des templates
"""""""""""""""""""""""""""""""""""""""""""""""""""
" Récupérer le nom du fichier
" :!echo % (renvoie /Documents/fichier.tex )
" :!echo %:r (renvoie /Documents/fichier )
" :!echo %:e (renvoie tex )
" :!echo %:t (renvoie fichier.tex )
" :!echo %:p (renvoie /home/limax/Documents/fichier.tex )
" :!echo %:t (renvoie fichier.tex )
" :!echo %:h (renvoie Documents)
if has("autocmd")
augroup templates
autocmd!
autocmd BufNewFile *.html,*.htm call Template('html')
autocmd BufNewFile *.py call Template('py')
autocmd BufNewFile *.sh,*.bat call Template('sh')
autocmd BufNewFile *.c,*.cpp,*.sc,*.h call Template('c')
autocmd BufNewFile *.spr call Template('spr')
autocmd BufNewFile *.rec call Perso_recette('rec')
autocmd BufNewFile *.tex call Template('tex')
autocmd BufNewFile *.pp call Template('pp')
augroup END
function! Template(type)
execute "0r ~/.vim/templates/skeleton.".a:type
execute "%s/!!FICHIER!!/".expand("%:t")."/e"
execute "%s/!!DATE!!/".strftime("%Y-%m-%d")."/e"
execute "%s/!!SQUELETTE!!/".expand("%:t:r")."/g"
execute "normal! 10G$"
endfunction
function! Perso_recette(type)
execute "0r ~/.vim/templates/recette.tex"
execute "%s/!!FICHIER!!/".expand("%:t")."/e"
execute "%s/!!DATE!!/".strftime("%d-%m-%Y")."/e"
execute "normal! 10G$"
endfunction
endif
"""""""""""""""""""""""""""""""""""""""""""""""""""
" Actions Automatiques
"""""""""""""""""""""""""""""""""""""""""""""""""""
"################################
" Changer les droits d'un fichier
"################################
"""""""""""""""""""""""""""""""""""""""""""""""""""
" donner des droits d'exécution si le fichier commence par #! et contient
" /bin/ dans son chemin
function ModeChange()
if getline(1) =~ "^#!"
if getline(1) =~ "/bin/"
silent !chmod a+x <afile>
endif
endif
endfunction
au BufWritePost * call ModeChange()
"################################
" Espaces - caractères superflus
"################################
" Afficher '¬' pour indiquer une fin de ligne
" Afficher '\' une fin de ligne avec des espaces en trop
set list
set listchars=eol,trail:\
" Afficher les espaces superflus et les tabulations en gris clair
highlight ExtraWhitespace ctermbg=lightgray guibg=lightred
match ExtraWhitespace /\s\+$\|\t/
" Suppression automatique des espaces superflus (avant sauvegarde)
autocmd BufWritePre * :%s/\s\+$//e
"################################
" Configuration BÉPO
"################################
" Si la disposition bépo est détectée, charger automatiquement le fichier
if !empty(system("setxkbmap -print|grep bepo"))
source ~/.vim/vimrc.bepo
endif
" Chargement manuel pour les machines ne disposant pas de setxkbmap (serveurs)
map <leader>é :source ~/.vim/vimrc.bepo<cr>
"################################
" Conserver emplacement curseur
"################################
set viminfo='10,\"100,:20,%,n~/.viminfo
au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif
" Différences depuis le debut de l'edition
"if !exists(":DiffOrig")
" La commande suivante permet de comparer le fichier avec son ancien etat
" (au moment de l'ouverture dans Vim).
"command DiffOrig vertical new | set buftype=nofile | r # | 0d_ |
"diffthis
"\| wincmd p | diffthis
" Mapping de la commande precedente
"noremap <Leader>ch <Esc> :DiffOrig<CR>
"endif
"################################
" Recharger vimrc après modif
"################################
if has("autocmd")
autocmd! bufwritepost vimrc source ~/.vim/vimrc
endif
""""""""""""""""""""""""""""""""""""""""""""""""
" Chargement des types de fichiers
""""""""""""""""""""""""""""""""""""""""""""""""
autocmd BufEnter *.txt set filetype=text
"""""""""""""""""""""""""""""""""""""""""""""""""""
" Actions Manuelles
"""""""""""""""""""""""""""""""""""""""""""""""""""
"################################
" Presse Papier
"################################
set clipboard=autoselect " Le texte sélectionné en mode visuel est collé dans le presse-papier PRIMARY
" Copier vers le presse papier graphique avec CTRL-C en mode visuel
vmap <C-c> y:call system("xclip -i -selection clipboard", getreg("\""))<CR>:call system("xclip -i", getreg("\""))<CR>
" Coller le contenu du presse papier graphique depuis le mode normal
"nmap <C-v> :call setreg("\"",system("xclip -o -selection clipboard"))<CR>p
"################################
" Lancer un navigateur internet
"################################
""" Firefox
" « v<leader>fd » cherche la définition du mot courant dans le TLFI
vmap <leader>fd :<C-U>!firefox "http://www.cnrtl.fr/lexicographie/<cword>" >& /dev/null<CR><CR>
" « v<leader>fs » cherche les synonymes du mot courant dans le TLFI
vmap <leader>fs :<C-U>!firefox "http://www.cnrtl.fr/synonymie/<cword>" >& /dev/null<CR><CR>
" « v<leader>fg » comme ci-dessus mais pour google
vmap <leader>fg :<C-U>!firefox "http://www.google.fr/search?hl=fr&q=<cword>&btnG=Recherche+Google&meta=" >& /dev/null<CR><CR>
"« v<leader>fw » comme ci-dessus mais pour wikipedia
vmap <leader>fw :<C-U>!firefox "http://fr.wikipedia.org/wiki/<cword>" >& /dev/null<CR><CR>
" « v<leader>fc » comme ci-dessus mais pour le conjugueur
vmap <leader>fc :<C-U>!firefox "http://www.leconjugueur.com/php5/index.php?v=<cword>" >& /dev/null<CR><CR>
" « v<leader>fo » ouvre lurl sur laquelle on se trouve dans firefox
vmap <leader>fo :<C-U>!dwb "<cfile>" >& /dev/null &<CR><CR>
""" W3M
" « v<leader>d » cherche la définition du mot courant dans le TLFI
vmap <leader>d :<C-U>!w3m "http://www.cnrtl.fr/lexicographie/<cword>" <CR>
" « v<leader>s » cherche les synonymes du mot courant dans le TLFI
vmap <leader>s :<C-U>!w3m "http://www.cnrtl.fr/synonymie/<cword>" <CR>
" « v<leader>g » comme ci-dessus mais pour google
vmap <leader>g :<C-U>!w3m "http://www.google.fr/search?hl=fr&q=<cword>&btnG=Recherche+Google&meta=" <CR>
"« v<leader>w » comme ci-dessus mais pour wikipedia
vmap <leader>w :<C-U>!w3m "http://fr.wikipedia.org/wiki/<cword>" <CR>
vmap <leader>sw :<C-U>!dig +short txt "<cword>.wp.dg.cx" <CR>
" « v<leader>c » comme ci-dessus mais pour le conjugueur
vmap <leader>c :<C-U>!w3m "http://www.leconjugueur.com/php5/index.php?v=<cword>" <CR>
" « v<leader>o » ouvre lurl sur laquelle on se trouve
vmap <leader>o :<C-U>!w3m "<cfile>" <CR>
" « v<leader>o » lance Wordreference en -> fr
vmap <leader>te :<C-U>!w3m "http://www.wordreference.com/enfr/<cword>" <CR>
" « v<leader>o » lance Wordreference fr -> en
vmap <leader>tf :<C-U>!w3m "http://www.wordreference.com/fren/<cword>" <CR>