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