225 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			225 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
" ----------------------------------------------------------------------------
 | 
						|
" 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
 |