self-bootstrapping vimrc's
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

267 lines
6.6 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. filetype plugin indent on
  2. filetype on
  3. syntax on
  4. set nocompatible hidden laststatus=2
  5. let g:mapleader=" "
  6. let g:just_installed = 0
  7. function! InstallPlug()
  8. if !filereadable(expand("~/.vim/autoload/plug.vim"))
  9. " try to install plug using curl and wget
  10. " If installation succeeds, we should source vim plug.
  11. if !executable('git')
  12. echom 'git not found.'
  13. finish
  14. endif
  15. if executable('curl')
  16. let result = system('curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim')
  17. if v:shell_error == 0
  18. let g:just_installed = 1
  19. return
  20. endif
  21. endif
  22. echom 'curl failed, trying wget. ' . result
  23. if executable('wget') && executable('mkdir')
  24. let result = system('mkdir -p ~/.vim/autoload && wget -O ~/.vim/autoload/plug.vim https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim')
  25. if v:shell_error == 0
  26. let g:just_installed = 1
  27. return
  28. endif
  29. endif
  30. echom 'wget failed too. ' . result
  31. finish
  32. endif
  33. endfu
  34. call InstallPlug()
  35. if g:just_installed == 1
  36. source ~/.vim/autoload/plug.vim
  37. endif
  38. call plug#begin()
  39. Plug 'junegunn/seoul256.vim'
  40. Plug 'prabirshrestha/asyncomplete.vim'
  41. Plug 'prabirshrestha/vim-lsp'
  42. Plug 'prabirshrestha/asyncomplete-lsp.vim'
  43. Plug 'Townk/vim-autoclose'
  44. Plug 'tpope/vim-fugitive'
  45. Plug 'vim-airline/vim-airline'
  46. Plug 'vim-airline/vim-airline-themes'
  47. Plug 'junegunn/goyo.vim'
  48. Plug 'junegunn/limelight.vim'
  49. call plug#end()
  50. " options
  51. set nu
  52. set rnu
  53. set mouse+=a
  54. set linebreak
  55. set shiftwidth=2
  56. set tabstop=2
  57. set softtabstop=2
  58. set expandtab
  59. set smarttab
  60. set shiftround
  61. set autoindent
  62. set textwidth=80
  63. set colorcolumn=80
  64. set nowrap
  65. set undodir=~/.vim/undofiles
  66. set undofile nohlsearch incsearch
  67. set scrolloff=7
  68. set wildmode=longest,list,full
  69. set wildmenu
  70. autocmd FileType tex,text set nosmarttab autoindent
  71. autocmd Filetype python set textwidth=0 formatprg=autopep8 shiftwidth=4 tabstop=4 softtabstop=4
  72. autocmd FileType c,cpp,slang set nosmarttab autoindent
  73. autocmd Filetype markdown set nosmarttab shiftwidth=4 tabstop=4 softtabstop=4 autoindent
  74. autocmd BufReadPost *
  75. \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit'
  76. \ | exe "normal! g`\""
  77. \ | endif
  78. " Remaps
  79. nnoremap j gj
  80. nnoremap k gk
  81. nnoremap <C-h> <C-w>h
  82. nnoremap <C-j> <C-w>j
  83. nnoremap <C-k> <C-w>k
  84. nnoremap <C-l> <C-w>l
  85. nnoremap <C-h> <C-w>h
  86. nnoremap <C-j> <C-w>j
  87. nnoremap <C-k> <C-w>k
  88. nnoremap <C-l> <C-w>l
  89. inoremap <A-a> ā
  90. inoremap <A-e> ē
  91. inoremap <A-i> ī
  92. inoremap <A-o> ō
  93. inoremap <A-u> ū
  94. nnoremap <F12> :w<BAR>:!texbld run compile<CR>
  95. nnoremap <F5> :w<BAR>:!./test.sh<CR>
  96. vnoremap J :m '>+1<CR>gv=gv
  97. vnoremap K :m '<-2<CR>gv=gv
  98. nnoremap J mzJ`z
  99. nnoremap <C-d> <C-d>zz
  100. nnoremap <C-u> <C-u>zz
  101. nnoremap n nzzzv
  102. nnoremap N Nzzzv
  103. xnoremap <leader>p _dP
  104. vnoremap <leader>y +y
  105. nnoremap <leader>y +y
  106. nnoremap <leader>Y +Y
  107. nnoremap <leader>x :!chmod +x %:p<CR>
  108. nnoremap <leader>X :!chmod -x %<CR>
  109. nnoremap <leader>e :! %:p<CR>
  110. nnoremap <leader>1 1gt
  111. nnoremap <leader>2 2gt
  112. nnoremap <leader>3 3gt
  113. nnoremap <leader>4 4gt
  114. nnoremap <leader>5 5gt
  115. nnoremap <leader>6 6gt
  116. nnoremap <leader>7 7gt
  117. nnoremap <leader>8 8gt
  118. nnoremap <leader>9 9gt
  119. nnoremap <leader>b :wprev<CR>
  120. nnoremap <leader>n :wnext<CR>
  121. nnoremap <C-n> :Lexplore<CR>
  122. nnoremap <leader>pv :Explore<CR>
  123. " Plugin options must go at the bottom of the file.
  124. " install plugins
  125. if g:just_installed == 1
  126. echom 'Installing Plugins...'
  127. PlugInstall
  128. endif
  129. " Goyo and themes
  130. let g:seoul256_background = 234
  131. set termguicolors
  132. set background=dark
  133. colorscheme seoul256
  134. autocmd! User GoyoEnter Limelight
  135. autocmd! User GoyoLeave Limelight!
  136. let g:airline_theme = "seoul256"
  137. let g:airline_powerline_fonts = 1
  138. let g:airline#extensions#tabline#enabled = 1
  139. nnoremap <leader>z :Goyo <CR>
  140. nnoremap <leader>gs :Git <CR>
  141. " lsp
  142. set cot+=preview
  143. function! s:on_lsp_buffer_enabled() abort
  144. setlocal omnifunc=lsp#complete
  145. setlocal signcolumn=yes
  146. if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif
  147. nmap <buffer> gd <plug>(lsp-definition)
  148. nmap <buffer> gs <plug>(lsp-document-symbol-search)
  149. nmap <buffer> gS <plug>(lsp-workspace-symbol-search)
  150. nmap <buffer> gr <plug>(lsp-references)
  151. nmap <buffer> gi <plug>(lsp-implementation)
  152. nmap <buffer> gt <plug>(lsp-type-definition)
  153. nmap <buffer> <leader>rn <plug>(lsp-rename)
  154. nmap <buffer> [g <plug>(lsp-previous-diagnostic)
  155. nmap <buffer> ]g <plug>(lsp-next-diagnostic)
  156. nmap <buffer> K <plug>(lsp-hover)
  157. nnoremap <buffer> <expr><c-f> lsp#scroll(+4)
  158. nnoremap <buffer> <expr><c-d> lsp#scroll(-4)
  159. let g:lsp_format_sync_timeout = 1000
  160. autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync')
  161. endfunction
  162. augroup lsp_install
  163. au!
  164. autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
  165. augroup END
  166. imap <c-space> <Plug>(asyncomplete_force_refresh)
  167. inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
  168. inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
  169. inoremap <expr> <cr> pumvisible() ? "\<C-y>\<cr>" : "\<cr>"
  170. autocmd! CompleteDone * if pumvisible() == 0 | pclose | endif
  171. " register language servers below.
  172. "
  173. if executable('clangd')
  174. au User lsp_setup call lsp#register_server({
  175. \ 'name': 'clangd',
  176. \ 'cmd': {server_info->['clangd', '-background-index']},
  177. \ 'whitelist': ['c', 'cpp', 'objc', 'objcpp'],
  178. \ })
  179. endif
  180. if executable('pyls')
  181. au User lsp_setup call lsp#register_server({
  182. \ 'name': 'pyls',
  183. \ 'cmd': {server_info->['pyls']},
  184. \ 'whitelist': ['python'],
  185. \ })
  186. endif
  187. if executable('texlab')
  188. autocmd User lsp_setup call lsp#register_server({
  189. \'name': 'texlab',
  190. \'cmd': {server_info->['texlab']},
  191. \'whitelist': ['tex']
  192. \})
  193. endif
  194. if executable('gopls')
  195. au User lsp_setup call lsp#register_server({
  196. \ 'name': 'gopls',
  197. \ 'cmd': {server_info->['gopls', '-remote=auto']},
  198. \ 'allowlist': ['go', 'gomod', 'gohtmltmpl', 'gotexttmpl'],
  199. \ })
  200. autocmd BufWritePre *.go
  201. \ call execute('LspDocumentFormatSync') |
  202. \ call execute('LspCodeActionSync source.organizeImports')
  203. endif
  204. if executable('typescript-language-server')
  205. au User lsp_setup call lsp#register_server({
  206. \ 'name': 'javascript support using typescript-language-server',
  207. \ 'cmd': {server_info->[&shell, &shellcmdflag, 'typescript-language-server --stdio']},
  208. \ 'root_uri':{server_info->lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_file_directory(lsp#utils#get_buffer_path(), 'package.json'))},
  209. \ 'whitelist': ['javascript', 'javascript.jsx', 'javascriptreact', 'typescript', 'typescriptreact'],
  210. \ })
  211. endif