vimrc 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. " set.vim {{{
  2. "# Pas de compatibilité avec Vi (meilleur comportement)
  3. set nocompatible
  4. "# Encodage général
  5. set encoding=utf-8
  6. "# Change le <Leader> en , à la place de \
  7. let mapleader=","
  8. "# Indentation
  9. set autoindent
  10. " Intelligente ({}, commentaires...)
  11. set smartindent
  12. " Remplace les tabulations par des espaces
  13. set expandtab
  14. " <BS> supprime un niveau d'indentation
  15. set smarttab
  16. " Affiche 2 espaces pour les tabulations
  17. set tabstop=2
  18. " Indentation de 2 espaces
  19. set shiftwidth=2
  20. " Arrondi à un niveau d'indentation
  21. set shiftround
  22. "# Numérotation
  23. set number
  24. "# Affichage de caractères spéciaux
  25. set list
  26. set listchars=nbsp:¬,tab:»·,trail:·
  27. "# caractères de séparation de fenêtres
  28. set fillchars+=vert:\ ,fold:\
  29. "# Affichage de la dernière ligne, même non entière
  30. "# Affichage des caractères spéciaux sous form <hex> plutôt que ^X
  31. set display=lastline,uhex
  32. "# Affiche toujours la statusline
  33. set laststatus=2
  34. "# Pas de sonneries
  35. set noerrorbells
  36. set novisualbell
  37. "# Limites haute et basse du curseur
  38. set scrolloff=8
  39. "# Limites gauche et droite du curseur
  40. "set nowrap
  41. set sidescrolloff=3
  42. set sidescroll=1
  43. "# Recherche
  44. " Va au résultat directement
  45. set incsearch
  46. set ignorecase
  47. set smartcase
  48. " /g par défaut (remettre /g pour annuler)
  49. set gdefault
  50. " Surligne les résultats
  51. set hlsearch
  52. " et pour l'enlever : ,/
  53. nnoremap <silent> <Leader><Space> :nohlsearch<CR>
  54. "# Menus améliorés (e.g <Tab>)
  55. set wildmenu
  56. "# Désactive les fichiers swap
  57. set noswapfile
  58. set nobackup
  59. set nowritebackup
  60. "# Correction (à activer avec set spell)
  61. set spelllang=fr,en
  62. set spellsuggest=5
  63. "# Ne met pas le curseur au début de ligne lors du changement de buffer
  64. " (impacte aussi gg, G, H, M, L, %, d…)
  65. set nostartofline
  66. "# Effacement (backspace) fonctionnel
  67. set backspace=indent,eol,start
  68. "# Priorité aux fichiers avec un . dans l'autocomplétion
  69. " e.g : prog.c > prog
  70. set suffixes+=,,
  71. "# Méthode de cryptage (avec :X)
  72. if version >= 704 && has("patch399")
  73. set cryptmethod=blowfish2
  74. endif
  75. "# Tilde avec motion
  76. set tildeop
  77. "# Demande une confirmation plutôt que de lever une erreur (:q, :e)
  78. set confirm
  79. "# Surligne la ligne courante
  80. set cursorline
  81. "# Autorise de changer de buffer sans sauvegarder
  82. set hidden
  83. "# Pas de support de la souris
  84. set mouse=
  85. "# share clipboad with X
  86. set clipboard+=unnamedplus
  87. "# default *.tex files ftplugin to latex file type
  88. let g:tex_flavor = "latex"
  89. " }}}
  90. " plugins.vim {{{
  91. "# Chargement de Vundle
  92. filetype off
  93. set rtp+=~/.vim/bundle/Vundle.vim
  94. call vundle#begin()
  95. Plugin 'gmarik/Vundle.vim'
  96. "# Liste des plugins
  97. Plugin 'scrooloose/nerdtree'
  98. Plugin 'jeffkreeftmeijer/vim-numbertoggle'
  99. Plugin 'tpope/vim-fugitive'
  100. Plugin 'tpope/vim-dispatch'
  101. Plugin 'airblade/vim-gitgutter'
  102. Plugin 'tmhedberg/matchit'
  103. Plugin 'morhetz/gruvbox'
  104. Plugin 'bkad/CamelCaseMotion'
  105. Plugin 'Townk/vim-autoclose'
  106. Plugin 'tpope/vim-endwise'
  107. Plugin 'majutsushi/tagbar'
  108. Plugin 'jeetsukumaran/vim-buffergator'
  109. Plugin 'mbbill/undotree'
  110. Plugin 'wesQ3/vim-windowswap'
  111. Plugin 'vim-airline/vim-airline'
  112. Plugin 'tpope/vim-commentary'
  113. Plugin 'ervandew/supertab'
  114. " TODO lire :h ins-completion
  115. " TODO : retab <tab> to <C-X><??> ?
  116. Plugin 'justmao945/vim-clang'
  117. "Plugin 'Valloric/YouCompleteMe'
  118. "Plugin 'jvoorhis/coq.vim'
  119. "Plugin 'vim-scripts/CoqIDE'
  120. " Dépendance pour coquille
  121. Plugin 'let-def/vimbufsync'
  122. Plugin 'the-lambda-church/coquille'
  123. " TODO ocaml: fichier .annot, maps (ANNOT : trouve le type du mot sous le curseur :D)
  124. " http://stackoverflow.com/questions/15514908/which-is-the-current-setup-to-use-ocaml-in-vim/17234163#17234163
  125. " annot : require compile with -annot
  126. au BufRead,BufNewFile *.ml,*.mli compiler ocaml
  127. " a tester
  128. " ocaml : https://github.com/the-lambda-church/merlin
  129. " coq : https://github.com/the-lambda-church/coquille
  130. "Plugin 'xolox/vim-misc' " dépendance pour vim-easytags
  131. "Plugin 'xolox/vim-easytags' " idem ====> Que le fichier en cours ? Aucun intérêt si oui
  132. "Plugin 'airblade/vim-rooter' " combiné avec les tags (pour éviter d'avoir des fichiers tags dans les sous-dossiers)
  133. "Plugin 'octol/vim-cpp-enhanced-highlight' " idem
  134. "Plugin 'Xuyuanp/nerdtree-git-plugin' " => caractères moches
  135. " http://vim.wikia.com/wiki/Compiling_LaTeX_from_Vim#Automatic_LaTeX_plugin (à mettre dans ftplugin/tex ?)
  136. " Plugin 'coot/atp_vim'
  137. " TODO : cscope ?
  138. " https://en.wikipedia.org/wiki/Cscope
  139. " http://vim.wikia.com/wiki/Browsing_programs_with_tags#Comments
  140. call vundle#end()
  141. "# Remap les mouvements normaux (w, b, e) en mouvements CamelCaseMotion
  142. map <silent> w <Plug>CamelCaseMotion_w
  143. map <silent> b <Plug>CamelCaseMotion_b
  144. map <silent> e <Plug>CamelCaseMotion_e
  145. map <silent> ge <Plug>CamelCaseMotion_ge
  146. sunmap w
  147. sunmap b
  148. sunmap e
  149. sunmap ge
  150. "# Mapping pour activer/désactiver vim-autoclose
  151. nmap <silent> <Leader>a :AutoCloseToggle<CR>
  152. "# Mapping pour ouvrir/fermer NERDTree
  153. nmap <silent> <Leader>t :NERDTreeToggle<CR>
  154. "# Mapping pour ouvrir/fermer TagBar
  155. nmap <silent> <Leader>r :TagbarToggle<CR>
  156. "# Mapping pour ouvrir/fermer Undotree
  157. nmap <silent> <Leader>u :UndotreeToggle<CR>
  158. "# Mapping pour GitGutter
  159. nmap <silent> gu :GitGutterUndoHunk<CR>
  160. nmap <silent> gn :GitGutterNextHunk<CR>
  161. nmap <silent> gp :GitGutterPrevHunk<CR>
  162. "# Ouvre NERDTree automatiquement
  163. "autocmd vimenter * NERDTree
  164. " focus sur la fenêtre principale
  165. "autocmd vimenter * wincmd w
  166. " et ferme vim s'il ne reste que NERDTree
  167. autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
  168. " NERDTree à droite
  169. let g:NERDTreeWinPos = "right"
  170. "# Paramètres de buffergator
  171. " Pas de chemin absolu
  172. let g:buffergator_show_full_directory_path = 0
  173. " Désactive tous les raccourcis d'accès
  174. let g:buffergator_suppress_keymaps = 1
  175. " Sauf ceux-ci :
  176. nmap <Leader>b :BuffergatorOpen<CR>
  177. nmap gb <C-^>
  178. " Fenêtre en haut, hauteur 8
  179. let g:buffergator_viewport_split_policy = "T"
  180. let g:buffergator_hsplit_size = 8
  181. "# Paramètres de Airline
  182. " Pas de vérifications sur les caractères blancs
  183. let g:airline#extensions#whitespace#checks = []
  184. "# N'active pas le completement automatiquement pour vim-clang
  185. "let g:clang_auto = 0
  186. " TODO : plutôt regrouper par outils (coq, …)
  187. "# Paramètres de vim-commentary
  188. autocmd FileType coq setlocal commentstring=(*\ %s\ *)
  189. map <buffer> <silent> <M-c> :CoqLaunch<CR>
  190. map <buffer> <silent> <M-j> :CoqNext<CR>
  191. map <buffer> <silent> <M-k> :CoqUndo<CR>
  192. map <buffer> <silent> <M-l> :CoqToCursor<CR>
  193. "# Paramètres de coquille
  194. " Bouge le curseur
  195. let g:coquille_auto_move = 'true'
  196. "# Active l'indentation et les plugins spécifiques
  197. filetype indent on
  198. filetype plugin on
  199. " }}}
  200. " theme.vim {{{
  201. "# Active la coloration syntaxique
  202. syntax enable
  203. "# Mode sombre
  204. set background=dark
  205. "# Thème
  206. try
  207. colorscheme gruvbox
  208. catch
  209. endtry
  210. "# Couleurs des mots mal écrits (exmaple)
  211. highlight clear SpellBad
  212. highlight SpellBad cterm=underline ctermfg=red
  213. highlight clear SpellCap
  214. highlight SpellCap cterm=underline ctermfg=blue
  215. highlight clear SpellLocal
  216. highlight SpellLocal cterm=underline ctermfg=blue
  217. highlight clear SpellRare
  218. highlight SpellRare cterm=underline ctermfg=blue
  219. " }}}
  220. " specifiques.vim {{{
  221. "# Undo persistant
  222. if has("persistent_undo")
  223. " Crée le dossier s'il le faut
  224. silent !mkdir ~/.vim/backups > /dev/null 2>&1
  225. set undodir=~/.vim/backups
  226. set undofile
  227. endif
  228. "# Clipboard mélangé avec celui de X
  229. if has("xterm_clipboard")
  230. set clipboard=unnamedplus
  231. endif
  232. "# Revient à la même position à la réouverture d'un fichier
  233. augroup DernierePosition
  234. autocmd BufReadPost *
  235. \ if line("'\"") > 0 && line("'\"") <= line("$") |
  236. \ exe "normal! g`\"" |
  237. \ endif
  238. augroup END
  239. " }}}
  240. " mappings.vim {{{
  241. "# Accès au début de ligne : au premier caractère non blanc
  242. " (le premier caractère est toujours accessible avec | )
  243. nmap 0 ^
  244. " 0 sans touche shift
  245. nmap à 0
  246. "# Remap <C-space> (= <Nul>) pour l'autocomplétion (<Tab>)
  247. imap <Nul> <Tab>
  248. "# Commande w!! pour enregistrer avec sudo
  249. "cmap w!! %!sudo tee > /dev/null %
  250. cabbrev w!! %!sudo tee > /dev/null %
  251. "# Désactive l'accès au mode Ex
  252. map Q <Nop>
  253. "# Mappings pour lancer :Make (vim-dispatch) (a)synchrone
  254. map <Leader>m :Make<CR>
  255. map <Leader>M :Make!<CR>
  256. "# Mapping pour activer/désactiver l'affichage "visuel"
  257. " des caracètres spéciaux (e.g : tabulation)
  258. nmap <Leader>l :set list!<CR>
  259. "# Mapping pour enlever tous les espaces de fin de ligne
  260. nmap <Leader>s :%s/\s\+$//e<CR>:nohlsearch<CR>
  261. "# Mapping pour créer le fichier tags (nécessite ctags)
  262. nmap <silent> <Leader><Leader>g :silent r!ctags -R &<CR>:echo "génération des tags lancée"<CR>
  263. "# Mapping pour aller à la faute précédente/suivante (spell)
  264. nmap (s [s
  265. nmap )s ]s
  266. "# Mapping pour aller à la marque au caractère près
  267. nmap ' `
  268. " }}}
  269. " vim: set fen fdm=marker: