" ---------------------------------------------------------------------- " | 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= " é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 set foldmethod=marker " Use folding with marker (default: {{{ or }}}) " 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 w :w imap w :w nmap q :wq imap q :wq map a :wa " Sauvegarder et exécuter le fichier courant nmap x :w:!./"%" " Édition rapide de vimrc avec +e map e :e! ~/.vim/vimrc """ Buffers " Gestion des splits map :split map :vsplit " Navigation " Détails sur les buffers: http://vim-fr.org/index.php/Buffer "map p :bp "map s :bn map b :b "Navigation splits map j j map h h map k k map l l " Save with sudo permissions nmap s :w !sudo tee % imap s :w !sudo tee % """""""""""""""""""""""""""""""""""""""""""""""" " 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 nmap nmap nmap " Mode insertion: imap imap imap imap """""""""""""""""""""""""""""""""""""""""""""""" " Mapping - Raccourcis clavier """""""""""""""""""""""""""""""""""""""""""""""" "Désactive le surlignage des résultats d'une recherche en utilisant CTRL-n nnoremap :set hlsearch!:set hlsearch? "Ajoute une ligne avant le curseur sans passer en mode insertion nnoremap o "Ajoute une ligne après le curseur sans passer en mode insertion map O " Activer/désactiver la surbrillance des recherches avec F2 noremap :set hlsearch!:set hlsearch? " Activer/désactiver la correction avec F3 "noremap :set spell!:set spell? " Activer/désactiver le mode collage noremap :set paste!:set paste? " Remap de Echap sur jj imap jj """""""""""""""""""""""""""""""""""""""""""""""" " 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' " 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' " Markdown syntax Plugin 'plasticboy/vim-markdown' " 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 :NERDTreeToggle " Et n nmap n :NERDTreeToggle " 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 ,, c "map c imap " Commentaire plus sexy, mais impossible à décommenter map 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 d  "imap 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 ', \ "\" : 'Visual-B', \ 's' : ' Sub ', \ 'S' : 'Sub-L', \ "\" : '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 :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 ' "########################## " CTRL P : "########################## " https://github.com/kien/ctrlp.vim "Plugin 'kien/ctrlp.vim' "########################## " undo-tree : "########################## " https://github.com/mbbill/undotree "Plugin 'mbbill/undotree' " UndoTree map u :UndotreeToggle " 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 c :AutoCloseToggle "avance d'un caratere en mode insert (vim-autoclose -> plus besoin de fermer les (, [, {, ...) imap n l i "########################## " tagbar: "########################## " https://github.com/majutsushi/tagbar "Plugin 'majutsushi/tagbar' " Open Tagbar: nmap t :TagbarToggle " 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 :TlistToggle ""map :TlistToogle "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 :tabnew " Changer d'onglet map :tabnext " Onglet suivant map :tabprevious " Se déplacer à l'onglet suivant map :tabnext " Se déplacer à l'onglet précédent map :tabprevious " Fermer l'onglet map :tabclose """"""""""""""""""""""""""""""""""""""""""""""""""" " Dictionnaire français """"""""""""""""""""""""""""""""""""""""""""""""""" set dictionary+=/usr/share/dict/french "Liste des propositions avec CTRL-X_CTRL-K ou xk imap 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 sf :setlocal spell spelllang=fr "noremap se :setlocal spell spelllang=en "noremap sn :setlocal nospell "" 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 endif endif endfunction au BufWritePost * call ModeChange() "################################ " Whitespaces and extra character "################################ " Display '⏎' to mark an end of line " Display '␠' to mark extra white space at the end of a line " Display '⎵' to mark nbsp (fixed spaces,…) set list set listchars=eol:⏎,nbsp:⎵,tab:▸·,extends:>,precedes:<,trail:␠ " Afficher les espaces superflus en gris clair highlight ExtraWhitespace ctermbg=darkgray guibg=lightred match ExtraWhitespace /\s\+$/ " Auto-remove extra whitespaces before writing the file autocmd BufWritePre * :%s/\s\+$//e " Search for 2 whitespaces and highlight it (red and underline) set hls let g:HLSpace = 1 let g:HLColorScheme = g:colors_name function ToggleSpaceUnderscoring() if g:HLSpace highlight Search cterm=underline gui=underline ctermbg=red ctermfg=none let @/ = " " else highlight clear silent colorscheme "".g:HLColorScheme let @/ = "" endif let g:HLSpace = !g:HLSpace endfunction nmap :call ToggleSpaceUnderscoring() "################################ " 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 é :source ~/.vim/vimrc.bepo "################################ " 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 ch :DiffOrig "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 y:call system("xclip -i -selection clipboard", getreg("\"")):call system("xclip -i", getreg("\"")) " Coller le contenu du presse papier graphique depuis le mode normal "nmap :call setreg("\"",system("xclip -o -selection clipboard"))p "################################ " Lancer un navigateur internet "################################ """ Firefox " « vfd » cherche la définition du mot courant dans le TLFI vmap fd :!firefox "http://www.cnrtl.fr/lexicographie/" >& /dev/null " « vfs » cherche les synonymes du mot courant dans le TLFI vmap fs :!firefox "http://www.cnrtl.fr/synonymie/" >& /dev/null " « vfg » comme ci-dessus mais pour google vmap fg :!firefox "http://www.google.fr/search?hl=fr&q=&btnG=Recherche+Google&meta=" >& /dev/null "« vfw » comme ci-dessus mais pour wikipedia vmap fw :!firefox "http://fr.wikipedia.org/wiki/" >& /dev/null " « vfc » comme ci-dessus mais pour le conjugueur vmap fc :!firefox "http://www.leconjugueur.com/php5/index.php?v=" >& /dev/null " « vfo » ouvre l’url sur laquelle on se trouve dans firefox vmap fo :!dwb "" >& /dev/null & """ W3M " « vd » cherche la définition du mot courant dans le TLFI vmap d :!w3m "http://www.cnrtl.fr/lexicographie/" " « vs » cherche les synonymes du mot courant dans le TLFI vmap s :!w3m "http://www.cnrtl.fr/synonymie/" " « vg » comme ci-dessus mais pour google vmap g :!w3m "http://www.google.fr/search?hl=fr&q=&btnG=Recherche+Google&meta=" "« vw » comme ci-dessus mais pour wikipedia vmap w :!w3m "http://fr.wikipedia.org/wiki/" vmap sw :!dig +short txt ".wp.dg.cx" " « vc » comme ci-dessus mais pour le conjugueur vmap c :!w3m "http://www.leconjugueur.com/php5/index.php?v=" " « vo » ouvre l’url sur laquelle on se trouve vmap o :!w3m "" " « vo » lance Wordreference en -> fr vmap te :!w3m "http://www.wordreference.com/enfr/" " « vo » lance Wordreference fr -> en vmap tf :!w3m "http://www.wordreference.com/fren/"