init.vim 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. call plug#begin('~/.vim/plugged')
  2. Plug 'tpope/vim-sensible'
  3. Plug 'tpope/vim-sleuth'
  4. Plug 'tpope/vim-fugitive'
  5. Plug 'tpope/vim-surround'
  6. Plug 'tpope/vim-abolish'
  7. Plug 'mhinz/vim-signify'
  8. Plug 'sjl/gundo.vim'
  9. Plug 'EinfachToll/DidYouMean'
  10. Plug 'idanarye/vim-merginal'
  11. Plug 'junegunn/fzf'
  12. Plug 'junegunn/fzf.vim'
  13. Plug 'itchyny/lightline.vim'
  14. Plug 'trusktr/seti.vim'
  15. if filereadable(expand('~/.vim/local-plugins.vim'))
  16. source ~/.vim/local-plugins.vim
  17. endif
  18. call plug#end()
  19. " ----- plugin settings ------
  20. let g:signify_vcs_list = [ 'git' ]
  21. let g:lightline = {
  22. \ 'colorscheme': 'wombat',
  23. \ 'active': {
  24. \ 'left': [ [ 'mode', 'paste' ],
  25. \ [ 'gitbranch', 'readonly', 'filename', 'modified' ] ]
  26. \ },
  27. \ 'component_function': {
  28. \ 'gitbranch': 'fugitive#head'
  29. \ },
  30. \ }
  31. " ------ settings ------
  32. " change terminal title
  33. set title
  34. " xdg-ish settings
  35. set undodir=~/.cache/vim/undo,.
  36. set backupdir=~/.cache/vim/backup,.
  37. set directory=~/.cache/vim/swap//,.
  38. " default indentation
  39. set shiftwidth=2
  40. set tabstop=4
  41. set expandtab
  42. " permanent undo history
  43. set undofile
  44. " allow switching buffers
  45. set hidden
  46. " always scroll
  47. set scrolloff=99
  48. " show line numbers
  49. set number
  50. set relativenumber
  51. " show gutter
  52. set signcolumn=yes
  53. " set wordwrap indent
  54. set nowrap
  55. set linebreak
  56. if exists("&breakindent")
  57. set breakindent
  58. set breakindentopt=shift:2,sbr
  59. endif
  60. " show whitespace
  61. set list
  62. " make a new copy of the file for backup
  63. " setting to no or auto messes with filewatchers
  64. set backupcopy=yes
  65. " disable modelines
  66. set nomodeline
  67. " ------ key bindings ------
  68. " ; as :
  69. nnoremap ; :
  70. vnoremap ; :
  71. " allow <ESC> via jj in insert mode
  72. inoremap jj <ESC>
  73. " tab switching
  74. nnoremap <C-T>h :tabprev<cr>
  75. nnoremap <C-T>l :tabnext<cr>
  76. " fix j/k with wraps
  77. nnoremap j gj
  78. nnoremap k gk
  79. vnoremap j gj
  80. vnoremap k gk
  81. " fzf
  82. nnoremap <C-P> :GitFiles -o -c --exclude-standard<CR>
  83. nnoremap <C-O> :Buffers<CR>
  84. if executable('rg')
  85. nnoremap <Leader>f :Rg<SPACE>
  86. elseif executable('ag')
  87. nnoremap <Leader>f :Ag<SPACE>
  88. endif
  89. " git
  90. nnoremap <Leader>gs :Gstatus<CR>
  91. nnoremap <Leader>gb :Merginal<CR>
  92. " undo tree
  93. nnoremap <Leader>ut :GundoToggle<CR>
  94. " vimrc
  95. nnoremap <Leader>ve :vsplit $MYVIMRC<CR>
  96. nnoremap <Leader>vs :source $MYVIMRC<CR>
  97. " ------ nvim specific ------
  98. if has('nvim')
  99. set inccommand=split
  100. tnoremap <C-[><C-[> <C-\><C-N>
  101. autocmd TermOpen * setlocal scrollback=10000 nonumber norelativenumber
  102. autocmd TermOpen * startinsert
  103. autocmd FileType fzf tnoremap <buffer> jj <ESC>
  104. autocmd BufWinEnter,WinEnter term://* startinsert
  105. autocmd BufLeave term://* stopinsert
  106. nnoremap <Leader>tv :vsp term://$SHELL<CR>
  107. nnoremap <Leader>to :term<CR>
  108. endif
  109. augroup formatting
  110. au!
  111. " strip trailing whitespace
  112. autocmd BufWritePre * :%s/\s\+$//e
  113. autocmd FileType markdown :set tw=80
  114. augroup end
  115. colorscheme seti
  116. if filereadable(expand('~/.vim/local-config.vim'))
  117. source ~/.vim/local-config.vim
  118. endif