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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
runtime ftplugin/man.vim
set nocompatible " don't be compatible to vi
set showcmd " show entered commands in status line
set showmatch " show matching brackets
set autoindent " indent new lines correctly
set hlsearch " highlight search results
set ignorecase " case-insensitive searching
set background=dark " color scheme for dark background
set title " set terminal title
set ruler " show line/column of cursor in status line
set tabstop=4 " display a tab as 4 spaces
"set softtabstop=4 " (soft) indent tabs with 4 spaces
set shiftwidth=4 " (auto)indent with 4 spaces (> <)
set noexpandtab " don't expand tabs to spaces
set nobackup " don't keep backup files
set showtabline=2 " always show tab line
set hidden " change buffers without saving
set cursorline " highlight current cursor line
set scrolloff=4 " keep 4 lines context when scrolling
set laststatus=2 " always show status line
set ttimeoutlen=50 " faster switch from insert to normal mode
set noshowmode " don't show current mode (done by airline)
set encoding=utf-8 " use utf8 by default
set number " enable line numbers
set relativenumber " show relative line numbers
set updatetime=100 " update gutter more often
set tags^=./.git/tags; " upwards search for tags file in .git/
set wildmenu " enable wildmenu for command completion
set wildmode=list:longest,full " use a bash-like command completion mode
set backspace=indent,eol,start " enable backspacing
set diffopt^=indent-heuristic,algorithm:histogram " better diffing
set grepprg=rg\ --vimgrep\ --no-heading\ --word-regexp\ --smart-case " use ripgrep for grepping
let mapleader="," " more convenient leader
syntax on " enable syntax highlighting
filetype plugin indent on
if exists('*popup_create')
set completeopt=menu,popup " use popup instead of preview window for completions
endif
set directory=~/.vim/swap,.,~/tmp,/var/tmp,/tmp " directory where to save/search swap files
set viminfo+=n~/.vim/viminfo " different location for viminfo file
" make indentation and trailing whitespaces visible
set list listchars=tab:·\ ,trail:·
" autocommands
autocmd FileType python setlocal tabstop=4 softtabstop=0
autocmd FileType c setlocal tabstop=4 softtabstop=0 noexpandtab
autocmd FileType perl setlocal tabstop=4 softtabstop=4 expandtab
autocmd FileType yaml setlocal tabstop=2 softtabstop=2 shiftwidth=2 expandtab
autocmd InsertEnter * if &number | set norelativenumber | endif
autocmd InsertLeave * if &number | set relativenumber | endif
" show cursorline only in active window
augroup CursorLine
autocmd!
autocmd VimEnter,WinEnter,BufWinEnter * set cursorline
autocmd WinLeave * set nocursorline
augroup END
" highlighting settings
if (&t_Co == 88)
highlight CursorLine cterm=NONE ctermbg=81
elseif (&t_Co == 256)
highlight CursorLine cterm=NONE ctermbg=237
highlight CursorLineNr cterm=NONE ctermbg=NONE
highlight Folded cterm=NONE ctermbg=239
highlight SignColumn ctermbg=234
highlight LineNr ctermfg=lightyellow ctermbg=234
highlight SpecialKey ctermfg=darkgray
highlight Pmenu ctermbg=darkgray
else
highlight CursorLine cterm=NONE ctermbg=darkgray
endif
" file browser
let g:netrw_liststyle=3 " tree style listing
let g:netrw_banner=0 " suppress banner on top
"let g:netrw_browse_split=3 " open files in new tab
let g:netrw_list_hide='^\..*$' " don't show hidden files
" key mappings
nnoremap <silent> <SPACE> :nohlsearch<CR>
nmap tn :tabnew<CR>
nmap tc :tabclose<CR>
noremap <silent> <F3> :ToggleBufExplorer<CR>
nnoremap <silent> <F4> :TagbarToggle<CR>
nnoremap <silent> <C-p> :Files<CR>
" disable arrow keys
noremap <Up> <Nop>
noremap <Down> <Nop>
noremap <Left> <Nop>
noremap <Right> <Nop>
" different keycodes in urxvt
nmap <ESC>[5^ <C-PageUp>
nmap <ESC>[6^ <C-PageDown>
" more convenient grepping
command -nargs=+ Grep execute 'silent grep! <args>' | execute 'redraw!' | execute 'copen'
nnoremap <leader>g :Grep <cword><CR>
" folding settings; disabled for now because of performance problems
"set foldmethod=syntax " fold automatically by syntax rules
"set foldlevel=0 " fold from top level
"set foldnestmax=1 " fold only 1 level
"let perl_fold=1
"let perl_nofold_packages=0
" GPG settings
augroup GnuPGExtra
autocmd User GnuPG setl foldmethod=marker foldclose=all foldopen=insert foldtext=v:folddashes.getline(v:foldstart)
augroup END
" BufExplorer settings
let g:bufExplorerSplitHorzSize=15
let g:bufExplorerSplitVertSize=40
let g:bufExplorerDefaultHelp=0
let g:bufExplorerShowNoName=1
" airline settings
let g:airline#extensions#whitespace#enabled=0
let g:airline#extensions#tabline#enabled=1
" LSC settings
let g:lsc_auto_map=v:true
let g:lsc_auto_map={'defaults': v:true, 'NextReference':'', 'PreviousReference':''}
let g:lsc_server_commands=
\ { 'rust': {
\ 'command': 'rust-analyzer',
\ 'log_level': -1,
\ 'suppress_stderr': v:true
\ },
\ 'c': {
\ 'command': ['ccls', '--init={"cache":{"directory":"' . $HOME . '/.cache/ccls-cache"}}'],
\ 'log_level': -1,
\ 'suppress_stderr': v:true
\ },
\ 'cpp': {
\ 'command': ['ccls', '--init={"cache":{"directory":"' . $HOME . '/.cache/ccls-cache"}}'],
\ 'log_level': -1,
\ 'suppress_stderr': v:true
\ }
\ }
" vim: set et:sw=4:sts=4
|