2018-07-21 17:30:18 +02:00
set nocompatible " be iMproved, required
2018-12-05 08:21:18 +01:00
filetype on " required
2018-07-21 17:30:18 +02:00
2020-06-28 22:44:03 +02:00
call plug #begin ( '~/.vim/plugged' )
Plug 'scrooloose/syntastic'
Plug 'rust-lang/rust.vim'
Plug 'fatih/vim-go'
2020-11-30 11:38:53 +01:00
Plug 'kageru/kotlin-vim'
2020-06-28 22:44:03 +02:00
Plug 'phanviet/vim-monokai-pro'
Plug 'cespare/vim-toml'
Plug 'sirver/UltiSnips'
Plug 'honza/vim-snippets'
Plug 'lotabout/skim' , { 'dir' : '~/.skim' , 'do' : './install' }
Plug 'lotabout/skim.vim'
2021-12-10 11:06:26 +01:00
" Plug 'powerline/powerline'
Plug 'vim-airline/vim-airline'
2020-11-30 11:38:53 +01:00
Plug 'elmcast/elm-vim'
Plug 'tpope/vim-fugitive'
Plug 'mileszs/ack.vim'
2021-12-10 11:06:26 +01:00
2020-11-30 11:38:53 +01:00
Plug 'neoclide/coc.nvim' , {'branch' : 'release' }
2020-06-28 22:44:03 +02:00
"Plug 'zxqfl/tabnine-vim'
2019-04-08 16:03:09 +02:00
2020-06-28 22:44:03 +02:00
call plug #end ( )
2018-12-26 15:39:12 +01:00
"set rtp+=~/code/tabnine-vim
filetype plugin on
2019-02-12 19:32:49 +01:00
autocmd BufNewFile , BufRead *.vpy setfiletype python
2020-11-30 11:38:53 +01:00
autocmd BufNewFile , BufRead *.kt setfiletype kotlin
2018-07-21 17:30:18 +02:00
2019-08-03 07:46:42 +02:00
" for ncm2 completion
2020-11-30 11:38:53 +01:00
"autocmd BufEnter * call ncm2#enable_for_buffer()
"set completeopt=noinsert,menuone,noselect
2020-06-28 22:44:03 +02:00
" When the <Enter> key is pressed while the popup menu is visible, it only
" hides the menu. Use this mapping to close the menu and also start a new line.
2020-11-30 11:38:53 +01:00
"inoremap <expr> <CR> (pumvisible() ? "\<c-y>\<cr>" : "\<CR>")
" Use <TAB> to select the popup menu:
"imap <Tab> <C-n>
"inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
"inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
2019-08-03 07:46:42 +02:00
" Required for operations modifying multiple buffers like rename.
set hidden
2020-06-02 11:04:40 +02:00
"\ 'rust': ['rustup', 'run', 'stable', 'rls'],
2020-06-28 22:44:03 +02:00
"\ 'rust': ['rustup', 'run', 'nightly', 'rls'],
2021-08-04 13:38:28 +02:00
"\ 'c': ['/usr/bin/ccls'],
2019-08-03 07:46:42 +02:00
let g :LanguageClient_serverCommands = {
2020-06-28 22:44:03 +02:00
\ 'rust' : ['rust-analyzer' ],
2019-12-10 18:50:44 +01:00
\ 'haskell' : ['hie-wrapper' ],
\ 'python' : ['/usr/bin/pyls' ],
\ 'kotlin' : ['/usr/bin/kotlin-language-server' ],
2019-08-03 07:46:42 +02:00
\ }
2021-04-15 18:13:10 +02:00
nnoremap < F5 > :call LanguageClient_contextMenu ( ) < CR >
2019-08-03 07:46:42 +02:00
" Or map each action separately
2021-04-15 18:13:10 +02:00
nnoremap < silent > K :call LanguageClient #textDocument_hover ( ) < CR >
2020-11-30 11:38:53 +01:00
"nnoremap <silent> gd :call LanguageClient#textDocument_definition()<CR>
2021-04-15 18:13:10 +02:00
nnoremap < silent > < F6 > :call LanguageClient #textDocument_rename ( ) < CR >
2021-08-04 13:38:28 +02:00
" rename without language server
nnoremap gr gd [{V %::s /<C-R>/ // gc < left > < left > < left >
2018-07-21 17:30:18 +02:00
2018-02-07 13:19:36 +01:00
set number
set showmatch
set hlsearch
set ignorecase
set smartcase
set incsearch
set autoindent
set cindent
set expandtab
2020-11-30 11:38:53 +01:00
set shiftwidth = 2
2018-02-07 13:19:36 +01:00
set smartindent
set smarttab
2020-11-30 11:38:53 +01:00
set softtabstop = 2
2018-12-05 08:21:18 +01:00
set relativenumber
2018-02-07 13:19:36 +01:00
" set beam cursor in insert mode
let &t_SI = "\<esc>[5 q"
let &t_SR = "\<esc>[5 q"
let &t_EI = "\<esc>[2 q"
set undolevels = 1000
set backspace = indent , eol , start
2018-07-21 17:30:18 +02:00
set background = dark
2019-04-08 16:03:09 +02:00
let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
2019-08-03 07:46:42 +02:00
let g :autofmt_autosave = 1
2019-04-08 16:03:09 +02:00
set termguicolors
2020-06-02 11:04:40 +02:00
colorscheme monokai_pro
2018-02-07 13:19:36 +01:00
syntax on
2019-12-10 18:50:44 +01:00
let g :netrw_liststyle = 3
let g :netrw_banner = 0
let g :netrw_browse_split = 4
2020-06-02 11:04:40 +02:00
let g :netrw_winsize = 15
2019-12-10 18:50:44 +01:00
nmap < F2 > :Vexplore < Return >
2020-11-30 11:38:53 +01:00
autocmd BufNewFile , BufRead *.rs nmap < C - A - L > :RustFmt < Return >
autocmd BufNewFile , BufRead *.elm nmap < C - A - L > :ElmFormat < Return >
2019-12-10 18:50:44 +01:00
2018-02-07 13:19:36 +01:00
set statusline + = %#warningmsg #
set statusline + = %{SyntasticStatuslineFlag ( ) }
set statusline + = %*
2020-11-30 11:38:53 +01:00
let g :syntastic_always_populate_loc_list = 1
2018-02-07 13:19:36 +01:00
let g :syntastic_auto_loc_list = 1
2019-04-08 16:03:09 +02:00
let g :syntastic_check_on_open = 0
2018-02-07 13:19:36 +01:00
let g :syntastic_check_on_wq = 0
2019-04-08 16:03:09 +02:00
let g :syntastic_check_on_write = 0
let g :syntastic_mode_map = { 'mode' : 'passive' }
2019-12-10 18:50:44 +01:00
nmap < F3 > :SyntasticCheck < CR >
2020-11-30 11:38:53 +01:00
let g :elm_syntastic_show_warnings = 1
let g :ycm_semantic_triggers = {
\ 'elm' : ['.' ],
\}
let g :LanguageClient_rootMarkers = {
\ 'elm' : ['elm.json' ],
\ }
2019-12-10 18:50:44 +01:00
nnoremap < C - J > < C - W > j
nnoremap < C - K > < C - W > k
"nnoremap <C-L> <C-W>l
nnoremap < C - H > < C - W > h
set splitbelow
set splitright
2020-06-28 22:44:03 +02:00
nmap < S - Tab > :Snippets < CR >
nmap < C - G > :Files < CR >
imap < C - G > < Esc > :Files < CR >
nmap < S - L > :BLines < CR >
nmap < C - F > :Lines < CR >
2020-11-30 11:38:53 +01:00
nmap < C - B > :Buffers < CR >
imap < C - B > < Esc > :Buffers < CR >
2021-12-10 11:06:26 +01:00
" let g:powerline_pycmd="py3"
2020-11-30 11:38:53 +01:00
let g :ackprg = 'rg --vimgrep --smart-case'
let g :ack_autoclose = 1
let g :ack_use_cword_for_empty_search = 1
nnoremap < Leader > / :Ack ! < Space >
" COC stuff from here
" Some servers have issues with backup files, see #649.
set nobackup
set nowritebackup
" Give more space for displaying messages.
"set cmdheight=2
" Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable
" delays and poor user experience.
set updatetime = 300
" Don't pass messages to |ins-completion-menu|.
set shortmess + = c
if has ( "patch-8.1.1564" )
" Recently vim can merge signcolumn and number column into one
set signcolumn = number
else
set signcolumn = yes
endif
" Use tab for trigger completion with characters ahead and navigate.
" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
" other plugin before putting this into your config.
inoremap < silent > < expr > < TAB >
\ pumvisible ( ) ? "\<C-n>" :
\ < SID > check_back_space ( ) ? "\<TAB>" :
\ coc #refresh ( )
inoremap < expr > < S - TAB > pumvisible ( ) ? "\<C-p>" : "\<C-h>"
function ! s :check_back_space ( ) abort
let col = col ( '.' ) - 1
return ! col | | getline ( '.' ) [col - 1 ] = ~ # '\s'
endfunction
" Use <c-space> to trigger completion.
if has ( 'nvim' )
inoremap < silent > < expr > < A - space > coc #refresh ( )
else
inoremap < silent > < expr > < c - @> coc #refresh ( )
endif
" Use <cr> to confirm completion, `<C-g>u` means break undo chain at current
" position. Coc only does snippet and additional edit on confirm.
" <cr> could be remapped by other vim plugin, try `:verbose imap <CR>`.
if exists ( '*complete_info' )
inoremap < expr > < cr > complete_info ( ) ["selected" ] ! = "-1" ? "\<C-y>" : "\<C-g>u\<CR>"
else
inoremap < expr > < cr > pumvisible ( ) ? "\<C-y>" : "\<C-g>u\<CR>"
endif
" Use `[g` and `]g` to navigate diagnostics
" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
nmap < silent > [g < Plug > ( coc - diagnostic - prev )
nmap < silent > ]g < Plug > ( coc - diagnostic - next )
" GoTo code navigation.
nmap < silent > gd < Plug > ( coc - definition )
nmap < silent > gy < Plug > ( coc - type - definition )
nmap < silent > gi < Plug > ( coc - implementation )
nmap < silent > gr < Plug > ( coc - references )
" Use K to show documentation in preview window.
nnoremap < silent > K :call < SID > show_documentation ( ) < CR >
function ! s :show_documentation ( )
if ( index ( ['vim' , 'help' ], &filetype ) > = 0 )
execute 'h ' .expand ( '<cword>' )
else
call CocAction ( 'doHover' )
endif
endfunction
" Highlight the symbol and its references when holding the cursor.
autocmd CursorHold * silent call CocActionAsync ( 'highlight' )
" Symbol renaming.
nmap < leader > rn < Plug > ( coc - rename )
nmap F6 < Plug > ( coc - rename )
" Formatting selected code.
xmap < leader > f < Plug > ( coc - format - selected )
nmap < leader > f < Plug > ( coc - format - selected )
augroup mygroup
autocmd !
" Setup formatexpr specified filetype(s).
autocmd FileType typescript , json setl formatexpr = CocAction ( 'formatSelected' )
" Update signature help on jump placeholder.
autocmd User CocJumpPlaceholder call CocActionAsync ( 'showSignatureHelp' )
augroup end
" Applying codeAction to the selected region.
" Example: `<leader>aap` for current paragraph
xmap < leader > a < Plug > ( coc - codeaction - selected )
nmap < leader > a < Plug > ( coc - codeaction - selected )
" Remap keys for applying codeAction to the current buffer.
nmap < leader > ac < Plug > ( coc - codeaction )
" Apply AutoFix to problem on the current line.
nmap < leader > qf < Plug > ( coc - fix - current )
" Map function and class text objects
" NOTE: Requires 'textDocument.documentSymbol' support from the language server.
xmap if < Plug > ( coc - funcobj - i )
omap if < Plug > ( coc - funcobj - i )
xmap af < Plug > ( coc - funcobj - a )
omap af < Plug > ( coc - funcobj - a )
xmap ic < Plug > ( coc - classobj - i )
omap ic < Plug > ( coc - classobj - i )
xmap ac < Plug > ( coc - classobj - a )
omap ac < Plug > ( coc - classobj - a )
" Use CTRL-S for selections ranges.
" Requires 'textDocument/selectionRange' support of language server.
nmap < silent > < C - s > < Plug > ( coc - range - select )
xmap < silent > < C - s > < Plug > ( coc - range - select )
" Add `:Format` command to format current buffer.
command ! - nargs = 0 Format :call CocAction ( 'format' )
" Add `:Fold` command to fold current buffer.
command ! - nargs = ? Fold :call CocAction ( 'fold' , < f - args > )
" Add `:OR` command for organize imports of the current buffer.
command ! - nargs = 0 OR :call CocAction ( 'runCommand' , 'editor.action.organizeImport' )
" Add (Neo)Vim's native statusline support.
" NOTE: Please see `:h coc-status` for integrations with external plugins that
" provide custom statusline: lightline.vim, vim-airline.
set statusline ^= %{coc #status ( ) }%{get ( b :, 'coc_current_function' , '' ) }
" Mappings for CoCList
" Show all diagnostics.
nnoremap < silent > < nowait > < space > a :< C - u > CocList diagnostics < cr >
" Manage extensions.
nnoremap < silent > < nowait > < space > e :< C - u > CocList extensions < cr >
" Show commands.
nnoremap < silent > < nowait > < space > c :< C - u > CocList commands < cr >
" Find symbol of current document.
nnoremap < silent > < nowait > < space > o :< C - u > CocList outline < cr >
" Search workspace symbols.
nnoremap < silent > < nowait > < space > s :< C - u > CocList - I symbols < cr >
" Do default action for next item.
nnoremap < silent > < nowait > < space > j :< C - u > CocNext < CR >
" Do default action for previous item.
nnoremap < silent > < nowait > < space > k :< C - u > CocPrev < CR >
" Resume latest coc list.
nnoremap < silent > < nowait > < space > p :< C - u > CocListResume < CR >