-
Notifications
You must be signed in to change notification settings - Fork 0
/
init.vim
209 lines (172 loc) · 5.34 KB
/
init.vim
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
""" This tries to be compatible with (modern) vim, not just neovim.
""" Plugins are configured in lua/config.lua, and are neovim specific.
" Set locale
language en_GB.UTF-8
" This is for vim/neovim, don't bother with vi compat
set nocompatible
" Use , as leader key
let mapleader = ","
let g:mapleader = ","
" Open new horizontal splits below
set splitbelow
" Define Help command that opens man pages in vertical splits
command! Help -nargs=* -bang -bar -addr=other vertical Man <args>
" If we are neovim, we have lua, so we do plugins and such there.
" Try to load lua/config.lua
if has('nvim')
lua << EOF
require("config")
EOF
endif
""""""""""""""""""""""""""""""
" Misc
""""""""""""""""""""""""""""""
" Make the mouse work as we want to
set mouse=a
" Use relative line numbers
set number
set relativenumber
" Set scroll offset to redduce movement
set scrolloff=7
" Use the system clipboard
set clipboard=unnamed,unnamedplus
" <Ctrl-d> redraws the screen and removes any search highlighting.
nnoremap <silent> <C-d> :nohl<CR><C-l>
" indent automaticly depending on filetype
set smartindent
" show existing tab with 4 spaces width
set tabstop=4
" when indenting with '>', use 4 spaces width
set shiftwidth=4
" On pressing tab, insert 4 spaces
set softtabstop=4
set expandtab
" Set to automaticly read file again if edited elsewhere
set autoread
" Ignore case when completing file names
set wildignorecase
" Also ignore case in other completions
set ignorecase
" ...except when we actually type upper case in the pattern
set smartcase
"" Remap keys (!)
" Move in wrapped lines
nnoremap j gj
nnoremap k gk
" hjkl in insert mode while holding alt
imap <A-k> <up>
imap <A-h> <left>
imap <A-j> <down>
imap <A-l> <right>
" For when we forget to open a file with sudo
cmap w!! w !sudo tee % >/dev/null
""""""""""""""""""""""""""""""
" Windows / splits
""""""""""""""""""""""""""""""
" Smart way to split windows
nmap <silent> <A-h> :vsplit<CR> :wincmd h<CR>
nmap <silent> <A-k> :split<CR> :wincmd k<CR>
nmap <silent> <A-l> :vsplit<CR> :wincmd l<CR>
nmap <silent> <A-j> :split<CR> :wincmd j<CR>
" Close all other windows
nmap <silent> <leader>o :wincmd o<CR>
" Smart way to move between windows
nnoremap <C-j> <C-W>j
nnoremap <C-k> <C-W>k
nnoremap <C-h> <C-W>h
nnoremap <C-l> <C-W>l
tnoremap <C-j> <C-\><C-N><C-W>j
tnoremap <C-k> <C-\><C-N><C-W>k
tnoremap <C-h> <C-\><C-N><C-W>h
tnoremap <C-l> <C-\><C-N><C-W>l
""""""""""""""""""""""""""""""
" netrw customization
""""""""""""""""""""""""""""""
" Sort plainly by name, no grouping on extensions
let g:netrw_sort_sequence = ''
let g:netrw_liststyle = 3
let g:netrw_banner = 0
let g:netrw_winsize = 15
" Open with shortcut
nnoremap <silent> <leader>e :Lexplore<CR>
""""""""""""""""""""""""""""""
" folds
""""""""""""""""""""""""""""""
set foldlevel=99
""""""""""""""""""""""""""""""
" Status line
""""""""""""""""""""""""""""""
" Always show the status line
set laststatus=2
""""""""""""""""""""""""""""""
" Colors
""""""""""""""""""""""""""""""
" set syntax highlighting
syntax on
" Use 24-bit colors
set termguicolors
" Customize colors (scheme independent, sortof. Won't look nice with a light
" one!
set background=dark
highlight Pmenu ctermfg=white ctermbg=black guifg=#ffffff guibg=#000000
highlight PmenuSel ctermfg=yellow ctermbg=black guifg=#ffff00 guibg=#000000
highlight Comment ctermfg=grey guifg=#aaaaaa
highlight CommentDoc ctermfg=grey guifg=#aaaaaa
highlight Todo ctermfg=white ctermbg=black guifg=#ffffff guibg=#000000
highlight Folded ctermfg=white ctermbg=black guifg=#aaaaaa guibg=#000000
set cursorline
highlight CursorLine cterm=NONE ctermbg=234 guibg=#1D1D1D
nnoremap <leader>l :set cursorline!<CR>
" show vertical lines as indent guides
set list
highlight Whitespace ctermfg=grey ctermbg=black guifg=#3D3D3D guibg=#242424
set listchars=tab:¦\ ,leadmultispace:¦\ \ \
nnoremap <leader>g :set list!<CR>
""""""""""""""""""""""""""""""
" Custom vim functions
""""""""""""""""""""""""""""""
" Run make and open the quickfix window in a split
function Make(...)
if a:0 > 0
silent make a:000
else
silent make
endif
if winnr('$') <= 1
vsplit
endif
let l:oldwin = winnr()
let l:newwin = l:oldwin + 1
if l:newwin > winnr('$')
let l:newwin = 1
endif
exe l:newwin . "wincmd w"
enew
setlocal buftype=quickfix bufhidden=wipe nobuflisted noswapfile nowrap
setlocal nomodifiable
copen
exe l:oldwin . "wincmd w"
endfunction
nmap <silent> <leader>c :call Make()<CR>
" Open corresponding .h/.cpp file
function OpenCorrespondingFile()
let l:suffix = fnamemodify(bufname("%"), ":e")
let l:root_fn = fnamemodify(bufname("%"), ":r")
if l:suffix == "h"
exe "wincmd p"
exe "edit " . l:root_fn . ".cpp"
elseif l:suffix == "cpp" || l:suffix == "c"
exe "wincmd p"
exe "edit " . l:root_fn . ".h"
endif
endfunction
nmap <silent> <leader>h :call OpenCorrespondingFile()<CR>
" Use clang-format to format C/C++ code.
function FormatFile()
let l:lines="all"
pyf ~/.config/nvim/clang-format.py
endfunction
nmap <silent> <leader>i :call FormatFile()<CR>
" Use python as a glorified calculator
command -nargs=* Calc !python3 -c "from math import *; print(<args>)"
command -nargs=* CalcInsert read !python3 -c "from math import *; print(<args>)"