. . .
1" This config is a subset of what's in my neovide init.vim; TODO should probably
2" consolidate & have that one source this one tbh
3
4" Plugins
5
6call plug#begin('~/.vim/plugged')
7
8" General
9Plug 'preservim/nerdtree'
10Plug 'scrooloose/nerdcommenter'
11Plug 'tmhedberg/SimpylFold'
12
13" Appearance
14Plug 'vim-airline/vim-airline'
15Plug 'vim-airline/vim-airline-themes'
16Plug 'bluz71/vim-nightfly-colors', { 'as': 'nightfly' }
17Plug 'junegunn/goyo.vim'
18Plug 'junegunn/limelight.vim'
19
20" Web
21Plug 'othree/html5.vim'
22Plug 'pangloss/vim-javascript'
23
24" Rust
25Plug 'rust-lang/rust.vim'
26
27call plug#end()
28
29let g:SimpylFold_docstring_preview=1
30
31let g:NERDTreeWinPos = 'right'
32let g:NERDTreeFileLines = 1
33let g:NERDTreeShowHidden = 1
34let g:NERDTreeMinimalUI = 1
35let g:NERDTreeShowBookmarks = 1
36let g:NERDTreeChDirMode = 2
37
38set nocompatible
39
40" theme / appearance
41colorscheme nightfly
42syntax on
43filetype on
44filetype plugin on
45filetype indent on
46set t_Co=256
47set guifont=Source\ Code\ Pro:h10
48set termguicolors
49set number
50set cursorline
51set signcolumn=yes
52
53" tabbing
54set shiftwidth=4
55set tabstop=4
56set softtabstop=4
57set smartindent
58set expandtab
59
60" make line breaks traversable
61set backspace=indent,eol,start
62set whichwrap+=<,>,h,l
63
64" use system clipboard
65set clipboard=unnamed
66set clipboard+=unnamedplus
67
68" nerd shit / &c
69set encoding=utf-8
70set backupdir=~/.vim/backup
71set directory=~/.vim/swap
72set updatetime=200
73set history=1000
74set backup
75set ruler " column / row number
76set showcmd
77set showmode
78set showmatch
79set hlsearch
80set incsearch
81set wildmenu
82set wildmode=list:longest
83set foldmethod=indent
84set foldlevel=99
85
86" Highlighting
87
88" highlight spaces at end of line (when not in insert mode)
89:highlight ExtraWhitespace ctermbg=red guibg=red
90:match ExtraWhitespace /\s\+\%#\@<!$/
91:au InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
92:au InsertLeave * match ExtraWhitespace /\s\+$/
93
94" Keymapping
95
96let mapleader = ","
97
98" replace word
99nnoremap <leader>r lbdei
100
101" enter insert mode directly from visual mode
102vnoremap i <esc>i
103" copy from visual mode
104vnoremap <c-c> "+y
105
106" ctrl+f to find files
107nnoremap <c-f> :Files<cr>
108
109" alt+direction to move lines up/down
110nnoremap <silent><m-j> mz:m+<return>`z
111nnoremap <silent><m-k> mz:m-2<return>`z
112" & the same for multiple lines in visual mode
113" no idea how this works, took it from nori's dotfiles (https://nori.gay)
114vnoremap <silent><m-j> :m'>+<return>`<my`>mzgv`yo`z
115vnoremap <silent><m-k> :m'<-2<return>`>my`<mzgv`yo`z
116
117" same as above but for up/down instead of j/k
118nnoremap <silent><m-down> mz:m+<return>`z
119nnoremap <silent><m-up> mz:m-2<return>`z
120vnoremap <silent><m-down> :m'>+<return>`<my`>mzgv`yo`z
121vnoremap <silent><m-up> :m'<-2<return>`>my`<mzgv`yo`z
122
123" ctrl-z as undo, per my muscle memory
124nnoremap <c-z> u
125" +shift for redo
126nnoremap <c-s-z> <c-r>
127
128" undo current insert operation with ctrl-z
129inoremap <c-z> <esc>ui
130" & redo with ctrl-shift-z
131inoremap <c-s-z> <esc><c-r>i
132
133" paste in insert mode
134inoremap <c-v> <esc>:set paste<return>a<c-r>+<esc>:set nopaste<return>a
135" paste in normal mode
136nnoremap <c-v> :set paste<return>i<c-r>+<esc>:set nopaste<return>
137" jj to quickly exit insert
138inoremap jj <esc>
139
140" cycle through completion options
141inoremap <leader><tab> <c-n>
142inoremap <leader><s-tab> <c-p>
143
144" back to previous place
145nnoremap <leader>. ``
146
147" nerdtree - maybe make this a 2-key command instead of 3
148nnoremap <silent><leader>nt :NERDTreeToggle<return>
149
150" some niceties for editing this file
151nnoremap <leader>src :source ~/.vimrc<return>
152nnoremap <leader>erc :e ~/.vimrc<return>
153nnoremap <leader>plug :PlugInstall<return>
154
155" launch a terminal at cwd
156nnoremap <leader>tt :!alacritty &<return><return>
157
158" splits
159nnoremap <leader>hh :vsplit<return><c-w>l
160nnoremap <leader>vv :split<return><c-w>
161
162" folding
163nnoremap <space> za
164
165" insert lines above/below without entering insert mode
166nnoremap o o<esc>
167nnoremap O O<esc>
168
169" center the cursor when jumping between search results
170nnoremap n nzz
171nnoremap N Nzz
172
173" search for tab to clear search results
174nnoremap /<tab> :noh<return>
175
176" shift+direction to move between splits
177nnoremap <s-j> <c-w>j
178nnoremap <s-h> <c-w>h
179nnoremap <s-k> <c-w>k
180nnoremap <s-l> <c-w>l
181
182" ctrl+left/right to hop entire words at a time
183nnoremap <c-l> <c-right>
184nnoremap <c-h> <c-left>
185
186" ctrl+shift+right to hop to end of line
187nnoremap <c-s-l> $
188nnoremap <c-s-right> $
189
190" & similar for hopping to the start
191nnoremap <c-s-h> ^
192nnoremap <c-s-left> ^
193
194" maybe figure out how to make this terminal-mode only; makes ctrl-c work in
195" normal mode
196nnoremap <c-c> i<c-c><esc>
197
198" exit the terminal the same way as exiting insert mode
199tnoremap <esc> <C-\><C-n>
200tnoremap jj <C-\><C-n>
201
202" quick quit
203nnoremap <leader>q :q<return>
204" just close the whole damn editor
205nnoremap <leader><leader><leader>q :qa!<return>
206
207" ctrl-s to save, normal & insert modes
208nnoremap <C-s> :w<return>
209inoremap <c-s> <esc>:w<return>li
210
211" Goyo
212nnoremap <silent><leader>zen :Goyo<return>
213
214function! IntoZen()
215 setlocal linebreak
216 :Limelight
217 " navigate by actual position on screen instead of by row/column
218 nnoremap <buffer> j gj
219 nnoremap <buffer> k gk
220 nnoremap <buffer> $ g$
221 nnoremap <buffer> ^ g^
222 " undos break on punctuation
223 inoremap <buffer> . .<c-g>u
224 inoremap <buffer> ! !<c-g>u
225 inoremap <buffer> ? ?<c-g>u
226 inoremap <buffer> , ,<c-g>u
227 inoremap <buffer> ; ;<c-g>u
228 inoremap <buffer> : :<c-g>u
229endfunction
230
231function! ExitZen()
232 setlocal nolinebreak
233 :Limelight!
234 unmap <buffer> j
235 unmap <buffer> k
236 unmap <buffer> $
237 unmap <buffer> ^
238 iunmap <buffer> .
239 iunmap <buffer> !
240 iunmap <buffer> ?
241 iunmap <buffer> ,
242 iunmap <buffer> ;
243 iunmap <buffer> :
244endfunction
245
246autocmd! User GoyoEnter nested call IntoZen()
247autocmd! User GoyoLeave nested call ExitZen()
248
249" Without this line, search results get highlighted whenever I source the file
250:noh
251