. . .
at main 393 lines 9.9 kB view raw
1 2" Plugins 3 4call plug#begin('~/.local/share/nvim/plugged') 5 6" General 7Plug 'preservim/nerdtree' 8Plug 'scrooloose/nerdcommenter' 9Plug 'tmhedberg/SimpylFold' 10Plug 'Maan2003/lsp_lines.nvim' 11 12" fuzzy find 13Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } 14Plug 'junegunn/fzf.vim' 15 16" Appearance 17Plug 'vim-airline/vim-airline' 18Plug 'vim-airline/vim-airline-themes' 19Plug 'bluz71/vim-nightfly-colors', { 'as': 'nightfly' } 20Plug 'junegunn/goyo.vim' 21Plug 'junegunn/limelight.vim' 22 23" Web 24Plug 'othree/html5.vim' 25Plug 'pangloss/vim-javascript' 26Plug 'evanleck/vim-svelte', {'branch': 'main'} 27 28" wgsl 29Plug 'DingDean/wgsl.vim' 30 31" Rust 32"Plug 'rust-lang/rust.vim' 33"Plug 'neoclide/coc.nvim', {'branch': 'release'} 34 35call plug#end() 36 37:lua require('autumn') 38 39" Neovide / Plugin Config 40 41if exists("g:neovide") 42 let g:neovide_scale_factor = 1 43 let g:neovide_opacity = 0.7 44 let g:neovide_floating_blur_amount_x = 5.0 45 let g:neovide_floating_blur_amount_y = 5.0 46 let g:neovide_padding_left = 0 47 set linespace=1 48endif 49 50let g:SimpylFold_docstring_preview=1 51 52let g:NERDTreeWinPos = 'right' 53let g:NERDTreeFileLines = 1 54let g:NERDTreeShowHidden = 1 55let g:NERDTreeMinimalUI = 1 56let g:NERDTreeShowBookmarks = 1 57let g:NERDTreeChDirMode = 2 58 59let g:fzf_preview_window = 'right:60%' 60let g:fzf_action = { 61 \ 'ctrl-h': 'vsplit', 62 \ 'ctrl-v': 'split' 63 \ } 64augroup fzf 65 autocmd! 66 autocmd! FileType fzf 67 autocmd FileType fzf set laststatus=0 noshowmode noruler 68 \| autocmd BufLeave <buffer> set laststatus=2 showmode ruler 69augroup END 70 71" General Settings 72 73if exists("g:neovide") 74 " ctrl+scroll & control+0 to adjust scale & reset to default 75 nnoremap <C-ScrollWheelDown> :let g:neovide_scale_factor *= 0.9<return> 76 nnoremap <C-ScrollWheelUp> :let g:neovide_scale_factor *= 1.11111111<return> 77 nnoremap <c-0> :let g:neovide_scale_factor = 1.0<return> 78endif 79 80" theme / appearance 81colorscheme nightfly 82syntax on 83filetype on 84filetype plugin on 85filetype indent on 86set t_Co=256 87set guifont=Source\ Code\ Pro:h10 88set termguicolors 89set number 90set cursorline 91set colorcolumn=95 92" set textwidth=95 annoying automatic line break bullshit 93set signcolumn=yes 94 95" tabbing 96set shiftwidth=4 97set tabstop=4 98set softtabstop=4 99set smartindent 100set expandtab 101 102" make line breaks traversable 103set backspace=indent,eol,start 104set whichwrap+=<,>,h,l 105 106" use system clipboard 107set clipboard=unnamed 108set clipboard+=unnamedplus 109 110" nerd shit / &c 111set encoding=utf-8 112set backupdir=~/.vim/backup 113set directory=~/.vim/swap 114set updatetime=200 115set history=1000 116set backup 117set ruler " column / row number 118set showcmd 119set showmode 120set showmatch 121set hlsearch 122set incsearch 123set wildmenu 124set wildmode=list:longest 125set foldmethod=indent 126set foldlevel=99 127set formatoptions-=ro 128 129" Highlighting 130 131highlight ExtraWhitespace ctermbg=red guibg=red 132highlight OverLength ctermbg=darkred guibg=red 133 134augroup Whitespace 135 autocmd! 136 autocmd VimEnter,WinEnter * call matchadd('ExtraWhitespace', '\s\+$') 137 autocmd VimEnter,WinEnter * call matchadd('OverLength', '\%95v.\+') 138 139 autocmd InsertEnter * call clearmatches() 140 autocmd InsertEnter * call matchadd('ExtraWhitespace', '\s\+\%#\@<!$') 141 autocmd InsertEnter * call matchadd('OverLength', '\%95v.\+') 142 143 autocmd InsertLeave * call clearmatches() 144 autocmd InsertLeave * call matchadd('ExtraWhitespace', '\s\+$') 145 autocmd InsertLeave * call matchadd('OverLength', '\%95v.\+') 146augroup END 147 148:highlight DiagnosticVirtualTextError guifg=red 149:highlight DiagnosticVirtualTextWarn guifg=yellow 150:highlight DiagnosticVirtualTextInfo guifg=white 151:highlight DiagnosticVirtualTextHint guifg=#CCDDFF 152 153" Keymapping 154 155let mapleader = "," 156 157" replace word 158nnoremap <leader>re lbdei 159 160" find & replace 161nnoremap <leader>rr :%s/\<<c-r><c-w>\>//g<left><left> 162 163" word count 164nnoremap <leader>wc g<c-g> 165 166" enter insert mode directly from visual mode 167vnoremap i <esc>i 168" copy from visual mode 169vnoremap <c-c> "+y 170 171" ctrl+f to find files 172nnoremap <c-f> :Files<cr> 173 174" alt+direction to move lines up/down 175nnoremap <silent><m-j> mz:m+<return>`z 176nnoremap <silent><m-k> mz:m-2<return>`z 177" & the same for multiple lines in visual mode 178" no idea how this works, took it from nori's dotfiles (https://nori.gay) 179vnoremap <silent><m-j> :m'>+<return>`<my`>mzgv`yo`z 180vnoremap <silent><m-k> :m'<-2<return>`>my`<mzgv`yo`z 181 182" same as above but for up/down instead of j/k 183nnoremap <silent><m-down> mz:m+<return>`z 184nnoremap <silent><m-up> mz:m-2<return>`z 185vnoremap <silent><m-down> :m'>+<return>`<my`>mzgv`yo`z 186vnoremap <silent><m-up> :m'<-2<return>`>my`<mzgv`yo`z 187 188" ctrl-z as undo, per my muscle memory 189nnoremap <c-z> u 190" +shift for redo 191nnoremap <c-s-z> <c-r> 192 193" undo current insert operation with ctrl-z 194inoremap <c-z> <esc>ui 195" & redo with ctrl-shift-z 196inoremap <c-s-z> <esc><c-r>i 197 198" paste in insert mode 199inoremap <c-v> <esc>:set paste<return>a<c-r>+<esc>:set nopaste<return>a 200" paste in normal mode 201nnoremap <c-v> :set paste<return>i<c-r>+<esc>:set nopaste<return> 202" jj to quickly exit insert 203inoremap jj <esc>l 204inoremap ;; <esc>l 205 206" cycle through completion options 207inoremap <leader><tab> <c-n> 208inoremap <leader><s-tab> <c-p> 209 210 211" navigate to errors 212"nnoremap <leader>er :Semshi goto error<return>:Semshi error<return> 213"nnoremap <leader>rr :Semshi error<return> 214"nnoremap <leader>ss :Semshi toggle<return> 215"nnoremap <leader>re :Semshi rename<return> 216 217" back to previous place 218nnoremap <leader>. `` 219 220" nerdtree - maybe make this a 2-key command instead of 3 221nnoremap <silent><leader>nt :NERDTreeToggle<return> 222 223" some niceties for editing this file 224nnoremap <leader>src :source ~/.config/nvim/init.vim<return> 225nnoremap <leader>erc :e ~/.config/nvim/init.vim<return> 226nnoremap <leader>plug :PlugInstall<return> 227 228" launch a terminal at cwd 229nnoremap <leader>tt :!alacritty &<return><return> 230 231" splits 232nnoremap <leader>hh :vsplit<return><c-w>l 233nnoremap <leader>vv :split<return><c-w> 234 235" folding 236nnoremap <space> za 237 238" insert lines above/below without entering insert mode 239nnoremap o o<esc> 240nnoremap O O<esc> 241 242" center the cursor when jumping between search results 243nnoremap n nzz 244nnoremap N Nzz 245 246" search for tab to clear search results 247nnoremap /<tab> :noh<return> 248 249" shift+direction to move between splits 250nnoremap <s-j> <c-w>j 251nnoremap <s-h> <c-w>h 252nnoremap <s-k> <c-w>k 253nnoremap <s-l> <c-w>l 254 255" ctrl+left/right to hop entire words at a time 256nnoremap <c-l> <c-right> 257nnoremap <c-h> <c-left> 258 259" ctrl+shift+right to hop to end of line 260nnoremap <c-s-l> $ 261nnoremap <c-s-right> $ 262 263" & similar for hopping to the start 264nnoremap <c-s-h> ^ 265nnoremap <c-s-left> ^ 266 267" maybe figure out how to make this terminal-mode only; makes ctrl-c work in 268" normal mode 269nnoremap <c-c> i<c-c><esc> 270 271" exit the terminal the same way as exiting insert mode 272tnoremap <esc> <C-\><C-n> 273tnoremap jj <C-\><C-n> 274 275" quick quit 276nnoremap <leader>q :q<return> 277" just close the whole damn editor 278"nnoremap <leader><leader><leader>q :qa!<return> 279 280" ctrl-s to save, normal & insert modes 281nnoremap <C-s> :w<return> 282inoremap <c-s> <esc>:w<return>li 283 284" clean up whitespace 285function! CleanupWhitespace() 286 " remove trailing whitespace 287 %s/\s\+$//ge 288 " ensure file starts with exactly one blank line 289 0put ='' 290 " ensure file ends with exactly one blank line 291 $put ='' 292 " remove multiple blank lines at start/end 293 %s/\%^\n\+/\r/ge 294 %s/\n\+\%$/\r/ge 295endfunction 296 297"nnoremap spaces :call CleanupWhitespace()<return> 298"nnoremap quotes :%s/'\([^']*\)'/"\1"/g<return> 299 300"function! QuickFixes() 301 302 303 304"endfunction 305 306" Goyo 307nnoremap <silent><leader>zen :Goyo<return> 308 309function! IntoZen() 310 setlocal linebreak 311 :Limelight 312 " navigate by actual position on screen instead of by row/column 313 nnoremap <buffer> j gj 314 nnoremap <buffer> k gk 315 nnoremap <buffer> $ g$ 316 nnoremap <buffer> ^ g^ 317 " undos break on punctuation 318 inoremap <buffer> . .<c-g>u 319 inoremap <buffer> ! !<c-g>u 320 inoremap <buffer> ? ?<c-g>u 321 inoremap <buffer> , ,<c-g>u 322 inoremap <buffer> ; ;<c-g>u 323 inoremap <buffer> : :<c-g>u 324endfunction 325 326function! ExitZen() 327 setlocal nolinebreak 328 :Limelight! 329 unmap <buffer> j 330 unmap <buffer> k 331 unmap <buffer> $ 332 unmap <buffer> ^ 333 iunmap <buffer> . 334 iunmap <buffer> ! 335 iunmap <buffer> ? 336 iunmap <buffer> , 337 iunmap <buffer> ; 338 iunmap <buffer> : 339endfunction 340 341autocmd! User GoyoEnter nested call IntoZen() 342autocmd! User GoyoLeave nested call ExitZen() 343 344" CoC 345"inoremap <silent><expr> <TAB> 346" \ coc#pum#visible() ? coc#pum#next(1) : 347" \ CheckBackspace() ? "\<Tab>" : 348" \ coc#refresh() 349"inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>" 350 351" Make <CR> to accept selected completion item or notify coc.nvim to format 352" <C-g>u breaks current undo, please make your own choice 353"inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm() 354 \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>" 355 356"function! CheckBackspace() abort 357" let col = col('.') - 1 358" return !col || getline('.')[col - 1] =~# '\s' 359"endfunction 360 361" Use <c-space> to trigger completion 362"if has('nvim') 363" inoremap <silent><expr> <c-space> coc#refresh() 364"else 365" inoremap <silent><expr> <c-@> coc#refresh() 366"endif 367 368"nmap <silent> gd <Plug>(coc-definition) 369"nmap <silent> gy <Plug>(coc-type-definition) 370"nmap <silent> gi <Plug>(coc-implementation) 371"nmap <silent> gr <Plug>(coc-references) 372 373" show docs in preview window 374"nnoremap <silent> <leader>k :call ShowDocumentation()<CR> 375 376"function! ShowDocumentation() 377" if CocAction('hasProvider', 'hover') 378" call CocActionAsync('doHover') 379" else 380" call feedkeys('K', 'in') 381" endif 382"endfunction 383 384" Highlight the symbol and its references when holding the cursor 385"autocmd CursorHold * silent call CocActionAsync('highlight') 386 387" Symbol renaming 388"nmap <leader><leader>r <Plug>(coc-rename) 389 390 391" Without this line, search results get highlighted whenever I source the file 392:noh 393