linux_course_doc/modules/qualifying/assets/vimrc_vundle_ide

225 lines
6.5 KiB
Plaintext
Raw Normal View History

2021-08-31 20:54:52 +02:00
" ----------------------------------------------------------------------------
" vundle essentials
" ----------------------------------------------------------------------------
set nocompatible
filetype off
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let vundle manage vundle...
Plugin 'VundleVim/Vundle.vim'
" Basic plugins
Plugin 'jiangmiao/auto-pairs'
Plugin 'preservim/nerdtree'
Plugin 'jeetsukumaran/vim-buffergator'
" IDE like plugins
Plugin 'prabirshrestha/asyncomplete.vim'
Plugin 'prabirshrestha/vim-lsp'
Plugin 'prabirshrestha/asyncomplete-lsp.vim'
Plugin 'mattn/vim-lsp-settings'
Plugin 'yami-beta/asyncomplete-omni.vim'
Plugin 'prabirshrestha/asyncomplete-file.vim'
" Language autocomplete for English
Plugin 'htlsne/asyncomplete-look'
" an additional colorscheme I like
Plugin 'altercation/vim-colors-solarized'
call vundle#end()
filetype plugin indent on
" ----------------------------------------------------------------------------
" basic essentials
" ----------------------------------------------------------------------------
" don't make vim vi compatible (if not set you miss out on a lot of features!)
" you'll see this option set in most configuration files found online
set nocompatible
" enable filetype recognition plus indent and plugin (pretty much mandatory)
filetype plugin indent on " required
" enable syntax highlighting
syntax on
" backspace can be a tricky thing and this setting make it work a lot better
set backspace=indent,eol,start
" when tab completing on the expert line you don't want to miss out on EDIT vs
" edit or nerdtree vs NERDTree and this setting ignores case completely
set ignorecase
" highlight your search patterns (very handy when building regexes)
set hlsearch
" highlight the search pattern as-you-go (tremendously helpful when
" constructing regexes)
set incsearch
" always show a status line at the bottom of your vim which shows some basic
" information about the file, which line you're at etc
set laststatus=2
" show files in statusbar when opening via expert mode
set wildmenu
" also show all possible expert mode commands in the statusline
set wildmode=full
" reverse numbering (in the sideline) so you don't have to manually count how
" many lines you have to yank
set rnu
" it's also nice to still have your absolute line number in the sideline
set nu
" can do copy paste from the clipboard
set clipboard=unnamedplus
" automatically save buffers
set autowrite
set autowriteall
" spaces not tabs for coding purposes
set sw=4
set ts=4
set sts=4
" mouse usage can be handy, especially when using LspPeekDefinition
set mouse=a
" enable code folding
set foldmethod=indent
" set SPACE to toggle a fold
nnoremap <SPACE> za
" set the leader key for shortcuts (uncomment if you don't want it to be the
" default \ key
"let mapleader=";"
" ----------------------------------------------------------------------------
" plugin configuration
" ----------------------------------------------------------------------------
" NERDTree
" --------
" map a keyboard shortcut to show and hide NERDTree
nnoremap <C-t> :NERDTreeToggle<CR>
" Exit Vim if NERDTree is the only window remaining in the only tab.
autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
" vim-lsp
" -------
" general vim-lsp settings
" ------------------------
" maps quite q few keyboad shortcuts
" this is taken staight off the github page with one added shortcut to peak at
" the definition of a function or class
function! s:on_lsp_buffer_enabled() abort
setlocal omnifunc=lsp#complete
setlocal signcolumn=yes
if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif
nmap <buffer> gd <plug>(lsp-definition)
nmap <buffer> gpd <plug>(lsp-peek-definition)
nmap <buffer> gs <plug>(lsp-document-symbol-search)
nmap <buffer> gS <plug>(lsp-workspace-symbol-search)
nmap <buffer> gr <plug>(lsp-references)
nmap <buffer> gi <plug>(lsp-implementation)
nmap <buffer> gt <plug>(lsp-type-definition)
nmap <buffer> <leader>rn <plug>(lsp-rename)
nmap <buffer> [g <plug>(lsp-previous-diagnostic)
nmap <buffer> ]g <plug>(lsp-next-diagnostic)
nmap <buffer> K <plug>(lsp-hover)
inoremap <buffer> <expr><c-f> lsp#scroll(+4)
inoremap <buffer> <expr><c-d> lsp#scroll(-4)
let g:lsp_format_sync_timeout = 2000
autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync')
endfunction
augroup lsp_install
au!
" call s:on_lsp_buffer_enabled only for languages that has the server registered.
autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
augroup END
" asyncomplete
" ------------
" make tab complete work
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
inoremap <expr> <cr> pumvisible() ? asyncomplete#close_popup() : "\<cr>"
" force refresh with CTRL-SPACE
imap <c-@> <Plug>(asyncomplete_force_refresh)
" asyncomplete-file
" -----------------
au User asyncomplete_setup call asyncomplete#register_source(asyncomplete#sources#file#get_source_options({
\ 'name': 'file',
\ 'allowlist': ['*'],
\ 'priority': 10,
\ 'completor': function('asyncomplete#sources#file#completor')
\ }))
" asyncomplete-omni
" -----------------
autocmd User asyncomplete_setup call asyncomplete#register_source(asyncomplete#sources#omni#get_source_options({
\ 'name': 'omni',
\ 'allowlist': ['*'],
\ 'blocklist': ['c', 'cpp', 'html'],
\ 'completor': function('asyncomplete#sources#omni#completor'),
\ 'config': {
\ 'show_source_kind': 1,
\ },
\ }))
" asyncomplete-look
" -----------------
au User asyncomplete_setup call asyncomplete#register_source({
\ 'name': 'look',
\ 'allowlist': ['text', 'markdown'],
\ 'completor': function('asyncomplete#sources#look#completor'),
\ })
" ----------------------------------------------------------------------------
" visual configuration
" ----------------------------------------------------------------------------
" set a colorscheme
colorscheme solarized
set background=dark
" do soft wrap of text but not in the middle of words
set wrap linebreak nolist
" don't do hard wraps in any files
set textwidth=0
" add a color column at the 80 char
set colorcolumn=80
" spelling highlight needs to be done after the colorscheme load
highlight SpellBad term=underline cterm=underline
" enable English spellchecking in markdown files
autocmd FileType markdown setlocal spell
autocmd FileType markdown setlocal spelllang=en