at main 9.4 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 signcolumn=yes 92 93" tabbing 94set shiftwidth=4 95set tabstop=4 96set softtabstop=4 97set smartindent 98set expandtab 99 100" make line breaks traversable 101set backspace=indent,eol,start 102set whichwrap+=<,>,h,l 103 104" use system clipboard 105set clipboard=unnamed 106set clipboard+=unnamedplus 107 108" nerd shit / &c 109set encoding=utf-8 110set backupdir=~/.vim/backup 111set directory=~/.vim/swap 112set updatetime=200 113set history=1000 114set backup 115set ruler " column / row number 116set showcmd 117set showmode 118set showmatch 119set hlsearch 120set incsearch 121set wildmenu 122set wildmode=list:longest 123set foldmethod=indent 124set foldlevel=99 125 126" Highlighting 127 128" highlight spaces at end of line (when not in insert mode) 129:highlight ExtraWhitespace ctermbg=red guibg=red 130:match ExtraWhitespace /\s\+\%#\@<!$/ 131:au InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/ 132:au InsertLeave * match ExtraWhitespace /\s\+$/ 133 134:highlight DiagnosticVirtualTextError guifg=red 135:highlight DiagnosticVirtualTextWarn guifg=yellow 136:highlight DiagnosticVirtualTextInfo guifg=white 137:highlight DiagnosticVirtualTextHint guifg=#CCDDFF 138 139" Keymapping 140 141let mapleader = "," 142 143" replace word 144nnoremap <leader>re lbdei 145 146" find & replace 147nnoremap <leader>rr :%s/\<<c-r><c-w>\>//g<left><left> 148 149" word count 150nnoremap <leader>wc g<c-g> 151 152" enter insert mode directly from visual mode 153vnoremap i <esc>i 154" copy from visual mode 155vnoremap <c-c> "+y 156 157" ctrl+f to find files 158nnoremap <c-f> :Files<cr> 159 160" alt+direction to move lines up/down 161nnoremap <silent><m-j> mz:m+<return>`z 162nnoremap <silent><m-k> mz:m-2<return>`z 163" & the same for multiple lines in visual mode 164" no idea how this works, took it from nori's dotfiles (https://nori.gay) 165vnoremap <silent><m-j> :m'>+<return>`<my`>mzgv`yo`z 166vnoremap <silent><m-k> :m'<-2<return>`>my`<mzgv`yo`z 167 168" same as above but for up/down instead of j/k 169nnoremap <silent><m-down> mz:m+<return>`z 170nnoremap <silent><m-up> mz:m-2<return>`z 171vnoremap <silent><m-down> :m'>+<return>`<my`>mzgv`yo`z 172vnoremap <silent><m-up> :m'<-2<return>`>my`<mzgv`yo`z 173 174" ctrl-z as undo, per my muscle memory 175nnoremap <c-z> u 176" +shift for redo 177nnoremap <c-s-z> <c-r> 178 179" undo current insert operation with ctrl-z 180inoremap <c-z> <esc>ui 181" & redo with ctrl-shift-z 182inoremap <c-s-z> <esc><c-r>i 183 184" paste in insert mode 185inoremap <c-v> <esc>:set paste<return>a<c-r>+<esc>:set nopaste<return>a 186" paste in normal mode 187nnoremap <c-v> :set paste<return>i<c-r>+<esc>:set nopaste<return> 188" jj to quickly exit insert 189inoremap jj <esc>l 190inoremap ;; <esc>l 191 192" cycle through completion options 193inoremap <leader><tab> <c-n> 194inoremap <leader><s-tab> <c-p> 195 196 197" navigate to errors 198"nnoremap <leader>er :Semshi goto error<return>:Semshi error<return> 199"nnoremap <leader>rr :Semshi error<return> 200"nnoremap <leader>ss :Semshi toggle<return> 201"nnoremap <leader>re :Semshi rename<return> 202 203" back to previous place 204nnoremap <leader>. `` 205 206" nerdtree - maybe make this a 2-key command instead of 3 207nnoremap <silent><leader>nt :NERDTreeToggle<return> 208 209" some niceties for editing this file 210nnoremap <leader>src :source ~/.config/nvim/init.vim<return> 211nnoremap <leader>erc :e ~/.config/nvim/init.vim<return> 212nnoremap <leader>plug :PlugInstall<return> 213 214" launch a terminal at cwd 215nnoremap <leader>tt :!alacritty &<return><return> 216 217" splits 218nnoremap <leader>hh :vsplit<return><c-w>l 219nnoremap <leader>vv :split<return><c-w> 220 221" folding 222nnoremap <space> za 223 224" insert lines above/below without entering insert mode 225nnoremap o o<esc> 226nnoremap O O<esc> 227 228" center the cursor when jumping between search results 229nnoremap n nzz 230nnoremap N Nzz 231 232" search for tab to clear search results 233nnoremap /<tab> :noh<return> 234 235" shift+direction to move between splits 236nnoremap <s-j> <c-w>j 237nnoremap <s-h> <c-w>h 238nnoremap <s-k> <c-w>k 239nnoremap <s-l> <c-w>l 240 241" ctrl+left/right to hop entire words at a time 242nnoremap <c-l> <c-right> 243nnoremap <c-h> <c-left> 244 245" ctrl+shift+right to hop to end of line 246nnoremap <c-s-l> $ 247nnoremap <c-s-right> $ 248 249" & similar for hopping to the start 250nnoremap <c-s-h> ^ 251nnoremap <c-s-left> ^ 252 253" maybe figure out how to make this terminal-mode only; makes ctrl-c work in 254" normal mode 255nnoremap <c-c> i<c-c><esc> 256 257" exit the terminal the same way as exiting insert mode 258tnoremap <esc> <C-\><C-n> 259tnoremap jj <C-\><C-n> 260 261" quick quit 262nnoremap <leader>q :q<return> 263" just close the whole damn editor 264"nnoremap <leader><leader><leader>q :qa!<return> 265 266" ctrl-s to save, normal & insert modes 267nnoremap <C-s> :w<return> 268inoremap <c-s> <esc>:w<return>li 269 270" clean up whitespace 271function! CleanupWhitespace() 272 " remove trailing whitespace 273 %s/\s\+$//ge 274 " ensure file starts with exactly one blank line 275 0put ='' 276 " ensure file ends with exactly one blank line 277 $put ='' 278 " remove multiple blank lines at start/end 279 %s/\%^\n\+/\r/ge 280 %s/\n\+\%$/\r/ge 281endfunction 282 283"nnoremap spaces :call CleanupWhitespace()<return> 284"nnoremap quotes :%s/'\([^']*\)'/"\1"/g<return> 285 286"function! QuickFixes() 287 288 289 290"endfunction 291 292" Goyo 293nnoremap <silent><leader>zen :Goyo<return> 294 295function! IntoZen() 296 setlocal linebreak 297 :Limelight 298 " navigate by actual position on screen instead of by row/column 299 nnoremap <buffer> j gj 300 nnoremap <buffer> k gk 301 nnoremap <buffer> $ g$ 302 nnoremap <buffer> ^ g^ 303 " undos break on punctuation 304 inoremap <buffer> . .<c-g>u 305 inoremap <buffer> ! !<c-g>u 306 inoremap <buffer> ? ?<c-g>u 307 inoremap <buffer> , ,<c-g>u 308 inoremap <buffer> ; ;<c-g>u 309 inoremap <buffer> : :<c-g>u 310endfunction 311 312function! ExitZen() 313 setlocal nolinebreak 314 :Limelight! 315 unmap <buffer> j 316 unmap <buffer> k 317 unmap <buffer> $ 318 unmap <buffer> ^ 319 iunmap <buffer> . 320 iunmap <buffer> ! 321 iunmap <buffer> ? 322 iunmap <buffer> , 323 iunmap <buffer> ; 324 iunmap <buffer> : 325endfunction 326 327autocmd! User GoyoEnter nested call IntoZen() 328autocmd! User GoyoLeave nested call ExitZen() 329 330" CoC 331"inoremap <silent><expr> <TAB> 332" \ coc#pum#visible() ? coc#pum#next(1) : 333" \ CheckBackspace() ? "\<Tab>" : 334" \ coc#refresh() 335"inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>" 336 337" Make <CR> to accept selected completion item or notify coc.nvim to format 338" <C-g>u breaks current undo, please make your own choice 339"inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm() 340 \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>" 341 342"function! CheckBackspace() abort 343" let col = col('.') - 1 344" return !col || getline('.')[col - 1] =~# '\s' 345"endfunction 346 347" Use <c-space> to trigger completion 348"if has('nvim') 349" inoremap <silent><expr> <c-space> coc#refresh() 350"else 351" inoremap <silent><expr> <c-@> coc#refresh() 352"endif 353 354"nmap <silent> gd <Plug>(coc-definition) 355"nmap <silent> gy <Plug>(coc-type-definition) 356"nmap <silent> gi <Plug>(coc-implementation) 357"nmap <silent> gr <Plug>(coc-references) 358 359" show docs in preview window 360"nnoremap <silent> <leader>k :call ShowDocumentation()<CR> 361 362"function! ShowDocumentation() 363" if CocAction('hasProvider', 'hover') 364" call CocActionAsync('doHover') 365" else 366" call feedkeys('K', 'in') 367" endif 368"endfunction 369 370" Highlight the symbol and its references when holding the cursor 371"autocmd CursorHold * silent call CocActionAsync('highlight') 372 373" Symbol renaming 374"nmap <leader><leader>r <Plug>(coc-rename) 375 376 377" Without this line, search results get highlighted whenever I source the file 378:noh 379