1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
""""""""""""""""""""""""""
" Plugins
""""""""""""""""""""""""""
" Install vim-plug if not found
if empty(glob('~/.vim/autoload/plug.vim'))
silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
\ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
endif
" Run PlugInstall if there are missing plugins
autocmd VimEnter * if len(filter(values(g:plugs), '!isdirectory(v:val.dir)'))
\| PlugInstall --sync | source $MYVIMRC
\| endif
call plug#begin('~/.vim/plugged')
" UI & Themes
Plug 'joshdick/onedark.vim' " Onedark themes for vim
Plug 'vim-airline/vim-airline' " Vim statusline
Plug 'preservim/nerdtree' " Filetree in vim
Plug 'ryanoasis/vim-devicons' " Icons for vim
" Git integration
Plug 'tpope/vim-fugitive' " Git commands & informations
Plug 'airblade/vim-gitgutter' " Git diff
" Autocompletion, linter, syntax
Plug 'dense-analysis/ale' " Swiss-knife for all this
call plug#end()
filetype plugin indent on " Allow filetype detection, plugins, indentation
"""""""""""""""""""""""""
" Configuration
"""""""""""""""""""""""""
" VIM airline
let g:airline_theme='onedark' " Status line color & configuration
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
let g:airline_symbols.colnr = ' γ:'
let g:airline_symbols.colnr = ' β
:'
let g:airline_symbols.crypt = 'π'
let g:airline_symbols.linenr = 'β°'
let g:airline_symbols.linenr = ' β:'
let g:airline_symbols.linenr = ' β€:'
let g:airline_symbols.linenr = 'ΒΆ'
let g:airline_symbols.maxlinenr = ''
let g:airline_symbols.maxlinenr = 'γ'
let g:airline_symbols.branch = 'β'
let g:airline_symbols.paste = 'Ο'
let g:airline_symbols.paste = 'Γ'
let g:airline_symbols.paste = 'β₯'
let g:airline_symbols.spell = 'κ¨'
let g:airline_symbols.notexists = 'Ι'
let g:airline_symbols.notexists = 'β'
let g:airline_symbols.whitespace = 'Ξ'
let g:airline#extensions#ale#enabled = 1 " Allow ALE to use status line
" ALE
let g:ale_linters = {
\ 'javascript': ['eslint'],
\ 'python': ['flake8'],
\ }
let g:ale_completion_enabled = 1
let g:ale_completion_symbols = {
\ 'text': 'ξ',
\ 'method': 'ο§',
\ 'function': 'ο',
\ 'constructor': 'ο²',
\ 'field': 'ο',
\ 'variable': 'ο‘',
\ 'class': 'ο¨',
\ 'interface': 'ο ',
\ 'module': 'ο²',
\ 'property': 'ο',
\ 'unit': 'unit',
\ 'value': 'val',
\ 'enum': 'ο ',
\ 'keyword': 'keyword',
\ 'snippet': 'ξ',
\ 'color': 'color',
\ 'file': 'ο',
\ 'reference': 'ref',
\ 'folder': 'ξΏ',
\ 'enum member': 'ο²',
\ 'constant': 'ο‘',
\ 'struct': 'ξ',
\ 'event': 'event',
\ 'operator': 'ο',
\ 'type_parameter': 'type param',
\ '<default>': 'v'
\ }
" NerdTree
let NERDTreeShowHidden=1 " Show hidden files
" Close the tab if NERDTree is the only window remaining in it.
autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
" If another buffer tries to replace NERDTree, put it in the other window, and bring back NERDTree.
autocmd BufEnter * if bufname('#') =~ 'NERD_tree_\d\+' && bufname('%') !~ 'NERD_tree_\d\+' && winnr('$') > 1 |
\ let buf=bufnr() | buffer# | execute "normal! \<C-W>w" | execute 'buffer'.buf | endif
" If more than one window and previous buffer was NERDTree, go back to it.
autocmd BufEnter * if bufname('#') =~# "^NERD_tree_" && winnr('$') > 1 | b# | endif
let g:plug_window = 'noautocmd vertical topleft new' " Stop crash if vimplug command called on the nerdtree window
|