mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-01-26 11:14:08 +00:00
365 lines
10 KiB
VimL
365 lines
10 KiB
VimL
" This is my vimrc
|
|
" There are many like it but this will eventually be mine
|
|
"
|
|
" vim: ts=2 sw=2 expandtab
|
|
" vint: +ProhibitAbbreviationOption +ProhibitSetNoCompatible
|
|
"*****************************************************************************
|
|
"" Vim-Plug core
|
|
"*****************************************************************************
|
|
let vimplug_exists=expand('$HOME/.config/autoload/plug.vim')
|
|
if has('win32') && !has('win64')
|
|
let curl_exists=expand('C:\Windows\Sysnative\curl.exe')
|
|
else
|
|
let curl_exists=expand('curl')
|
|
endif
|
|
|
|
let g:vim_bootstrap_langs = "go,html,javascript,lua,php,python,typescript"
|
|
let g:vim_bootstrap_editor = "vim" " nvim or vim
|
|
let g:vim_bootstrap_theme = "iceberg"
|
|
let g:vim_bootstrap_frams = "vuejs"
|
|
|
|
if !filereadable(vimplug_exists)
|
|
if !executable(curl_exists)
|
|
echoerr "You have to install curl or first install vim-plug yourself!"
|
|
execute "q!"
|
|
endif
|
|
echo "Installing Vim-Plug..."
|
|
echo ""
|
|
silent exec "!"curl_exists" -fLo " . shellescape(vimplug_exists) . " --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim"
|
|
let g:not_finish_vimplug = "yes"
|
|
|
|
autocmd VimEnter * PlugInstall
|
|
endif
|
|
|
|
" {{{
|
|
call plug#begin(expand('$HOME/.config/vim/plugged'))
|
|
" vim-sensible
|
|
Plug 'tpope/vim-sensible'
|
|
" coc.nvim - Intellisense engine
|
|
Plug 'neoclide/coc.nvim', {'branch': 'release'}
|
|
" editorconfig-vim - EditorConfig plugin
|
|
Plug 'editorconfig/editorconfig-vim'
|
|
" nerdtree - File system explorer
|
|
Plug 'scrooloose/nerdtree'
|
|
Plug 'jistr/vim-nerdtree-tabs'
|
|
" vim-commentary - Commenting plugin
|
|
Plug 'tpope/vim-commentary'
|
|
" vim-fugitive - Git wrapper
|
|
Plug 'tpope/vim-fugitive'
|
|
" vim-gitgutter - Git diff in the gutter
|
|
Plug 'airblade/vim-gitgutter'
|
|
" grep.vim - Grep plugin
|
|
Plug 'vim-scripts/grep.vim'
|
|
" CSApprox - Approximate color scheme
|
|
Plug 'vim-scripts/CSApprox'
|
|
" tagbar - Tag list
|
|
Plug 'majutsushi/tagbar'
|
|
" ale - Asynchronous Lint Engine
|
|
Plug 'dense-analysis/ale'
|
|
" indentLine - Show indent lines
|
|
Plug 'Yggdroot/indentLine'
|
|
" vim-bootstrap-updater - Update vim-bootstrap
|
|
Plug 'editor-bootstrap/vim-bootstrap-updater'
|
|
" vim-rhubarb - Fugitive extension
|
|
Plug 'tpope/vim-rhubarb' " required by fugitive to :GBrowse
|
|
" ctrlp.vim - Fuzzy file finder
|
|
Plug 'ctrlpvim/ctrlp.vim'
|
|
|
|
" vim-airline
|
|
Plug 'vim-airline/vim-airline'
|
|
|
|
" iceberg.vim - Iceberg color scheme
|
|
Plug 'cocopon/iceberg.vim'
|
|
|
|
" fzf.vim - Fuzzy finder
|
|
if isdirectory('~/.config/vim/extra/fzf')
|
|
Plug '~/.config/vim/extra/fzf' | Plug 'junegunn/fzf.vim'
|
|
else
|
|
Plug 'junegunn/fzf', { 'dir': '~/.config/vim/extra/fzf', 'do': './install --bin' }
|
|
Plug 'junegunn/fzf.vim'
|
|
endif
|
|
|
|
let g:make = 'gmake'
|
|
if exists('make')
|
|
let g:make = 'make'
|
|
endif
|
|
|
|
" vim-wordy - Uncover usage problems in your writing
|
|
Plug 'preservim/vim-wordy'
|
|
|
|
" vimproc.vim - Asynchronous execution
|
|
Plug 'Shougo/vimproc.vim', {'do': g:make}
|
|
|
|
" Vim-Session
|
|
Plug 'xolox/vim-misc'
|
|
Plug 'xolox/vim-session'
|
|
|
|
" go
|
|
Plug 'fatih/vim-go', {'do': ':GoInstallBinaries'}
|
|
|
|
" html
|
|
Plug 'hail2u/vim-css3-syntax'
|
|
Plug 'gko/vim-coloresque'
|
|
Plug 'tpope/vim-haml'
|
|
Plug 'mattn/emmet-vim'
|
|
|
|
" javascript
|
|
Plug 'jelera/vim-javascript-syntax'
|
|
|
|
" lua
|
|
Plug 'xolox/vim-lua-ftplugin'
|
|
Plug 'xolox/vim-lua-inspect'
|
|
|
|
" php
|
|
Plug 'phpactor/phpactor', {'for': 'php', 'do': 'composer install --no-dev -o'}
|
|
Plug 'stephpy/vim-php-cs-fixer'
|
|
|
|
" python
|
|
Plug 'davidhalter/jedi-vim'
|
|
Plug 'raimon49/requirements.txt.vim', {'for': 'requirements'}
|
|
|
|
" typescript
|
|
Plug 'leafgarland/typescript-vim'
|
|
Plug 'HerringtonDarkholme/yats.vim'
|
|
|
|
" vimrc
|
|
Plug 'Vimjas/vint'
|
|
|
|
" vuejs
|
|
Plug 'posva/vim-vue'
|
|
Plug 'leafOfTree/vim-vue-plugin'
|
|
|
|
call plug#end()
|
|
" }}}
|
|
|
|
" COC
|
|
let g:coc_global_extensions = [
|
|
\ '@yaegassy/coc-intelephense',
|
|
\ '@yaegassy/coc-laravel',
|
|
\ '@yaegassy/coc-phpstan',
|
|
\ 'coc-blade',
|
|
\ 'coc-git',
|
|
\ 'coc-json',
|
|
\ 'coc-php-cs-fixer',
|
|
\ 'coc-phpls',
|
|
\ 'coc-prettier',
|
|
\ 'coc-sh',
|
|
\ 'coc-toml',
|
|
\ 'coc-tsserver',
|
|
\ 'coc-vimlsp',
|
|
\ 'coc-yaml',
|
|
\ 'coc-yank',
|
|
\ 'coc-marketplace'
|
|
\ ]
|
|
|
|
" session management
|
|
let g:session_directory = "~/.local/state/vim/session"
|
|
let g:session_autoload = "yes"
|
|
let g:session_autosave = "yes"
|
|
let g:session_command_aliases = 1
|
|
|
|
syntax on
|
|
|
|
" set statusline to show the file name
|
|
" set statusline=%F%m%r%h%w%=(%{&ff}/%Y)\ (line\ %l\/%L)|
|
|
|
|
" Search mappings: These will make it so that going to the next one in a
|
|
" search will center on the line it's found in.
|
|
nnoremap n nzzzv
|
|
nnoremap N Nzzzv
|
|
|
|
" if fugitive is installed, add the statusline
|
|
if exists("*fugitive#statusline")
|
|
set statusline+=%{fugitive#statusline()}
|
|
endif
|
|
|
|
" vim-airline
|
|
let g:airline#extensions#ale#enabled = 1
|
|
let g:airline#extensions#branch#enabled = 1
|
|
let g:airline#extensions#tabline#enabled = 1
|
|
let g:airline#extensions#tagbar#enabled = 1
|
|
let g:airline_powerline_fonts = 1
|
|
let g:airline_skip_empty_sections = 1
|
|
let g:airline_theme = 'iceberg'
|
|
|
|
" NERDTree configuration
|
|
let g:NERDTreeChDirMode=2
|
|
let g:NERDTreeIgnore=['node_modules', 'vendor', '\.rbc$', '\~$', '\.pyc$', '\.db$', '\.sqlite$', '__pycache__']
|
|
let g:NERDTreeSortOrder=['^__\.py$', '\/$', '*', '\.swp$', '\.bak$', '\~$']
|
|
let g:NERDTreeShowBookmarks=1
|
|
let g:nerdtree_tabs_focus_on_files=1
|
|
let g:NERDTreeMapOpenInTabSilent = '<RightMouse>'
|
|
let g:NERDTreeWinSize = 50
|
|
set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.pyc,*.db,*.sqlite,*node_modules/,*vendor/
|
|
nnoremap <silent> <F2> :NERDTreeFind<CR>
|
|
nnoremap <silent> <leader>t :NERDTreeToggle<CR>
|
|
|
|
" grep.vim configuration
|
|
nnoremap <silent> <leader>f :Rgrep<CR>
|
|
let Grep_Default_Options = '-IR'
|
|
let Grep_Skip_Files = '*.log *.db .DS_Store'
|
|
let Grep_Skip_Dirs = '.git node_modules vendor plugged'
|
|
|
|
" CoC (code suggestions, diagnostics and refactoring)
|
|
" find or update definitions
|
|
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)
|
|
nmap <silent> gn <Plug>(coc-rename)
|
|
" autoformat code based on linter
|
|
function! s:auto_format()
|
|
" eslint is no longer exposed as a proper linter to coc
|
|
if index(['js', 'jsx', 'javascript', 'javascriptreact', 'ts', 'typescript', 'typescriptcommon', 'typescriptreact'], &filetype) >= 0
|
|
silent! CocCommand eslint.executeAutofix
|
|
else
|
|
call CocActionAsync('format')
|
|
endif
|
|
endfunction
|
|
noremap <silent> <leader>f :call <SID>auto_format()<cr>
|
|
" jump to diagnostics or the documentation
|
|
nmap <silent> <C-k> <Plug>(coc-diagnostic-prev)
|
|
nmap <silent> <C-j> <Plug>(coc-diagnostic-next)
|
|
function! s:show_documentation()
|
|
if index(['vim','help'], &filetype) >= 0
|
|
execute 'h '.expand('<cword>')
|
|
else
|
|
call CocActionAsync('doHover')
|
|
endif
|
|
endfunction
|
|
noremap <silent> K :call <SID>show_documentation()<cr>
|
|
" scroll popup windows
|
|
function s:find_cursor_popup(...)
|
|
let radius = 50
|
|
let srow = screenrow()
|
|
let scol = screencol()
|
|
for r in range(srow - radius, srow + radius)
|
|
for c in range(scol - radius, scol + radius)
|
|
let winid = popup_locate(r, c)
|
|
if winid != 0
|
|
return winid
|
|
endif
|
|
endfor
|
|
endfor
|
|
return 0
|
|
endfunction
|
|
function s:scroll_cursor_popup(down)
|
|
let winid = <SID>find_cursor_popup()
|
|
if winid == 0
|
|
return 0
|
|
endif
|
|
let pp = popup_getpos(winid)
|
|
call popup_setoptions(winid, {'firstline': pp.firstline + a:down})
|
|
return 1
|
|
endfunction
|
|
imap <expr> <C-f> <SID>scroll_cursor_popup(1) ? '' : ''
|
|
imap <expr> <C-b> <SID>scroll_cursor_popup(-1) ? '' : ''
|
|
" expand snippets, completion or copilot with tab key based on selection
|
|
imap <silent> <S-Tab> <Nop>
|
|
let g:copilot_no_tab_map = v:true
|
|
inoremap <silent><expr> <Tab>
|
|
\ coc#pum#has_item_selected() ? coc#_select_confirm() :
|
|
\ exists('b:_copilot.suggestions') ? copilot#Accept("\<CR>") : ""
|
|
" automatically fix diagnostics and/or refactor
|
|
noremap <silent> <leader>d :CocList diagnostics<cr>
|
|
nmap <leader>c <Plug>(coc-codeaction)
|
|
xmap <leader>c <Plug>(coc-codeaction-selected)
|
|
|
|
let g:wordy#ring = [
|
|
\ 'weak',
|
|
\ ['being', 'passive-voice', ],
|
|
\ 'business-jargon',
|
|
\ 'weasel',
|
|
\ 'puffery',
|
|
\ ['problematic', 'redundant', ],
|
|
\ ['colloquial', 'idiomatic', 'similies', ],
|
|
\ 'art-jargon',
|
|
\ ['contractions', 'opinion', 'vague-time', 'said-synonyms', ],
|
|
\ 'adjectives',
|
|
\ 'adverbs',
|
|
\ ]
|
|
|
|
"*****************************************************************************
|
|
"" Commands
|
|
"*****************************************************************************
|
|
|
|
" remove trailing whitespaces
|
|
command! FixWhitespace :%s/\s\+$//e
|
|
|
|
"*****************************************************************************
|
|
"" Functions
|
|
"*****************************************************************************
|
|
|
|
" setup wrapping function
|
|
if !exists('*s:setupWrapping')
|
|
function s:setupWrapping()
|
|
set wrap
|
|
set wm=2
|
|
set textwidth=79
|
|
endfunction
|
|
endif
|
|
|
|
"*****************************************************************************
|
|
"" Custom configs
|
|
"*****************************************************************************
|
|
|
|
" ale
|
|
let g:ale_linters = {
|
|
\ "vim": [ "vint" ]
|
|
\}
|
|
let g:ale_fixers = {
|
|
\}
|
|
|
|
" javascript
|
|
let g:javascript_enable_domhtmlcss = 1
|
|
|
|
" vim-javascript
|
|
augroup vimrc-javascript
|
|
autocmd!
|
|
autocmd FileType javascript setl tabstop=4|setl shiftwidth=4|setl expandtab softtabstop=4
|
|
augroup END
|
|
|
|
" python
|
|
" vim-python
|
|
augroup vimrc-python
|
|
autocmd!
|
|
autocmd FileType python setlocal expandtab shiftwidth=4 tabstop=8 colorcolumn=79 formatoptions+=croq softtabstop=4 cinwords=if,elif,else,for,while,try,except,finally,def,class,with
|
|
augroup END
|
|
|
|
"" jedi-vim for python
|
|
let g:jedi#popup_on_dot = 0
|
|
let g:jedi#goto_assignments_command = "<leader>g"
|
|
let g:jedi#goto_definitions_command = "<leader>d"
|
|
let g:jedi#documentation_command = "K"
|
|
let g:jedi#usages_command = "<leader>n"
|
|
let g:jedi#rename_command = "<leader>r"
|
|
let g:jedi#show_call_signatures = "0"
|
|
let g:jedi#completions_command = "<C-Space>"
|
|
let g:jedi#smart_auto_mappings = 0
|
|
|
|
" ale
|
|
:call extend(g:ale_linters, {
|
|
\ 'python': [ 'flake8' ],
|
|
\ })
|
|
:call extend(g:ale_fixers, {
|
|
\ '*': ['remove_trailing_lines', 'trim_whitespace']
|
|
\ })
|
|
let g:ale_sign_column_always = 1
|
|
let g:ale_fix_on_save = 1
|
|
|
|
" editorconfig
|
|
let g:EditorConfig_exclude_patterns = ['fugitive://.*']
|
|
au FileType gitcommit let b:EditorConfig_disable = 1
|
|
|
|
" Syntax highlight
|
|
let python_highlight_all = 1
|
|
|
|
" typescript
|
|
let g:yats_host_keyword = 1
|
|
|
|
" vuejs
|
|
" vim vue
|
|
let g:vue_disable_pre_processors=1
|
|
" vim vue plugin
|
|
let g:vim_vue_plugin_load_full_syntax = 1
|