[fix] github username in scripts
[dotfiles_afify.git] / .vimrc
blobf65dd17c8074d2250ecb61bba3a5c5375c159ddc
1 "==============================================================================
2 " Main
3 "==============================================================================
4 let mapleader=" "
5 set shell=bash
6 set encoding=utf-8
7 set fileformat=unix
8 set noswapfile
9 set nocompatible
11 "==============================================================================
12 " Plugins
13 "==============================================================================
14 source ~/.vim/comment.vim
16 call plug#begin('~/.vim/plugged')
17 " Git
18 Plug 'airblade/vim-gitgutter'
20 " Themes
21 Plug 'justinmk/vim-syntax-extra'
22 Plug 'morhetz/gruvbox'
23 Plug 'tomasr/molokai'
25 " Syntax
26 Plug 'ap/vim-css-color'
27 Plug 'mechatroner/rainbow_csv'
28 Plug 'MTDL9/vim-log-highlighting'
30 " Line
31 Plug 'vim-airline/vim-airline'
32 Plug 'vim-airline/vim-airline-themes'
33 Plug 'ryanoasis/vim-devicons'
35 " Auto
36 Plug 'maralla/completor.vim'
37 Plug 'vim-syntastic/syntastic'
39 call plug#end()
41 "==============================================================================
42 " Tabs & Invisible characters
43 "==============================================================================
44 set list
45 set listchars=tab:>—,nbsp:␣,trail:.
46 set tabstop=4
47 set shiftwidth=4
48 set noautoindent
49 " filetype plugin indent on
50 set noexpandtab
52 "==============================================================================
53 " Theme and  Display
54 "==============================================================================
55 " Theme
56 syntax on
57 set t_Co=256
58 set background=dark
59 let g:gruvbox_italic =1
60 let g:gruvbox_contrast_dark='hard'
61 colorscheme gruvbox
62 " colorscheme molokai
64 " Column length"
65 set colorcolumn=80,81
66 autocmd FileType gitcommit  set colorcolumn=50,51,72,73
67 autocmd FileType gitrebase  set colorcolumn=63,64
68 hi ColorColumn                                 ctermbg=232
70 hi Visual                                      ctermbg=237
71 hi Normal                                      ctermbg=0
73 " Line numbers
74 set number
75 hi LineNr                   ctermfg=236        ctermbg=232
77 " Cursor
78 hi CursorLine                                  ctermbg=232
79 hi CursorLineNR             ctermfg=166        ctermbg=232 cterm=bold
80 set cursorline
82 " Comments tab todo
83 hi Comment                  ctermfg=241        ctermbg=0   cterm=italic
84 hi SpecialKey               ctermfg=236        ctermbg=0
85 hi TODO                     ctermfg=red        ctermbg=0   cterm=bold
86 hi NonText                  ctermfg=235        ctermbg=0
88 " Git signes
89 hi clear SignColumn
90 hi GitGutterAdd             ctermfg=green      ctermbg=232
91 hi GitGutterChange          ctermfg=darkyellow ctermbg=232 cterm=bold
92 hi GitGutterDelete          ctermfg=red        ctermbg=232 cterm=bold
93 hi GitGutterChangeDelete    ctermfg=darkyellow ctermbg=232 cterm=bold
94 " hi Statement ctermfg=3
96 hi VertSplit                ctermfg=8          ctermbg=0
97 set splitbelow splitright
99 set wildmenu
100 set wildmode=list:full,full
102 " Search
103 set ignorecase "search case insensitive
104 set smartcase "if uppercase case sensitive
106 "==============================================================================
107 " Keymaping
108 "==============================================================================
109 "copy to global clipboard
110 vmap <C-c> y:call system("xclip -i -selection clipboard", getreg("\""))<cr>:call system("xclip -i", getreg("\""))<cr>
112 " replace word with yanked
113 nnoremap <C-p> cw<C-r>0<ESC>
115 " paste
116 nnoremap <C-c> :set invpaste paste?<CR>
117 set pastetoggle=<C-c>
118 set showmode
120 "Move lines up and down with controle + k or j
121 nnoremap <silent> <C-j> :move +1 <CR>
122 nnoremap <silent> <C-k> :move -2 <CR>
124 "Disable keys in Normal mode
125 no <Up>        <Nop>
126 no <Down>      <Nop>
127 no <Left>      <Nop>
128 no <Right>     <Nop>
129 no <Space>     <Nop>
130 no <PageUp>    <Nop>
131 no <PageDown>  <Nop>
132 no <BackSpace> <Nop>
133 no <F1>        <Nop>
134 no q           <Nop>
135 no Q           <Nop>
137 "Disable keys in Insert mode
138 ino <Up>       <Nop>
139 ino <Down>     <Nop>
140 ino <Left>     <Nop>
141 ino <PageUp>   <Nop>
142 ino <PageDown> <Nop>
143 ino <End>      <Nop>
144 ino <Home>     <Nop>
145 ino <F1>       <Nop>
147 " Add new line
148 noremap J o<esc>k
149 noremap K O<esc>j
151 " Go (start|end) of line
152 noremap H ^
153 noremap L $
155 " Split
156 nnoremap <Leader><CR> <Esc>:vsplit
158 nnoremap <silent> <Leader>= :vertical resize +1<CR>
159 nnoremap <silent> <Leader>- :vertical resize -1<CR>
160 nnoremap <silent> <Leader>0 :vertical resize 87<CR>
162 nnoremap <Leader>j <C-w>j
163 nnoremap <Leader>k <C-w>k
164 nnoremap <Leader>l <C-w>l
165 nnoremap <Leader>h <C-w>h
167 " Move the split
168 nnoremap <Leader>L <C-w>L
169 nnoremap <Leader>H <C-w>H
170 nnoremap <Leader>J <C-w>J
171 nnoremap <Leader>K <C-w>K
173 " Search
174 nnoremap <Leader>f :set hlsearch<CR>/^[a-z].*(.*)$<CR>
175 nnoremap <Leader>o :set hlsearch!<CR>/\%80v.\+/<CR>
176 nnoremap <Leader>s :set hlsearch!<CR>
177 nnoremap * *zz
178 nmap n nzz
180 " Auto close
181 " inoremap ( ()<Left>
182 " inoremap { {}<Left>
183 " inoremap [ []<Left>
184 " inoremap " ""<Left>
185 " inoremap ' ''<Left>
187 " Quit
188 nnoremap <Leader>q :qa!<CR>
190 " Fold
191 nnoremap za :set foldmethod=syntax<CR>za
192 nnoremap <Leader>z :set foldmethod=syntax<CR>zM
193 nnoremap <Leader>Z :set foldmethod=syntax<CR>zR
195 " Syntastic
196 nnoremap <Leader>a :SyntasticCheck<CR>
197 nnoremap <Leader>n :lnext<CR>
199 " Custom functions
200 nnoremap <Leader>c :call Clean_file()<CR><CR>
202 " Enter command mode
203 noremap ; :
206 " Insert current date
207 map <Leader>i "=strftime("%d %m %Y")<CR>p
209 " cnoremap %s/ %s/\v
210 " command! -range=% HighlightRepeats <line1>,<line2>call HighlightRepeats()
211 " :w !sudo tee %
213 "==============================================================================
214 " Airline
215 "==============================================================================
216 let g:airline_powerline_fonts           = 1
217 let g:airline_theme                     = 'minimalist'
218 let g:airline#extensions#hunks#enabled  = 0
219 let g:airline#extensions#branch#enabled = 1
221 let g:airline_symbols        = {}
222 let g:airline_section_a      = ''
223 let g:airline_section_b      = ''
224 let g:airline_section_x      = ''
225 let g:airline_section_y      = ''
226 let g:airline_symbols.linenr = ''
228 "==============================================================================
229 " Linting
230 "==============================================================================
231 let g:syntastic_python_checkers = ['pylint']
232 let g:syntastic_c_checkers      = ["splint"]
233 let g:syntastic_c_splint_args   = "-checks -DVERSION=\\\"VERSION\\\""
235 set statusline+=%#warningmsg#
236 set statusline+=%{SyntasticStatuslineFlag()}
237 set statusline+=%*
239 let g:syntastic_check_on_wq              = 0
240 let g:syntastic_auto_loc_list            = 0
241 let g:syntastic_check_on_open            = 1
242 let g:syntastic_enable_highlighting      = 0 "underline word
243 let g:syntastic_always_populate_loc_list = 1
244 let g:syntastic_auto_jump                = 0
246 hi link SyntasticErrorLine error
247 hi SyntasticErrorLineNr ctermfg=black ctermbg=red
249 " Symbols color
250 hi SyntasticWarningSign ctermfg=226 ctermbg=232 cterm=italic
251 hi SyntasticErrorSign   ctermfg=red ctermbg=232 cterm=italic
253 " Symbols icon
254 let g:syntastic_error_symbol         = ''
255 let g:syntastic_warning_symbol       = ''
256 let g:syntastic_style_error_symbol   = ''
257 let g:syntastic_style_warning_symbol = ''
259 "==============================================================================
260 " Folding
261 "==============================================================================
262 " set nofen
263 set foldmethod=syntax
264 set foldnestmax=1
265 hi Folded ctermfg=90 ctermbg=232 cterm=italic
267 function! MyFoldText() " {{{
268 let line = getline(v:foldstart)
269 let nucolwidth = &fdc + &number * &numberwidth
270 let windowwidth = winwidth(0) - nucolwidth - 3
271 let foldedlinecount = v:foldend - v:foldstart
272 let onetab = strpart('          ', 0, &tabstop)
273 let line = substitute(line, '\t', onetab, 'g')
274 let line = strpart(line, 0, windowwidth - 2 -len(foldedlinecount))
275 let fillcharcount = 81 - len(line) - len(foldedlinecount)
276 let rest  = windowwidth - fillcharcount
277 return line . repeat(" ",fillcharcount) . foldedlinecount .' ' . repeat(" ", rest)
278 endfunction " }}}
280 set foldtext=MyFoldText()
282 "==============================================================================
283 " File type highlight
284 "==============================================================================
285 setf dosini
286 augroup filetypedetect
287         autocmd BufNewFile,BufRead *.h     set filetype=c
288         autocmd BufNewFile,BufRead *.csv   set filetype=csv
289         autocmd BufNewFile,BufRead *.gpg   set filetype=gpg
290         autocmd BufNewFile,BufRead LICENSE set filetype=text
291         autocmd BufNewFile,BufRead README  set filetype=markdown
292 augroup END
294 " csv colums color
295 let g:rcsv_colorpairs = [
296         \[124, 'red'],
297         \[186, 'green'],
298         \[172, 'yellow'],
299         \[66, 'blue'],
300         \[132, 'purple'],
301         \[72, 'aqua'],
302         \[166, 'orange'],
303         \['darkgreen', 'darkgreen'],
304         \['darkmagenta', 'darkmagenta'],
305         \['darkcyan', 'darkcyan']]
307 "==============================================================================
308 " Auto Completor
309 "==============================================================================
310 let g:completor_auto_trigger = 1
311 let g:completor_clang_binary = '/usr/bin/clang'
312 let g:completor_complete_options = 'menuone,noselect,preview'
314 inoremap <expr> <Tab>   pumvisible() ? "\<C-n>" : "\<Tab>"
315 inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
317 "==============================================================================
318 " Remove characters function
319 "==============================================================================
320 function! Clean_file()
321         " Save cursor line
322         let save_pos = getpos(".")
323         " Remove spaces from begin & end of line
324         " Remove spaces after tab
325         " Remove tab\n
326         " Remove file last line if empty
327         " Remove more than 2 empty lines
328         %s/ \+$//e |
329         \%s/^ \+//e |
330         \%s/\t \+/\t/e |
331         \%s/\t\+\n/\r/e |
332         \%s/\($\n\)\+\%$//e |
333         \%s/^\n\{2,\}/\r\r/e
334         " Return to saved cursor
335         call setpos(".", save_pos)
336 endfunction
338 "==============================================================================
339 " File Templates
340 "==============================================================================
341 let g:filename      = expand("%:r")
342 let g:filename_ext  = expand("%:e")
343 let g:upperfilename = toupper(filename)
345 autocmd BufNewFile *.sh  exe "normal!ggi#!/usr/bin/env bash\r"
346 autocmd BufNewFile *.py  exe "normal!ggi#!/usr/bin/env python3\r"
347 autocmd BufNewFile *.h  :call TempH()
348 autocmd BufNewFile *.c  :call TempC()
350 function! TempH()
351         exe "normal!ggi/* See LICENSE file for copyright and license details. */\r"
352         exe "normal!o#ifndef ".g:upperfilename."_H"
353         exe "normal!o#define ".g:upperfilename."_H"
354         exe "normal!o\r\r\r#endif /* ".g:upperfilename."_H */"
355         exe "normal!kk"
356 endfunction
358 function! TempC()
359         exe "normal!ggi/* See LICENSE file for copyright and license details. */\r"
360         exe "normal!o/* macros */"
361         exe "normal!o/* typedef */"
362         exe "normal!o/* function declarations */"
363         exe "normal!o/* function implementations */\r"
364         exe "normal!oint\rmain(void)\r{\r\rreturn 0;\r}"
365         exe "normal!kk"
366 endfunction