]> git.immae.eu Git - perso/Immae/Config/Ansible.git/blame - roles/tools/files/vimrc
New configuration as of 2019-08-21
[perso/Immae/Config/Ansible.git] / roles / tools / files / vimrc
CommitLineData
397c4fed
IB
1" ---------- Init, config, backup ---------------
2" Respect XDG directories (more below for cache)
3set viminfo+='1000,n$XDG_STATE_HOME/vim/viminfo
4set runtimepath=$XDG_DATA_HOME/vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,$XDG_DATA_HOME/vim/after
5
6" Run :PlugInstall after adding plugins there
7call plug#begin(expand($XDG_DATA_HOME) . '/vim/plugged')
8
9Plug 'vim-scripts/cecutil'
10Plug 'vim-scripts/LargeFile'
11Plug 'vim-scripts/Align'
12Plug 'vim-scripts/AutoAlign'
13Plug 'jamessan/vim-gnupg'
14Plug 'vim-scripts/taglist.vim'
15Plug 'chrisbra/csv.vim'
16Plug 'mustache/vim-mustache-handlebars'
17Plug 'cakebaker/scss-syntax.vim'
18Plug 'tpope/vim-bundler'
19Plug 'tpope/vim-rails'
20Plug 'ledger/vim-ledger'
21Plug 'beyondwords/vim-twig'
22Plug 'scrooloose/nerdtree'
23Plug 'kien/ctrlp.vim'
24Plug 'rodjek/vim-puppet'
25Plug 'szw/vim-tags'
26Plug 'neomutt/neomutt.vim'
27Plug 'kchmck/vim-coffee-script'
28Plug 'digitaltoad/vim-pug'
29Plug 'vim-scripts/slapd.vim'
30Plug 'vimwiki/vimwiki', { 'branch': 'dev' }
31Plug 'vim-vdebug/vdebug'
32Plug 'tpope/vim-fugitive'
80ed46d4
IB
33Plug 'tpope/vim-rhubarb'
34Plug 'shumphrey/fugitive-gitlab.vim'
397c4fed
IB
35Plug 'tomlion/vim-solidity'
36Plug 'chrisbra/SudoEdit.vim'
37Plug 'Chiel92/vim-autoformat'
38Plug 'pearofducks/ansible-vim'
39Plug 'juliosueiras/vim-terraform-completion'
386f9271 40Plug 'sjl/gundo.vim'
e2e7cad5 41Plug 'LnL7/vim-nix'
80ed46d4
IB
42Plug 'purescript-contrib/purescript-vim'
43Plug 'vmchale/dhall-vim'
44Plug 'junegunn/fzf'
397c4fed
IB
45
46call plug#end()
47
48" Charge automatiquement les ftplugins/*.vim selon le type de fichier
49filetype plugin on
50" Charge automatiquement les indent/*.vim selon le type de fichier
51filetype indent on
52
53" Pour que vim garde une copie de sauvegarde des fichiers modifiés.
54set backup
55""" Copied from /usr/share/vim/vimfiles/archlinux.vim
56" Move temporary files to a secure location to protect against CVE-2017-1000382
57if exists('$XDG_CACHE_HOME')
58 let &g:directory=$XDG_CACHE_HOME
59else
60 let &g:directory=$HOME . '/.cache'
61endif
62let g:ctrlp_cache_dir=&g:directory . '/vim/ctrlp//'
63let &g:undodir=&g:directory . '/vim/undo//'
64let &g:backupdir=&g:directory . '/vim/backup//'
65let g:vim_tags_cache_dir = &g:directory . '/vim/ctags//'
66let &g:directory.='/vim/swap//'
67" Create directories if they doesn't exist
68if ! isdirectory($XDG_STATE_HOME . '/vim')
69 silent! call mkdir($XDG_STATE_HOME . '/vim')
70endif
71if ! isdirectory(expand(&g:directory))
72 silent! call mkdir(expand(&g:directory), 'p', 0700)
73endif
74if ! isdirectory(expand(&g:backupdir))
75 silent! call mkdir(expand(&g:backupdir), 'p', 0700)
76endif
77if ! isdirectory(expand(&g:undodir))
78 silent! call mkdir(expand(&g:undodir), 'p', 0700)
79endif
80if ! isdirectory(expand(g:vim_tags_cache_dir))
81 silent! call mkdir(expand(g:vim_tags_cache_dir), 'p', 0700)
82endif
83""" /Copied from /usr/share/vim/vimfiles/archlinux.vim
84
85
86" Ne pas sauver un backup spécial pour les fichiers réseau
87let g:netrw_dirhistmax = 0
88
89" ---------- Mappings ---------------------------
90" map : Normal, Visual, Select, Operator-pending
91" map! : Insert and Command-line
92
93" Le BackSpace fonctionne aussi en mode normal.
94map <BS> X
95
96" Les Control-flèches
97map <ESC>[1;5A <C-Up>
98map! <ESC>[1;5A <C-Up>
99map <ESC>[1;5B <C-Down>
100map! <ESC>[1;5B <C-Down>
101map <ESC>[1;5C <C-Right>
102map! <ESC>[1;5C <C-Right>
103map <ESC>[1;5D <C-Left>
104map! <ESC>[1;5D <C-Left>
105
106map <S-Up> {
107map! <S-Up> <C-O>{
108map <S-Down> }
109map! <S-Down> <C-O>}
110
111
112" ---------- Comportement à la frappe -----------
113" <BS> passe à travers l'indentation, les fins de ligne et le début du "insert"
114set backspace=indent,eol,start
115
116" '<BS>e écrit un é (sinon : ctrl+K ' e)
117" set digraph
118
119" La taille d'une ligne, pour la frappe au kilomètre.
120" Permet 4 niveaux de 'citation' pour les mails/forum
121set textwidth=72
122" set textwidth=80
123
124" Les touches qui font passer à la ligne suivante/précédente. backspace (b),
125" espace (s), flèches (<,>,[,]).
126set whichwrap=b,s,<,>,[,]
127
128" Ne pas mettre deux espaces après la ponctuation quand on "join" deux lignes
129set nojoinspaces
130
131" Quand on tape un ), vim montre furtivement le ( correspondant.
132set showmatch
133
134" Les options de formatage.
135set formatoptions=tcq2
136
137
138" ---------- Recherche --------------------------
139" Pour voir tous les matchs d'une recherche
140set hlsearch
141
142" Pour que les matchs soient affichés pendant que vous tapez le mot recherché
143set incsearch
144
145" On ignore la casse des caractères dans les recherches de chaînes en
146" minuscules; par contre, dès qu'une lettre est en majuscule, on tient compte
147" de la casse de toute la chaîne.
148" Pendant la recherche : \c pour ignorer quand même, \C pour case-sensitive
149set ignorecase
150set smartcase
151
152
153" ---------- Fichiers ---------------------------
154" Pour une complétion automatique des noms de fichiers
155set wildmenu
156
157" La façon dont la complétion présente les choix.
158set wildmode=longest,list:longest,full
159
160" La complétion automatique ignore les fichiers suivants.
161set suffixes=.bak.o.aux.dvi.log.toc.tof
162
163
164" ---------- Buffers ----------------------------
165" On veut pouvoir rendre invisible un buffer
166set hidden
167
168" Pour éviter de trop ralentir en faisant défiler le texte pendant l'exécution
169" des macros.
170set lazyredraw
171
172
173" ----------- Interactions ----------------------
174" On affiche en permanence les numéros de ligne et de colonne.
175set ruler
176
177" Pour ne pas se faire bipper tout le temps.
178set noerrorbells
179set visualbell t_vb=
180
181" Pour avoir des messages de vim qui tiennent sur une seule ligne, ce
182" qui évite d'avoir à presser «Enter» pour voir les messages suivants.
183set shortmess=filnrxoOt
184
185" Quand on tape une commande complexe en mode normal, vim affiche ce que l'on
186" a déjà tapé
187set showcmd
188
189
190" ------------ Indentations ---------------------
191" Conserve l'indentation
192set autoindent
193
194" Remplace les <Tab> par des espaces
195set expandtab
196
197" Nombre d'espaces
198set shiftwidth=2
199set softtabstop=2
200
201" Pour que l'indentation ajuste sur un multiple de 'shiftwidth'.
202set shiftround
203
204" ------------ Folding --------------------------
205set foldmethod=indent
206set foldnestmax=10
207set nofoldenable
208set foldlevel=0
209set foldlevelstart=0
210
211
212" ------------ Auto-commandes -------------------
213" On commence par enlever toutes les autocommandes avant de les définir
214" (pour le cas où ce fichier serait lu plusieurs fois.)
215autocmd!
216
217autocmd BufRead,BufNewFile mutt*[0-9] set nobackup nowritebackup
218autocmd BufRead,BufNewFile .article.* set filetype=mail nobackup
219
220" ledger
221" Don't load ftplugin for ledger
222" autocmd BufReadPre,BufNewFile *ledger* let b:did_ftplugin = 1
223autocmd FileType ledger set textwidth=0
224let g:ledger_main = '~/.ledger/perso'
225
226autocmd FileType puppet set textwidth=0
227
228" ----------- Coloration syntaxique -------------
229syntax enable
230
231highlight Comment term=none ctermfg=darkCyan cterm=none
232highlight Constant term=underline ctermfg=Blue cterm=none
233highlight Error term=reverse ctermfg=White ctermbg=Red cterm=none
234highlight Identifier term=none ctermfg=Green cterm=none
235highlight IncSearch term=reverse ctermfg=Blue ctermbg=White
236highlight Operator term=none ctermfg=darkGray cterm=bold
237highlight PreProc term=underline ctermfg=Magenta cterm=none
238highlight Search term=reverse cterm=reverse
239highlight Special term=bold ctermfg=Blue cterm=bold
240highlight Statement term=bold ctermfg=Red cterm=none
241highlight Todo term=standout ctermfg=White ctermbg=Green cterm=bold
242highlight Type term=bold ctermfg=Brown cterm=none
243
244highlight link Delimiter Operator
245highlight link SpecialChar Special
246
247" lignes "foldées"
248highlight Folded term=standout ctermfg=White ctermbg=Blue cterm=bold
249
250" Pour les diffs (commande vimdiff).
251highlight DiffAdd term=bold ctermfg=Green ctermbg=none cterm=bold
252highlight DiffChange term=bold ctermfg=Cyan ctermbg=none
253highlight DiffDelete term=bold ctermfg=Red ctermbg=none cterm=bold
254highlight DiffText term=standout ctermfg=White ctermbg=Cyan cterm=bold
255
256" ------------- Fonctions, commandes, macros ----
257" Identer les fichiers (json, xml)
258function PRangeFunc(command_line, syntax) range
259 if a:firstline==1 && a:lastline==line('$')
260 execute 'set filetype=' . a:syntax
261 execute 'syntax on'
262 endif
263 execute a:firstline . "," . a:lastline . '!' . a:command_line
264endfunction
265
266command -range=% Pjson normal <Esc>`>a<CR><Esc>mb`<i<CR><Esc>ma:'a,'b-1 call PRangeFunc('python -m json.tool', 'json')<CR>
267command -range=% Pxml normal <Esc>`>a<CR><Esc>mb`<i<CR><Esc>ma:'a,'b-1 call PRangeFunc('xmllint --format --encode UTF8 -', 'xml')<CR>
268command -range=% Pdeflate normal <Esc>`>a<CR><Esc>mb`<i<CR><Esc>ma:'a,'b-1 call PRangeFunc('python -c "import zlib; import sys; sys.stdout.buffer.write(zlib.decompress(sys.stdin.buffer.read()))"', '')<CR>
269command -range=% Pinflate normal <Esc>`>a<CR><Esc>mb`<i<CR><Esc>ma:'a,'b-1 call PRangeFunc('python -c "import zlib; import sys; sys.stdout.buffer.write(zlib.compress(sys.stdin.buffer.read()))"', '')<CR>
270command! -range=% Pastebin execute <line1> . "," . <line2> . "w !curl -F 'c=@-' https://ptpb.pw"
271
272noremap <F3> :Autoformat<CR>
273vmap <F8> :Pxml<CR>
274vmap <F9> :Pjson<CR>
275
276" gpg-encryptes files
277let g:GPGPreferArmor=1
278let g:GPGDefaultRecipients=["ismael.bouya@normalesup.org"]
279let g:GPGUsesPipes=1
280
281command Decrypt 1,$!gpg -d -q
282command Encrypt 1,$!gpg -e -q --armor -r ismael.bouya@normalesup.org
283command -range=% Runhash s/:\([_a-zA-Z0-9]\+\)\( \+\)=> \( *\)/\1:\2\3/
284
285function! s:DiffWithSaved()
286 let filetype=&ft
287 diffthis
288 vnew | r # | normal! 1Gdd
289 diffthis
290 exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
291endfunction
292command! DiffSaved call s:DiffWithSaved()
293
294" Load NERDTree on startup if no file were specified
295" autocmd StdinReadPre * let s:std_in=1
296" autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
297" Load NERDTree on startup
298"autocmd VimEnter * NERDTree | wincmd p
299let g:vim_tags_auto_generate = 1
300let g:vim_tags_project_tags_command = "ctags -R {OPTIONS} {DIRECTORY} 2>/dev/null"
301map <C-\> :tab split<CR>:exec("tag ".expand("<cword>"))<CR>
302map <A-]> :vsp <CR>:exec("tag ".expand("<cword>"))<CR>
303
304let g:ctrlp_extensions = ['tag', 'buffertag', 'dir', 'undo', 'line']
80ed46d4 305let g:ctrlp_max_files = 0
397c4fed
IB
306set modeline
307
308set grepprg=grep\ -rn\ $*\ /dev/null
309let c_comment_strings=1
310if !exists(":DiffOrig")
311 command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
312 \ | wincmd p | diffthis
313endif
314
315set list
316set listchars=tab:>-,trail:-