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.

260 lines
6.5 KiB

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