nix

configuration files that power my machines
Log | Files | Refs | README | LICENSE

vimrc (4408B)


      1 exe "set runtimepath=~/.vim," . $VIMRUNTIME
      2 
      3 filetype plugin on
      4 syntax on
      5 
      6 set autoindent
      7 set backspace=indent,eol,start
      8 set backupcopy=yes
      9 set cursorline
     10 set formatoptions=qrn
     11 set hlsearch
     12 set ignorecase
     13 set incsearch
     14 set linebreak
     15 set nofoldenable
     16 set nojoinspaces
     17 set nowrap
     18 set number
     19 set relativenumber
     20 set scrolloff=15
     21 set shiftround
     22 set shiftwidth=4
     23 set shortmess=aoOtI
     24 set smartcase
     25 set synmaxcol=1000
     26 set viminfo='20,<1000,s1000
     27 set ruler
     28 set mouse=""
     29 
     30 let mapleader = "\<Space>"
     31 nnoremap <Leader>w :w<CR>
     32 nnoremap <silent> <leader>n :setlocal paste<CR>
     33 nnoremap <silent> <leader>q :%s/\s\+$//e<CR><C-o>
     34 nnoremap <silent> / :let @/ = ""<CR>:set hlsearch<CR>/
     35 nnoremap <silent> H :set hlsearch!<CR>
     36 
     37 highlight TrailingWhitespace ctermbg=black
     38 call matchadd('TrailingWhitespace', '\s\+$')
     39 
     40 highlight Normal ctermbg=none
     41 highlight MatchParen ctermbg=darkmagenta ctermfg=black
     42 
     43 command FixFile :set fileencoding=utf-8 fileformat=unix nobomb | %s/\r$//
     44 
     45 " Do not enter ex mode when I fat finger q with shift pressed
     46 nnoremap Q <nop>
     47 
     48 " Do not show me man pages when I'm bad at pressing k
     49 nnoremap K <nop>
     50 
     51 " I'm very bad at pressing things
     52 " nmap <F1> <nop>
     53 nmap <F1> :echo<CR>
     54 imap <F1> <C-o>:echo<CR>
     55 
     56 " Do not show command history window when :q gets entered in the wrong order
     57 map q: :q
     58 
     59 " When joining, do the right thing to join up function definitions
     60 vnoremap J J:s/( /(/g<CR>:s/,)/)/g<CR>
     61 
     62 " Quickly move around (and into) command mode
     63 " imap jk <Esc>
     64 " imap kj <Esc>:
     65 for keymode in ['n', 'v']
     66   exec keymode . 'noremap ; :'
     67   exec keymode . 'noremap : ;'
     68 endfor
     69 
     70 " Do not copy to default register on delete/change, use <Leader> prefixed
     71 " version to use regular delete/change
     72 for key in ['d', 'D', 'c', 'C']
     73   for keymode in ['n', 'v']
     74     exe keymode . 'noremap <Leader>' . key . ' ' . key
     75     exe keymode . 'noremap ' . key . ' "_' . key
     76   endfor
     77 endfor
     78 
     79 " gV to highlight previously inserted text
     80 nnoremap gV `[v`]
     81 
     82 " Automatically move to end of paste
     83 vnoremap <silent> y y`]
     84 vnoremap <silent> p p`]
     85 nnoremap <silent> p p`]
     86 
     87 " I only really use a single mark, so M to set it, m to retrieve it
     88 nnoremap M mA
     89 nnoremap m 'A
     90 
     91 augroup filetype_settings
     92   " Clear this autocmd group so that the settings won't get loaded over and
     93   " over again
     94   autocmd!
     95 
     96   autocmd BufNewFile,BufReadPost *.cconf,*.cinc,TARGETS setlocal filetype=python
     97   autocmd BufNewFile,BufReadPost *.lalrpop setlocal filetype=rust
     98   autocmd BufNewFile,BufReadPost *.def setlocal filetype=c
     99   autocmd BufNewFile,BufReadPost *.bb setlocal filetype=clojure
    100 
    101   for filetype in ['yaml', 'sql', 'ruby', 'html', 'css', 'xml', 'vim']
    102     exe 'autocmd FileType ' . filetype . ' setlocal sw=2 sts=2 ts=2'
    103   endfor
    104 
    105   for filetype in ['gitcommit']
    106     exe 'autocmd FileType ' . filetype . ' setlocal joinspaces'
    107   endfor
    108 
    109   for filetype in ['gitcommit']
    110     exe 'autocmd FileType ' . filetype . ' setlocal tw=72'
    111   endfor
    112 
    113   autocmd BufRead,BufNewFile */linux-mmots/*.c,*/linux-mmots/*.h setlocal textwidth=80
    114   autocmd BufRead,BufNewFile */systemd/*.c,*/systemd/*.h setlocal textwidth=109
    115 
    116 augroup END
    117 
    118 nnoremap <C-l> <C-l>zz
    119 
    120 augroup modechange_settings
    121   autocmd!
    122 
    123   " Clear search context when entering insert mode, which implicitly stops the
    124   " highlighting of whatever was searched for with hlsearch on. It should also
    125   " not be persisted between sessions.
    126   autocmd InsertEnter * let @/ = ''
    127   autocmd BufReadPre,FileReadPre * let @/ = ''
    128 
    129   autocmd InsertLeave * setlocal nopaste
    130 
    131   " Jump to last position in file
    132   autocmd BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
    133 
    134   " Balance splits on window resize
    135   autocmd VimResized * wincmd =
    136 augroup END
    137 
    138 
    139 " Do not overwrite default register when pasting in visual mode
    140 function! RestoreRegister()
    141   let @" = s:restore_reg
    142   return ''
    143 endfunction
    144 function! s:Repl()
    145   let s:restore_reg = @"
    146   return "p@=RestoreRegister()\<cr>"
    147 endfunction
    148 vmap <silent> <expr> p <sid>Repl()
    149 
    150 " Stuff to make working with unwrapped text easier
    151 for key in ['k', 'j']
    152   exe 'noremap <buffer> <silent> <expr> ' . key . ' v:count ? ''' . key . ''' : ''g' . key . ''''
    153   exe 'onoremap <silent> <expr> ' . key . ' v:count ? ''' . key . ''' : ''g' . key . ''''
    154 endfor
    155 nnoremap <silent> <Leader>E :set wrap<CR>:setlocal formatoptions-=t<CR>:set textwidth=0<CR>
    156 nnoremap <silent> <Leader>e :set nowrap<CR>:setlocal formatoptions+=t<CR>:set textwidth=79<CR>