|
|
@ -1,157 +1,233 @@ |
|
|
|
if empty(glob('~/.config/nvim/autoload/plug.vim')) |
|
|
|
silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs |
|
|
|
\ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |
|
|
|
autocmd VimEnter * PlugInstall |
|
|
|
endif |
|
|
|
|
|
|
|
"------------------------------------------------ |
|
|
|
" Plugins START |
|
|
|
call plug#begin() |
|
|
|
" Plugins |
|
|
|
Plug 'miyakogi/seiya.vim' |
|
|
|
Plug 'ctrlpvim/ctrlp.vim' |
|
|
|
Plug 'FelikZ/ctrlp-py-matcher' |
|
|
|
Plug 'jeetsukumaran/vim-filebeagle' |
|
|
|
Plug 'bling/vim-airline' |
|
|
|
Plug 'vim-airline/vim-airline-themes' |
|
|
|
Plug 'scrooloose/nerdtree' |
|
|
|
Plug 'christoomey/vim-tmux-navigator' |
|
|
|
Plug 'editorconfig/editorconfig-vim' |
|
|
|
Plug 'mhinz/vim-grepper' |
|
|
|
Plug 'tomtom/tcomment_vim' |
|
|
|
Plug 'ap/vim-css-color' |
|
|
|
Plug 'autozimu/LanguageClient-neovim', { 'do': ':UpdateRemotePlugins' } |
|
|
|
Plug 'neomake/neomake' |
|
|
|
Plug 'ludovicchabant/vim-gutentags' |
|
|
|
" Colorschemes |
|
|
|
Plug 'whatyouhide/vim-gotham' |
|
|
|
Plug 'flazz/vim-colorschemes' |
|
|
|
|
|
|
|
"HTML & CSS |
|
|
|
Plug 'hail2u/vim-css3-syntax' |
|
|
|
Plug 'othree/html5.vim' |
|
|
|
Plug 'Valloric/MatchTagAlways' |
|
|
|
Plug 'digitaltoad/vim-jade' |
|
|
|
|
|
|
|
"Javascript |
|
|
|
|
|
|
|
"PHP |
|
|
|
Plug 'StanAngeloff/php.vim', {'for': 'php'} |
|
|
|
Plug 'lumiliet/vim-twig' |
|
|
|
Plug 'roxma/LanguageServer-php-neovim', {'do': 'composer install && composer run-script parse-stubs', 'for': 'php'} |
|
|
|
Plug 'SirVer/ultisnips' | Plug 'phux/vim-snippets' |
|
|
|
"Git plugin |
|
|
|
Plug 'tpope/vim-fugitive' |
|
|
|
|
|
|
|
" Lua |
|
|
|
Plug 'xolox/vim-misc' |
|
|
|
Plug 'xolox/vim-lua-ftplugin' |
|
|
|
|
|
|
|
"Vue |
|
|
|
Plug 'posva/vim-vue' |
|
|
|
|
|
|
|
Plug 'sbdchd/neoformat' |
|
|
|
Plug 'wakatime/vim-wakatime' |
|
|
|
" Donnie says this is important |
|
|
|
function! DoRemote(arg) |
|
|
|
UpdateRemotePlugins |
|
|
|
endfunction |
|
|
|
|
|
|
|
Plug 'airblade/vim-gitgutter' |
|
|
|
Plug 'cespare/vim-toml' |
|
|
|
Plug 'editorconfig/editorconfig-vim' |
|
|
|
Plug 'itchyny/lightline.vim' |
|
|
|
Plug 'junegunn/vim-easy-align' |
|
|
|
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } |
|
|
|
Plug 'junegunn/fzf.vim' |
|
|
|
Plug 'mengelbrecht/lightline-bufferline' |
|
|
|
Plug 'lifepillar/vim-gruvbox8' |
|
|
|
Plug 'neoclide/coc.nvim', {'branch': 'release'} |
|
|
|
Plug 'tpope/vim-commentary' |
|
|
|
call plug#end() |
|
|
|
|
|
|
|
let g:airline#extensions#tabline#enabled = 1 |
|
|
|
let g:airline#extensions#neomake#enabled = 0 |
|
|
|
|
|
|
|
|
|
|
|
syntax on |
|
|
|
colorscheme gotham |
|
|
|
set tabstop=2 |
|
|
|
set expandtab |
|
|
|
set shiftwidth=2 |
|
|
|
set smartcase |
|
|
|
set hlsearch |
|
|
|
set number |
|
|
|
set autoindent |
|
|
|
set incsearch |
|
|
|
set clipboard+=unnamedplus |
|
|
|
" Plugins END |
|
|
|
"------------------------------------------------ |
|
|
|
|
|
|
|
"------------------------------------------------ |
|
|
|
" Settings START |
|
|
|
let mapleader = "\<Space>" |
|
|
|
filetype plugin on |
|
|
|
set completeopt=menuone |
|
|
|
set mouse=a |
|
|
|
set nobackup |
|
|
|
set nocompatible |
|
|
|
set noswapfile |
|
|
|
set t_Co=256 |
|
|
|
set hidden |
|
|
|
set relativenumber |
|
|
|
set list listchars=tab:»·,trail:·,nbsp:· |
|
|
|
set nowritebackup |
|
|
|
set number |
|
|
|
set signcolumn=yes |
|
|
|
set title |
|
|
|
set wrap |
|
|
|
setlocal wrap |
|
|
|
" Settings END |
|
|
|
"------------------------------------------------ |
|
|
|
|
|
|
|
"------------------------------------------------ |
|
|
|
" persist START |
|
|
|
set undofile " Maintain undo history between sessions |
|
|
|
set undodir=~/.vim/undodir |
|
|
|
|
|
|
|
" Persist cursor |
|
|
|
autocmd BufReadPost * |
|
|
|
\ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit' |
|
|
|
\ | exe "normal! g`\"" |
|
|
|
\ | endif |
|
|
|
" persist END |
|
|
|
"------------------------------------------------ |
|
|
|
|
|
|
|
"------------------------------------------------ |
|
|
|
" Theme START |
|
|
|
syntax on |
|
|
|
set termguicolors |
|
|
|
set tags=.tags,./tags,tags; |
|
|
|
|
|
|
|
let g:airline_theme="gotham" |
|
|
|
|
|
|
|
"Option + Left and Right switch buffers |
|
|
|
"execute "set <M-Right>=\e\eC" |
|
|
|
"execute "set <M-Left>=\e\eD" |
|
|
|
nnoremap <silent> <C-Right> :bnext<CR> |
|
|
|
nnoremap <silent> <C-Left> :bprevious<CR> |
|
|
|
nnoremap <silent> <C-Del> :bd<CR> |
|
|
|
|
|
|
|
"Syntastic default settings |
|
|
|
set statusline+=%#warningmsg# |
|
|
|
set statusline+=%{SyntasticStatuslineFlag()} |
|
|
|
set statusline+=%* |
|
|
|
|
|
|
|
" let g:deoplete#sources#padawan#add_parentheses = 1 |
|
|
|
" needed for echodoc to work if add_parentheses is 1 |
|
|
|
|
|
|
|
" let g:deoplete#sources = get(g:,'deoplete#sources',{}) |
|
|
|
" let g:deoplete#sources.php = ['padawan', 'ultisnips', 'tags', 'buffer', 'LanguageClient'] |
|
|
|
|
|
|
|
|
|
|
|
function! GutentagsFilter(path) abort |
|
|
|
if fnamemodify(a:path, ':e') == 'java' |
|
|
|
return 0 |
|
|
|
elseif fnamemodify(a:path, ':e') == '' |
|
|
|
return 0 |
|
|
|
elseif fnamemodify(a:path, ':e') == 'xml' |
|
|
|
return 0 |
|
|
|
elseif fnamemodify(a:path, ':e') == 'gradle' |
|
|
|
return 0 |
|
|
|
else |
|
|
|
return 1 |
|
|
|
endif |
|
|
|
colorscheme gruvbox8 |
|
|
|
set background=dark |
|
|
|
set cursorline |
|
|
|
set hidden |
|
|
|
set cmdheight=1 |
|
|
|
set laststatus=2 |
|
|
|
|
|
|
|
let g:gruvbox_transp_bg = 1 |
|
|
|
let g:gruvbox_italicize_strings = 0 |
|
|
|
|
|
|
|
set list |
|
|
|
set listchars=tab:»·,trail:· |
|
|
|
|
|
|
|
" let buffers be clickable |
|
|
|
let g:lightline#bufferline#clickable=1 |
|
|
|
let g:lightline#bufferline#shorten_path=1 |
|
|
|
let g:lightline#bufferline#min_buffer_count=1 |
|
|
|
|
|
|
|
let g:lightline = { |
|
|
|
\ 'colorscheme': 'jellybeans', |
|
|
|
\ 'active': { |
|
|
|
\ 'left': [ [], [], [ 'relativepath' ] ], |
|
|
|
\ 'right': [ [], [], [ 'lineinfo', 'percent' ] ] |
|
|
|
\ }, |
|
|
|
\ 'inactive': { |
|
|
|
\ 'left': [ [], [], [ 'relativepath' ] ], |
|
|
|
\ 'right': [ [], [], [ 'lineinfo', 'percent' ] ] |
|
|
|
\ }, |
|
|
|
\ 'subseparator': { |
|
|
|
\ 'left': '', 'right': '' |
|
|
|
\ }, |
|
|
|
\ 'tabline': { |
|
|
|
\ 'left': [ ['buffers'] ], |
|
|
|
\ 'right': [ [] ] |
|
|
|
\ }, |
|
|
|
\ 'tabline_separator': { |
|
|
|
\ 'left': "", 'right': "" |
|
|
|
\ }, |
|
|
|
\ 'tabline_subseparator': { |
|
|
|
\ 'left': "", 'right': "" |
|
|
|
\ }, |
|
|
|
\ 'component_expand': { |
|
|
|
\ 'buffers': 'lightline#bufferline#buffers' |
|
|
|
\ }, |
|
|
|
\ 'component_raw': { |
|
|
|
\ 'buffers': 1 |
|
|
|
\ }, |
|
|
|
\ 'component_type': { |
|
|
|
\ 'buffers': 'tabsel' |
|
|
|
\ } |
|
|
|
\} |
|
|
|
|
|
|
|
" Theme END |
|
|
|
"------------------------------------------------ |
|
|
|
|
|
|
|
"------------------------------------------------ |
|
|
|
" Remaps START |
|
|
|
" Align GitHub-flavored Markdown tables |
|
|
|
au FileType markdown vmap <Leader><Bslash> :EasyAlign*<Bar><Enter> |
|
|
|
|
|
|
|
" Toggle between buffers |
|
|
|
nmap <Leader>bn :bn<CR> |
|
|
|
nmap <Leader>bp :bp<CR> |
|
|
|
nnoremap <C-p> :Rg<Cr> |
|
|
|
nnoremap <C-e> :Files<Cr> |
|
|
|
nmap <Leader>bl :Buffers<CR> |
|
|
|
nmap <Leader>g :GFiles<CR> |
|
|
|
nmap <Leader>e :Files<CR> |
|
|
|
nmap <Leader>p :Rg<CR> |
|
|
|
nmap <Leader>g? :GFiles?<CR> |
|
|
|
nmap <Leader>h :History<CR> |
|
|
|
" Remaps END |
|
|
|
"------------------------------------------------ |
|
|
|
|
|
|
|
"------------------------------------------------ |
|
|
|
" Coc START |
|
|
|
" 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 |
|
|
|
|
|
|
|
" 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 |
|
|
|
|
|
|
|
let g:gutentags_enabled_user_func = 'GutentagsFilter' |
|
|
|
let g:gutentags_ctags_tagfile = '.tags' |
|
|
|
let g:gutentags_ctags_executable_php = 'ctags --langmap=php:.engine.inc.module.theme.install.php --php-kinds=cdfi --fields=+l' |
|
|
|
|
|
|
|
|
|
|
|
" only start lsp when opening php files |
|
|
|
au filetype php LanguageClientStart |
|
|
|
|
|
|
|
" use LSP completion on ctrl-x ctrl-o as fallback for padawan in legacy projects |
|
|
|
au filetype php set omnifunc=LanguageClient#complete |
|
|
|
|
|
|
|
" no need for diagnostics, we're going to use neomake for that |
|
|
|
let g:LanguageClient_diagnosticsEnable = 0 |
|
|
|
let g:LanguageClient_signColumnAlwaysOn = 0 |
|
|
|
|
|
|
|
" I only use these 3 mappings |
|
|
|
nnoremap <silent> gd :call LanguageClient_textDocument_definition()<CR> |
|
|
|
nnoremap <silent> gr :call LanguageClient_textDocument_references()<CR> |
|
|
|
nnoremap K :call LanguageClient_textDocument_hover()<cr> |
|
|
|
|
|
|
|
" cycle through menu items with tab/shift+tab |
|
|
|
inoremap <expr> <TAB> pumvisible() ? "\<c-n>" : "\<TAB>" |
|
|
|
inoremap <expr> <s-tab> pumvisible() ? "\<c-p>" : "\<TAB>" |
|
|
|
|
|
|
|
autocmd BufWritePost * Neomake |
|
|
|
let g:neomake_error_sign = {'text': '✖', 'texthl': 'NeomakeErrorSign'} |
|
|
|
let g:neomake_warning_sign = {'text': '∆', 'texthl': 'NeomakeWarningSign'} |
|
|
|
let g:neomake_message_sign = {'text': '➤', 'texthl': 'NeomakeMessageSign'} |
|
|
|
let g:neomake_info_sign = {'text': 'ℹ', 'texthl': 'NeomakeInfoSign'} |
|
|
|
|
|
|
|
let g:UltiSnipsExpandTrigger="<c-j>" |
|
|
|
let g:UltiSnipsJumpForwardTrigger="<c-j>" |
|
|
|
let g:UltiSnipsJumpBackwardTrigger="<c-b>" |
|
|
|
" Use <c-space> to trigger completion. |
|
|
|
if has('nvim') |
|
|
|
inoremap <silent><expr> <c-space> coc#refresh() |
|
|
|
else |
|
|
|
inoremap <silent><expr> <c-@> coc#refresh() |
|
|
|
endif |
|
|
|
|
|
|
|
" PHP7 |
|
|
|
let g:ultisnips_php_scalar_types = 1 |
|
|
|
" 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 |
|
|
|
|
|
|
|
let g:seiya_auto_enable=1 |
|
|
|
" 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 CocActionAsync('doHover') |
|
|
|
endif |
|
|
|
endfunction |
|
|
|
|
|
|
|
let g:seiya_target_groups = has('nvim') ? ['guibg'] : ['ctermbg'] |
|
|
|
" Highlight the symbol and its references when holding the cursor. |
|
|
|
autocmd CursorHold * silent call CocActionAsync('highlight') |
|
|
|
|
|
|
|
" Symbol renaming. |
|
|
|
nmap <leader>rn <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 |
|
|
|
|
|
|
|
" Remap keys for applying codeAction to the current buffer. |
|
|
|
nmap <leader>ga <Plug>(coc-codeaction) |
|
|
|
" Apply AutoFix to problem on the current line. |
|
|
|
nmap <leader>qf <Plug>(coc-fix-current) |
|
|
|
|
|
|
|
" 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') |
|
|
|
|
|
|
|
" Mappings for CoCList |
|
|
|
" Show all diagnostics. |
|
|
|
nnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<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> |