Correction : vim/.vimrc
[tool/hledger.git] / vim / .vimrc
1 function! GetFoldExprFromIndent()
2 " Calcule l'indentation en fonction des tabulations
3 " et espaces au début des lignes
4 let line = getline(v:lnum)
5 let tabs = strlen(matchstr(line,"^\t*"))
6 let spaces = strlen(matchstr(line,"^[ \t]*")) - tabs
7 return tabs + ((spaces + 3) / 4)
8 endfunction
9 hi FoldColumn ctermfg=black ctermbg=none cterm=bold
10 hi Folded ctermfg=black ctermbg=none cterm=bold
11 hi LineNr ctermfg=black ctermbg=none cterm=bold
12 hi Pmenu cterm=none ctermfg=white ctermbg=blue guibg=blue
13 hi PmenuSel cterm=bold ctermfg=white ctermbg=red guibg=red
14 hi Search ctermbg=yellow
15 hi SpecialKey ctermfg=black cterm=bold
16 hi StatusLine term=bold,reverse ctermfg=grey ctermbg=blue cterm=none
17 hi StatusLineNC term=reverse ctermfg=blue ctermbg=none cterm=underline
18 hi Visual guibg=yellow
19 nmap <silent> * :set hls<CR>:let @/="\\<<C-r><C-w>\\>"<CR>/<BS>
20 nmap <silent> µ :set hls<CR>:let @/="<C-r><C-w>"<CR>/<BS>
21 nnoremap i <Up>
22 nnoremap k <Down>
23 nnoremap j <Left>
24 nnoremap l <Right>
25 xnoremap i <Up>
26 xnoremap k <Down>
27 xnoremap j <Left>
28 xnoremap l <Right>
29 nnoremap K J
30 nnoremap J <Home>w
31 nnoremap L <End>
32 set autochdir
33 set cmdheight=1
34 set completeopt=longest,menu
35 set directory=$HOME/var/cache/vim/swap
36 set encoding=utf-8
37 set foldcolumn=0
38 set foldenable
39 set foldexpr=GetFoldExprFromIndent()
40 set foldmethod=expr
41 set foldminlines=0
42 set history=2048
43 set hlsearch
44 set incsearch
45 set laststatus=2
46 set lazyredraw
47 set list
48 set path=.,/usr/include,/usr/local/include,,
49 set scroll=0
50 set scrolloff=0
51 set sidescroll=0
52 set sidescrolloff=0
53 set swapfile
54 set matchpairs+=<:>
55 set maxmempattern=2000
56 set nocompatible
57 set noerrorbells
58 set noignorecase
59 set loadplugins
60 set nowrap
61 set nowrapscan
62 set number
63 set ruler
64 set runtimepath=$HOME/.vim,$VIMRUNTIME,$VIM
65 set sessionoptions=curdir,folds
66 set shiftwidth=2
67 set showcmd
68 set smartindent
69 set statusline=%F%=\ %m%R\ %l:%c\ x%02B\ %Y\ %{&encoding}
70 set tabstop=2
71 set ttyfast
72 set undolevels=512
73 set updatetime=4096
74 set verbose=0
75 set viewdir=$HOME/var/lib/vim/view
76 set viminfo+=n$HOME/var/cache/vim/info
77 set novisualbell
78 set visualbell t_vb=
79 set whichwrap+=<,>,[,]
80 set wildignore=*.a,*.d,*.o,*.so,*~,*.cmo,*.cmi,*.cmx,*.cmxs,*.cma,*.cmxa,*.byte,*.native
81 set wildmenu
82 set wildmode=longest,list,full
83 syntax on
84 if (&term == "linux")
85 set foldtext=substitute(getline(v\:foldstart),'\\t','\|_','g').'\ \ ('.(v\:foldend-v\:foldstart+1).')\ '
86 set fillchars=fold:_
87 set list listchars=nbsp:+,tab:\|_,trail:_,extends:>,precedes:<
88 else
89 set foldtext=substitute(getline(v\:foldstart),'\\t','⎢·','g').'\ \ ('.(v\:foldend-v\:foldstart+1).')\ '
90 set fillchars=fold:·
91 set list listchars=nbsp:¬,tab:⎢·,trail:·,extends:>,precedes:<
92 endif
93 if (v:version >= 700)
94 hi TabLine term=bold,reverse ctermfg=white ctermbg=blue cterm=none
95 hi TabLineFill term=bold,reverse ctermfg=none ctermbg=blue cterm=none
96 hi TabLineSel term=reverse ctermfg=white ctermbg=none cterm=bold
97 inoremap <C-S-tab> <Esc>:tabprevious<CR>i
98 inoremap <C-t> <Esc>:tabnew<CR>
99 inoremap <C-tab> <Esc>:tabnext<CR>i
100 nnoremap <C-S-tab> :tabprevious<CR>
101 nnoremap <Esc><tab> :tabprevious<CR>
102 nnoremap <C-t> :tabnew<CR>
103 nnoremap <tab> :tabnext<CR>
104 nnoremap <C-tab> :tabprevious<CR>
105 nnoremap td :tabclose<CR>
106 nnoremap ti :tabfirst<CR>
107 nnoremap tj :tabprev<CR>
108 nnoremap tk :tablast<CR>
109 nnoremap tl :tabnext<CR>
110 nnoremap tm :tabm<Space>
111 nnoremap tn :tabnew<Space>
112 nnoremap tt :tabedit<Space>
113 set tabpagemax=1000
114 set sessionoptions+=tabpages
115 endif
116 if (v:version >= 703)
117 set undodir=$HOME/var/cache/vim/undo/
118 set undofile
119 endif
120 """
121 """ filetypes
122 """
123 autocmd BufNewFile,BufRead *.hledger,*.ledger,*.journal setfiletype hledger
124 autocmd Filetype hledger set iskeyword+=.,38,39,40,41,44,45,58
125 """
126 """ plugins
127 """
128 runtime plugin/gundo.vim
129 runtime plugin/gzip.vim
130 runtime macros/justify.vim
131 let b:match_words = '«:»,“:”'
132 runtime plugin/matchit.vim
133 let g:netrw_liststyle = 3
134 "let g:netrw_cursorline = 0
135 let s:netrw_usercul = 0
136 runtime plugin/netrwPlugin.vim
137
138 " EasyAlign
139 vmap <Enter> <Plug>(EasyAlign)
140 nmap <Leader>a <Plug>(EasyAlign)
141 let g:easy_align_ignore_groups = ['Comment', 'String', 'hledgerTransaction']
142
143 " neocomplcache
144 " Disable automatic completion popup
145 let g:neocomplcache_disable_auto_complete = 1
146 " Disable AutoComplPop.
147 let g:acp_enableAtStartup = 0
148 " Use neocomplcache.
149 let g:neocomplcache_enable_at_startup = 1
150 " Use smartcase.
151 let g:neocomplcache_enable_smart_case = 1
152 " Set minimum syntax keyword length.
153 let g:neocomplcache_min_syntax_length = 2
154 let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'
155
156 " Define dictionary.
157 let g:neocomplcache_dictionary_filetype_lists = {
158 \ 'default' : '',
159 \ 'vimshell' : $HOME.'/.vimshell_hist',
160 \ 'scheme' : $HOME.'/.gosh_completions'
161 \ }
162
163 " Define keyword.
164 if !exists('g:neocomplcache_keyword_patterns')
165 let g:neocomplcache_keyword_patterns = {}
166 endif
167 let g:neocomplcache_keyword_patterns['default'] = '\h\w*'
168
169 " Plugin key-mappings.
170 inoremap <expr><C-g> neocomplcache#undo_completion()
171 inoremap <expr><C-l> neocomplcache#complete_common_string()
172
173 " Complete with <Tab>.
174 "inoremap <expr><TAB> pumvisible() ? "\<C-n>" : <SID>check_back_space() ? "\<TAB>" : "\<C-x>\<C-u>"
175 inoremap <expr><TAB> pumvisible() ? neocomplcache#complete_common_string() : <SID>check_back_space() ? "\<TAB>" : "\<C-x>\<C-u>"
176
177 function! s:check_back_space()
178 let col = col('.') - 1
179 return !col || getline('.')[col - 1] =~ '\s'
180 endfunction
181
182 " Choose candidate with <CR>.
183 inoremap <expr><CR> neocomplcache#smart_close_popup() . “\<CR>”
184
185 " Recommended key-mappings.
186 " <CR>: close popup and save indent.
187 inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>
188 function! s:my_cr_function()
189 return neocomplcache#smart_close_popup() . "\<CR>"
190 " For no inserting <CR> key.
191 "return pumvisible() ? neocomplcache#close_popup() : "\<CR>"
192 endfunction
193 " <TAB>: completion.
194 "inoremap <expr><TAB> pumvisible() ? neocomplcache#complete_common_string() : "\<TAB>"
195 "inoremap <expr><TAB> neocomplcache#complete_common_string()
196 " <C-h>, <BS>: close popup and delete backword char.
197 inoremap <expr><C-h> neocomplcache#smart_close_popup()."\<C-h>"
198 inoremap <expr><BS> neocomplcache#smart_close_popup()."\<C-h>"
199 inoremap <expr><C-y> neocomplcache#close_popup()
200 inoremap <expr><C-e> neocomplcache#cancel_popup()
201 " Close popup by <Space>.
202 inoremap <expr><Space> pumvisible() ? neocomplcache#close_popup() : "\<Space>"
203
204 " Sort choices by bytes
205 call neocomplcache#custom_source('_', 'sorters', ['sorter_bytes'])
206
207 " For cursor moving in insert mode(Not recommended)
208 "inoremap <expr><Left> neocomplcache#close_popup() . "\<Left>"
209 "inoremap <expr><Right> neocomplcache#close_popup() . "\<Right>"
210 "inoremap <expr><Up> neocomplcache#close_popup() . "\<Up>"
211 "inoremap <expr><Down> neocomplcache#close_popup() . "\<Down>"
212 " Or set this.
213 "let g:neocomplcache_enable_cursor_hold_i = 1
214 " Or set this.
215 "let g:neocomplcache_enable_insert_char_pre = 1
216
217 " AutoComplPop like behavior.
218 "let g:neocomplcache_enable_auto_select = 1
219
220 " Enable heavy features.
221 " Use camel case completion.
222 "let g:neocomplcache_enable_camel_case_completion = 1
223 " Use underbar completion.
224 let g:neocomplcache_enable_underbar_completion = 1
225
226 " Shell like behavior(not recommended).
227 "set completeopt+=longest
228 "let g:neocomplcache_enable_auto_select = 1
229 "let g:neocomplcache_disable_auto_complete = 1
230 "inoremap <expr><TAB> pumvisible() ? "\<Down>" : "\<C-x>\<C-u>"
231
232 " Enable omni completion.
233 autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS
234 autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
235 autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
236 autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
237 autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags
238
239 " Enable heavy omni completion.
240 if !exists('g:neocomplcache_omni_patterns')
241 let g:neocomplcache_omni_patterns = {}
242 endif
243 let g:neocomplcache_omni_patterns.php = '[^. \t]->\h\w*\|\h\w*::'
244 let g:neocomplcache_omni_patterns.c = '[^.[:digit:] *\t]\%(\.\|->\)'
245 let g:neocomplcache_omni_patterns.cpp = '[^.[:digit:] *\t]\%(\.\|->\)\|\h\w*::'
246
247 " For perlomni.vim setting.
248 " https://github.com/c9s/perlomni.vim
249 let g:neocomplcache_omni_patterns.perl = '\h\w*->\h\w*\|\h\w*::'
250 runtime plugin/neocomplcache.vim