init.vim (7112B)
1 "### OPTIONS ############################################################### 2 syntax on 3 filetype plugin on 4 set nocompatible 5 6 " 4 is the best tab size; change my mind 7 set tabstop=4 softtabstop=4 shiftwidth=4 8 set expandtab 9 set smartindent 10 11 set foldmethod=indent 12 set foldlevelstart=20 13 14 " interface 15 set number 16 call matchadd('ColorColumn', '\%80v.', 100) " color column 17 set signcolumn=yes 18 set noshowmode " not needed because of statusline 19 set fillchars=eob:\ , 20 set shortmess+=I 21 " necessary to color the active line number 22 " this breaks fold highlighting when you are in the fold line which is a 23 " really annoying bug 24 set cursorline 25 26 " use persistent history. 27 " -> these are reset for /dev/shm to keep pass secure (see #autocommands) 28 if !isdirectory(expand("~/.vim/undo-dir")) 29 call mkdir(expand("~/.vim/undo-dir"), "", 0700) 30 endif 31 set undodir=~/.vim/undo-dir 32 set undofile 33 set nobackup 34 set noswapfile 35 36 " search 37 set incsearch 38 set nohlsearch 39 set ignorecase 40 set smartcase 41 42 set noerrorbells 43 set hidden " keep buffers open in background 44 set scrolloff=8 45 set updatetime=100 " for vim-gitgutter 46 47 set completeopt=menu,menuone,noselect,preview 48 set pumheight=10 49 50 "### PLUGINS ############################################################### 51 call plug#begin('~/.vim/plugged') 52 53 Plug 'airblade/vim-gitgutter' 54 Plug 'axvr/zepl.vim' 55 Plug 'embear/vim-localvimrc' 56 Plug 'godlygeek/tabular' 57 Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } 58 Plug 'junegunn/fzf.vim' 59 Plug 'junegunn/goyo.vim' 60 Plug 'mbbill/undotree' 61 Plug 'tpope/vim-commentary' 62 Plug 'tpope/vim-fugitive' 63 64 Plug 'ARM9/arm-syntax-vim' 65 Plug 'ap/vim-css-color' 66 Plug 'guns/vim-clojure-static' 67 Plug 'tpope/vim-classpath' 68 Plug 'tpope/vim-fireplace' 69 Plug 'https://git.sr.ht/~sircmpwn/hare.vim' 70 71 Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} 72 73 Plug 'neovim/nvim-lspconfig' 74 Plug 'hrsh7th/cmp-nvim-lsp' 75 Plug 'hrsh7th/cmp-path' 76 Plug 'hrsh7th/nvim-cmp' 77 Plug 'hrsh7th/cmp-vsnip' 78 Plug 'hrsh7th/vim-vsnip' 79 80 call plug#end() 81 82 83 "### SETTINGS ############################################################## 84 colorscheme dim 85 86 " statusline 87 lua require("statusline") 88 89 " spell check toggle 90 let g:myLangList = ["nospell", "de_de", "en_us"] 91 function! ToggleSpell() 92 let b:myLang = b:myLang + 1 93 if b:myLang >= len(g:myLangList) | let b:myLang = 0 | endif 94 if b:myLang == 0 95 setlocal nospell 96 else 97 execute "setlocal spell spelllang=".get(g:myLangList, b:myLang) 98 endif 99 echo "spell checking language:" g:myLangList[b:myLang] 100 endfunction 101 function! InitToggleSpell() 102 if !exists("b:myLang") 103 if &spell 104 let b:myLang = index(g:myLangList, &spelllang) 105 else 106 let b:myLang = 0 107 endif 108 endif 109 endfunction 110 111 " zepl.vim 112 runtime zepl/contrib/python.vim " enable the python contrib module. 113 let g:repl_config = { 114 \ "javascript": { "cmd": "node" }, 115 \ "haskell": { "cmd": "ghci" }, 116 \ "scheme": { "cmd": "racket" }, 117 \ "python": { 118 \ "cmd": "python", 119 \ "formatter": function("zepl#contrib#python#formatter") 120 \ } 121 \ } 122 123 let g:notes_dir = $NOTES_DIR 124 source $HOME/.config/nvim/notes.vim 125 126 source $HOME/.config/nvim/init-private.vim 127 128 lua require("config") 129 130 "### REMAPS ################################################################ 131 let mapleader = " " 132 " without this gitgutter overwrites <leader>h... making <leader>h unusable 133 let g:gitgutter_map_keys = 0 134 135 nnoremap <leader>n :new .<CR> 136 nnoremap <leader>h :wincmd h<CR> 137 nnoremap <leader>j :wincmd j<CR> 138 nnoremap <leader>k :wincmd k<CR> 139 nnoremap <leader>l :wincmd l<CR> 140 nnoremap <leader>u :UndotreeToggle<CR> 141 nnoremap <leader>b :Buffers<CR> 142 nnoremap <leader>f :Files<CR> 143 nnoremap <leader>m :History<CR> 144 nnoremap <leader>v :BCommits<CR> 145 nnoremap <leader>g :G 146 nnoremap <leader>w :w<CR> 147 nnoremap <leader>r :Goyo<CR> 148 nnoremap <leader>s :call ToggleSpell()<CR> 149 nnoremap <leader>a ggVG 150 nnoremap <leader>R :source $MYVIMRC<CR> 151 " from LukeSmith's dotfiles 152 " Compile document, be it groff/LaTeX/markdown/etc. 153 nnoremap <leader>c :w! \| !compiler "<c-r>%"<CR> 154 " Open corresponding .pdf/.html or preview 155 nnoremap <leader>p :!opout <c-r>%<CR><CR> 156 " switch to most recent file 157 nnoremap <leader><leader> <c-^> 158 " open repl 159 nnoremap <leader>z :bo 10 Repl<CR> 160 nnoremap Q gqq 161 " the ^ key is not reachable on qwertz keyboards 162 noremap 0 ^ 163 nmap <return> za 164 nmap <leader><return> zR 165 166 nmap <Leader>ii <Plug>(GitGutterPreviewHunk) 167 nmap <Leader>is <Plug>(GitGutterStageHunk) 168 nmap <Leader>iu <Plug>(GitGutterUndoHunk) 169 nmap <Leader>io <Plug>(GitGutterNextHunk) 170 171 " fix gx (see https://github.com/vim/vim/issues/4738) 172 nmap gx yiW:!xdg-open <cWORD><CR> <C-r>" & <CR><CR> 173 174 " exit terminal mode 175 tnoremap <Esc> <Esc><C-\><C-n> 176 177 " why would you use gf instead of gF? 178 nmap gf gF 179 180 " I always get these wrong 181 command! W w 182 command! Wq wq 183 command! WQ wq 184 command! Q q 185 186 noremap zj :call NextClosedFold('j')<cr> 187 noremap zk :call NextClosedFold('k')<cr> 188 189 function! NextClosedFold(dir) 190 let cmd = 'norm!z' . a:dir 191 let view = winsaveview() 192 let [l0, l, open] = [0, view.lnum, 1] 193 while l != l0 && open 194 exe cmd 195 let [l0, l] = [l, line('.')] 196 let open = foldclosed(l) < 0 197 endwhile 198 if open 199 call winrestview(view) 200 endif 201 endfunction 202 203 " snippets for autocomplete 204 imap <expr> <Tab> vsnip#jumpable(1) ? '<Plug>(vsnip-jump-next)' : '<Tab>' 205 smap <expr> <Tab> vsnip#jumpable(1) ? '<Plug>(vsnip-jump-next)' : '<Tab>' 206 imap <expr> <S-Tab> vsnip#jumpable(-1) ? '<Plug>(vsnip-jump-prev)' : '<S-Tab>' 207 smap <expr> <S-Tab> vsnip#jumpable(-1) ? '<Plug>(vsnip-jump-prev)' : '<S-Tab>' 208 209 210 "### AUTOCOMMANDS ########################################################## 211 fun! TrimWhitespace() 212 let l:save = winsaveview() 213 keeppatterns %s/\s\+$//e 214 call winrestview(l:save) 215 endfun 216 217 218 " remember folding 219 set viewoptions=cursor,folds,slash,unix 220 source $HOME/.config/nvim/restore-view.vim 221 222 augroup main 223 autocmd! 224 autocmd BufWritePre * call TrimWhitespace() 225 autocmd BufEnter * call InitToggleSpell() 226 " clear colon commands 227 autocmd CmdlineLeave : echo '' 228 229 " filetypes 230 autocmd BufRead,BufNewFile *.md setlocal filetype=markdown 231 autocmd BufRead,BufNewFile *.remark setlocal filetype=markdown 232 autocmd BufRead,BufNewFile *.elm setlocal tabstop=2 softtabstop=2 shiftwidth=2 233 " do not keep history for pass 234 autocmd BufEnter /dev/shm/* setlocal undofile& 235 autocmd BufRead,BufNewFile *.s,*.S setlocal filetype=arm " = armv6/7 236 autocmd FileType arm setlocal commentstring=//\ %s 237 autocmd BufRead,BufNewFile *.clj nnoremap <buffer> <leader>c :w! \| Require<CR> 238 239 " Don't screw up folds when inserting text that might affect them, until 240 " leaving insert mode. Foldmethod is local to the window. 241 autocmd InsertEnter * let w:last_fdm=&foldmethod | setlocal foldmethod=manual 242 autocmd InsertLeave * let &l:foldmethod=w:last_fdm 243 augroup END