461 lines
22 KiB
VimL
461 lines
22 KiB
VimL
|
""" VIM config file | Jan Andrle | 2024-02-07 (VIM >=8.1)
|
|||
|
"" #region B – Base
|
|||
|
scriptencoding utf-8 | set encoding=utf-8
|
|||
|
let $BASH_ENV = "~/.bashrc"
|
|||
|
set runtimepath^=~/.vim/bundle/*
|
|||
|
packadd! matchit
|
|||
|
set hidden
|
|||
|
|
|||
|
set title
|
|||
|
colorscheme codedark
|
|||
|
set updatetime=300 lazyredraw ttyfast " Having longer updatetime (default is 4s) leads to noticeable delays and poor user experience. Also reduce redraw frequency and fast terminal typing
|
|||
|
set noerrorbells novisualbell
|
|||
|
set belloff=esc
|
|||
|
set confirm
|
|||
|
set guioptions-=T
|
|||
|
|
|||
|
cabbrev <expr> %PWD% execute('pwd')
|
|||
|
cabbrev <expr> %CD% fnameescape(expand('%:p:h'))
|
|||
|
cabbrev <expr> %CS% mini_enhancement#selectedText()
|
|||
|
cabbrev <expr> %CW% expand('<cword>')
|
|||
|
|
|||
|
let mapleader = "\\"
|
|||
|
" better for my keyboard, but maybe use `:help keymap`?
|
|||
|
nnoremap § @
|
|||
|
nnoremap §§ @@
|
|||
|
nnoremap ů ;
|
|||
|
nnoremap ; :
|
|||
|
nnoremap <leader>u U
|
|||
|
nnoremap U <c-r>
|
|||
|
nnoremap ž <c-]>
|
|||
|
nnoremap <c-up> <c-y>
|
|||
|
nnoremap <c-down> <c-e>
|
|||
|
" <c-bs>
|
|||
|
imap <c-w>
|
|||
|
cmap <c-w>
|
|||
|
|
|||
|
if has("patch-8.1.0360")
|
|||
|
set diffopt+=algorithm:patience,indent-heuristic | endif
|
|||
|
set diffopt+=iwhite
|
|||
|
augroup vimrc_help
|
|||
|
autocmd!
|
|||
|
autocmd BufEnter *.txt if &buftype == 'help' | wincmd L | vertical resize 90 | endif
|
|||
|
augroup END
|
|||
|
|
|||
|
""" #region BB – Build-in plugins
|
|||
|
" https://github.com/rbtnn/vim-gloaded/blob/master/plugin/gloaded.vim
|
|||
|
let g:loaded_vimballPlugin = 1 " :h pi_vimball … for plugin creators
|
|||
|
let g:vifm_replace_netrw= 1 | let g:loaded_netrw= 1 | let g:loaded_netrwPlugin= 1 " this line needs to be commented to let vim dowmload spelllangs!!! … see http://jdem.cz/fgyw25
|
|||
|
""" #endregion BB
|
|||
|
"" #endregion B
|
|||
|
"" #region H – Helpers + remap 'sS' (primary ss, see `vim-scommands`)
|
|||
|
nmap sh :execute 'ALTredir :map s \<bar> map '.mapleader.' \<bar> map § \<bar> map ů \<bar> map ; \<bar> map U \<bar> map ž'<cr>:g/^$/d<cr>:g/^v s/m$<cr>úgg
|
|||
|
call scommands#map('s', 'CL', "n,v")
|
|||
|
command! -nargs=? CLscratch 10split | enew | setlocal buftype=nofile bufhidden=wipe noswapfile nobuflisted | if <q-args>!='' | execute 'normal "'.<q-args>.'p' | endif | nnoremap <buffer> ;q :q<cr>
|
|||
|
|
|||
|
call scommands#map('S', 'SET', "n,v")
|
|||
|
call scommands#map('a', 'ALT', "n,V")
|
|||
|
cabbrev ALTR ALTredrawSyntax
|
|||
|
set grepprg=LC_ALL=C\ grep\ -nrsH
|
|||
|
command! -nargs=0
|
|||
|
\ ALTredrawSyntax edit | exec 'normal `"' | exec 'set ft='.&ft
|
|||
|
command! -complete=command -bar -range -nargs=+
|
|||
|
\ ALTredir call jaandrle_utils#redir(0, <q-args>, <range>, <line1>, <line2>)
|
|||
|
command! -nargs=+ -complete=file_in_path -bar
|
|||
|
\ ALTgrep cgetexpr jaandrle_utils#grep(<f-args>) | call setqflist([], 'a', {'title': ':' . g:jaandrle_utils#last_command})
|
|||
|
command! -nargs=+ -complete=file_in_path -bar
|
|||
|
\ ALTlgrep lgetexpr jaandrle_utils#grep(<f-args>) | call setloclist(0, [], 'a', {'title': ':' . g:jaandrle_utils#last_command})
|
|||
|
command! -nargs=0
|
|||
|
\ ALTargsBWQA execute 'argdo bw' | %argdelete
|
|||
|
|
|||
|
let g:quickfix_len= 0
|
|||
|
function! QuickFixStatus() abort
|
|||
|
hi! link User1 StatusLine
|
|||
|
if !g:quickfix_len | return 'Ø' | endif
|
|||
|
if g:quickfix_len>0 | return g:quickfix_len | endif
|
|||
|
let type= &termguicolors ? 'gui' : 'cterm'
|
|||
|
execute 'hi! User1 '.type.'bg='.synIDattr(synIDtrans(hlID('StatusLine')), 'bg').
|
|||
|
\' '.type.'fg='.synIDattr(synIDtrans(hlID('WarningMsg')), 'fg')
|
|||
|
return -g:quickfix_len
|
|||
|
endfunction
|
|||
|
function! s:QuickFixCmdPost() abort
|
|||
|
let q_len= len(getqflist())
|
|||
|
let g:quickfix_len= q_len ? -q_len : len(getloclist(0))
|
|||
|
endfunction
|
|||
|
augroup quickfix
|
|||
|
autocmd!
|
|||
|
autocmd QuickFixCmdPost * call <sid>QuickFixCmdPost()
|
|||
|
autocmd filetype qf
|
|||
|
\ if filter(getwininfo(), {i,v -> v.winnr == winnr()})[0].loclist
|
|||
|
\| nnoremap <buffer> ;q :lclose<cr>
|
|||
|
\| nnoremap <buffer> ;w :lgetbuffer<CR>:lclose<CR>:lopen<CR>
|
|||
|
\| nnoremap <buffer> ;s :ldo s///gc \| update<c-left><c-left><c-left><right><right>
|
|||
|
\| else
|
|||
|
\| nnoremap <buffer> ;q :cclose<cr>
|
|||
|
\| nnoremap <buffer> ;w :cgetbuffer<CR>:cclose<CR>:copen<CR>
|
|||
|
\| nnoremap <buffer> ;s :cdo s///gc \| update<c-left><c-left><c-left><right><right>
|
|||
|
\| endif
|
|||
|
augroup END
|
|||
|
"" #endregion H
|
|||
|
"" #region SLH – Status Line + Command Line + History (general) + Sessions + File Update, …
|
|||
|
set showcmd cmdheight=2 showmode
|
|||
|
set wildmenu wildoptions=pum
|
|||
|
"" wildmode=list:longest,list:full " Tab autocomplete in command mode
|
|||
|
|
|||
|
cabbrev wbw w<bar>bw
|
|||
|
|
|||
|
set sessionoptions-=options
|
|||
|
command! -nargs=1
|
|||
|
\ CLSESSIONcreate :call mini_sessions#create(<f-args>)
|
|||
|
command! -nargs=0
|
|||
|
\ CLSESSIONconfig :call mini_sessions#sessionConfig()
|
|||
|
command! -nargs=1 -complete=customlist,mini_sessions#complete
|
|||
|
\ CLSESSIONload :call mini_sessions#load(<f-args>)
|
|||
|
command! -nargs=0
|
|||
|
\ Scd :call mini_sessions#recoverPwd()
|
|||
|
|
|||
|
if !has("gui_running")
|
|||
|
execute 'hi! User2 ctermbg='.synIDattr(synIDtrans(hlID('StatusLine')), 'bg').' ctermfg=grey' | endif
|
|||
|
set laststatus=2 " Show status line on startup
|
|||
|
set statusline+=··%1*≡·%{QuickFixStatus()}%*··%2*»·%{user_tips#current()}%*··%=
|
|||
|
set statusline+=%<%f%R\%M··▶·%{&fileformat}·%{&fileencoding?&fileencoding:&encoding}·%{&filetype}··∷·%{mini_sessions#name('–')}··
|
|||
|
|
|||
|
set history=500 " How many lines of (cmd) history has to remember
|
|||
|
set nobackup nowritebackup noswapfile " …there is issue #649 (for servers) and I’m using git/system backups
|
|||
|
try
|
|||
|
set undodir=~/.vim/undodir undofile | catch | endtry
|
|||
|
command! CLundotree UndotreeToggle | echo 'Use also :undolist :earlier :later' | UndotreeFocus
|
|||
|
command! SETundoClear let old_undolevels=&undolevels | set undolevels=-1 | exe "normal a \<BS>\<Esc>" | let &undolevels=old_undolevels | unlet old_undolevels | write
|
|||
|
"" #endregion SLH
|
|||
|
"" #region LLW – Left Column + Line + Wrap + Scrolling
|
|||
|
if has("nvim-0.5.0") || has("patch-8.1.1564") " Recently vim can merge signcolumn and number column into one
|
|||
|
set signcolumn=number | else | set signcolumn=yes | endif " show always to prevent shifting when diagnosticappears
|
|||
|
set cursorline cursorcolumn " Always show current position
|
|||
|
set number foldcolumn=2 " enable line numbers and add a bit extra margin to the left
|
|||
|
set colorcolumn=+1 " …marker visual
|
|||
|
command -nargs=? SETtextwidth if <q-args> | let &textwidth=<q-args> | let &colorcolumn='<args>,120,240' | else | let &textwidth=250 | let &colorcolumn='120,240' | endif
|
|||
|
SETtextwidth " wraping lines and show two lines
|
|||
|
set nowrap " Don't wrap long lines by default
|
|||
|
set breakindent breakindentopt=shift:2 showbreak=↳
|
|||
|
|
|||
|
set scrolloff=5 sidescrolloff=10 " offset for lines/columns when scrolling
|
|||
|
"" #endregion LLW
|
|||
|
"" #region CN – Clipboard + Navigation throught Buffers + Windows + … (CtrlP)
|
|||
|
set pastetoggle=<F2> | nnoremap <F2> :set invpaste paste?<CR>
|
|||
|
nnoremap <silent> <leader>" :call jaandrle_utils#copyRegister()<cr>
|
|||
|
|
|||
|
nmap <expr> š buffer_number("#")==-1 ? "sš<cr>" : "\<c-^>"
|
|||
|
nmap s3 :buffers<cr>:b<space>
|
|||
|
nmap sš :CtrlPBuffer<cr>
|
|||
|
nmap č sš
|
|||
|
let g:ctrlp_map = 'ě'
|
|||
|
command! -nargs=? SETctrlp execute 'nnoremap '.g:ctrlp_map.' :CtrlP <args><cr>'
|
|||
|
call scommands#map(g:ctrlp_map, 'CtrlP', "n")
|
|||
|
let g:ctrlp_clear_cache_on_exit = 0
|
|||
|
let g:ctrlp_prompt_mappings= {
|
|||
|
\ 'ToggleType(1)': ['<c-up>'],
|
|||
|
\ 'ToggleType(-1)': ['<c-down>'],
|
|||
|
\ 'PrtCurStart()': ['<c-b>'],
|
|||
|
\}
|
|||
|
"" #endregion CN
|
|||
|
"" #region FOS – File(s) + Openning + Saving
|
|||
|
set autowrite autoread | autocmd FocusGained,BufEnter *.* checktime
|
|||
|
set modeline
|
|||
|
command! -nargs=?
|
|||
|
\ CLmodeline :call jaandrle_utils#AppendModeline(<q-args>=='basic' ? 0 : 1)
|
|||
|
|
|||
|
set path+=src/**,app/**,build/** " File matching for `:find`
|
|||
|
for ignore in [ '.git', '.npm', 'node_modules' ]
|
|||
|
exec ':set wildignore+=**'.ignore.'**'
|
|||
|
exec ':set wildignore+=**/'.ignore.'/**'
|
|||
|
endfor
|
|||
|
set wildignore+=*.bmp,*.gif,*.ico,*.jpg,*.png,*.ico
|
|||
|
set wildignore+=*.pdf,*.psd
|
|||
|
|
|||
|
nmap <leader>e :Vifm<cr>
|
|||
|
call scommands#map('e', 'Vifm', "n")
|
|||
|
nnoremap gx :silent exec "!xdg-open '".shellescape(substitute(expand('<cfile>'), '?', '\\?', ''), 1)."'" \| redraw!<cr>
|
|||
|
vnoremap gx :silent exec "!xdg-open '".shellescape(substitute(mini_enhancement#selectedText(), '?', '\\?', ''), 1)."'" \| redraw!<cr>
|
|||
|
"" #endregion FOS
|
|||
|
"" #region EN – Editor navigation + search
|
|||
|
set hlsearch incsearch " highlight search, start when typing
|
|||
|
if maparg('<C-L>', 'n') ==# ''
|
|||
|
nnoremap <silent> <c-l> :nohlsearch<c-r>=has('diff')?'<bar>diffupdate':''<cr><cr><c-l> | endif
|
|||
|
|
|||
|
call scommands#map('n', 'NAV', "n")
|
|||
|
command! NAVjumps call jaandrle_utils#gotoJumpChange('jump')
|
|||
|
command! NAVchanges call jaandrle_utils#gotoJumpChange('change')
|
|||
|
command! NAVmarks call jaandrle_utils#gotoMarks()
|
|||
|
|
|||
|
let g:markbar_persist_mark_names = v:false
|
|||
|
nmap <Leader>m <Plug>ToggleMarkbar
|
|||
|
"" #endregion EN
|
|||
|
"" #region EA – Editing adjustment + Syntax + White chars + Folds
|
|||
|
" use <c-v>§ for §
|
|||
|
inoremap § <esc>
|
|||
|
set nrformats-=octal
|
|||
|
command! -nargs=1 SETTOGGLEnrformats if &nf=~<q-args> | set nf-=<args> | else | set nf+=<args> | endif
|
|||
|
|
|||
|
let g:htl_css_templates=1
|
|||
|
let g:markdown_fenced_languages= [ 'javascript', 'js=javascript', 'json', 'html', 'php', 'bash', 'vim', 'vimscript=javascript', 'sass' ]
|
|||
|
augroup conceal
|
|||
|
autocmd!
|
|||
|
au FileType markdown
|
|||
|
\ syn region markdownLink matchgroup=markdownLinkDelimiter start="(" end=")" contains=markdownUrl keepend contained conceal
|
|||
|
\| syn region markdownLinkText matchgroup=markdownLinkTextDelimiter start="!\=\[\%(\%(\_[^][]\|\[\_[^][]*\]\)*]\%( \=[[(]\)\)\@=" end="\]\%( \=[[(]\)\@=" nextgroup=markdownLink,markdownId skipwhite contains=@markdownInline,markdownLineStart concealends
|
|||
|
au FileType markdown,json
|
|||
|
\ setlocal conceallevel=2
|
|||
|
augroup END
|
|||
|
augroup convenient
|
|||
|
autocmd FileType markdown,text setlocal keywordprg=dict
|
|||
|
autocmd FileType git,gitcommit setlocal foldmethod=syntax foldlevel=1
|
|||
|
augroup END
|
|||
|
" PARENTHESES plugin junegunn/rainbow_parentheses.vim
|
|||
|
let g:rainbow#pairs= [['(', ')'], ['[', ']'], [ '{', '}' ]]
|
|||
|
let g:rainbow#blacklist = [203,9]
|
|||
|
autocmd VimEnter * try
|
|||
|
\| call rainbow_parentheses#toggle() | catch | endtry
|
|||
|
command! SETTOGGLErainbowParentheses call rainbow_parentheses#toggle()
|
|||
|
" HIGHLIGHT&YANK plugins machakann/vim-highlightedyank & cwordhi.vim
|
|||
|
let g:highlightedyank_highlight_duration= 250
|
|||
|
let g:cwordhi#autoload= 1
|
|||
|
set showmatch " Quick highlight oppening bracket/… for currently writted
|
|||
|
set timeoutlen=1000 ttimeoutlen=0 " Remove timeout when hitting escape TAB
|
|||
|
if v:version > 703 || v:version == 703 && has("patch541")
|
|||
|
set formatoptions+=j | endif " Delete comment character when joining commented lines
|
|||
|
set smarttab
|
|||
|
command! -nargs=1 SETtab let &shiftwidth=<q-args> | let &tabstop=<q-args> | let &softtabstop=<q-args>
|
|||
|
SETtab 4
|
|||
|
set backspace=indent,eol,start " Allow cursor keys in insert mode: http://vi.stackexchange.com/a/2163
|
|||
|
set shiftround autoindent " round diff shifts to the base of n*shiftwidth, https://stackoverflow.com/a/18415867
|
|||
|
filetype plugin indent on
|
|||
|
" SYNTAX&COLORS
|
|||
|
if ($TERM =~ '256' && has("termguicolors"))
|
|||
|
set termguicolors | endif
|
|||
|
if (&t_Co > 2 || has("gui_running")) && !exists("syntax_on")
|
|||
|
syntax on | endif
|
|||
|
set list listchars=tab:»·,trail:·,extends:#,nbsp:~,space:· " Highlight spec. chars / Display extra whitespace
|
|||
|
augroup syntax_sync_min_lines
|
|||
|
autocmd!
|
|||
|
autocmd Syntax * syn sync minlines=2000
|
|||
|
augroup END
|
|||
|
let g:vim_vue_plugin_config = { 'foldexpr': 1, 'attribute': 1, 'keyword': 1 }
|
|||
|
" SPELL
|
|||
|
if !has("gui_running")
|
|||
|
hi clear SpellBad | hi SpellBad cterm=underline,italic | endif
|
|||
|
command! -nargs=? SETspell if <q-args>==&spelllang || <q-args>=='' | set spell! | else | set spell | set spelllang=<args> | endif | if &spell | set spelllang | endif
|
|||
|
" EDIT HEPERS
|
|||
|
nnoremap <leader>o o<space><bs><esc>
|
|||
|
nnoremap <leader>O O<space><bs><esc>
|
|||
|
nnoremap <s-k> a<cr><esc>
|
|||
|
for l in [ 'y', 'p', 'P', 'd' ] | for m in [ 'n', 'v' ]
|
|||
|
execute m.'noremap <leader>'.l.' "+'.l | endfor | endfor
|
|||
|
" FOLDS
|
|||
|
command! -nargs=0 SETFOLDregions set foldmethod=marker
|
|||
|
command! -nargs=1 SETFOLDindent set foldmethod=indent | let &foldlevel=<q-args> | let &foldnestmax=<q-args>+1
|
|||
|
command! -nargs=* SETFOLDindents set foldmethod=indent | let &foldlevel=split(<q-args>, ' ')[0] | let &foldnestmax=split(<q-args>, ' ')[1]
|
|||
|
set foldmarker=#region,#endregion
|
|||
|
" SAVE VIEW
|
|||
|
set viewoptions=cursor,folds
|
|||
|
augroup remember__view
|
|||
|
autocmd!
|
|||
|
autocmd BufWinLeave *.* if &buflisted | mkview | endif
|
|||
|
autocmd BufWinEnter *.* silent! loadview
|
|||
|
augroup END
|
|||
|
"" #endregion EA
|
|||
|
"" #region GIT
|
|||
|
call scommands#map('g', 'GIT', "n,V")
|
|||
|
function s:gitCompletion(_, CmdLine, __)
|
|||
|
let l:cmd= a:CmdLine->split()
|
|||
|
let l:cmd_start= l:cmd[0]
|
|||
|
\ ->substitute('GIThub', 'gh', '')
|
|||
|
\ ->substitute('GIT', 'git ', '')->trim()->split(' ')
|
|||
|
return bash#complete((l:cmd_start+l:cmd[1:])->join())
|
|||
|
endfunction
|
|||
|
function s:gitCmd(candidate)
|
|||
|
execute '!clear && echo ":: git '.a:candidate->escape('"').' ::" && git '.a:candidate
|
|||
|
endfunction
|
|||
|
command! -nargs=* -complete=customlist,<sid>gitCompletion
|
|||
|
\ GIT call <sid>gitCmd(<q-args>)
|
|||
|
command! -nargs=* -complete=customlist,<sid>gitCompletion
|
|||
|
\ GITstatus !git status-- <args>
|
|||
|
command! -nargs=* -complete=customlist,<sid>gitCompletion
|
|||
|
\ GITcommit !git commit-- <args>
|
|||
|
command! -nargs=* -complete=customlist,<sid>gitCompletion
|
|||
|
\ GITpush !git push <args>
|
|||
|
command! -nargs=* -complete=customlist,<sid>gitCompletion
|
|||
|
\ GITdiff if <q-args>=='' | execute '!clear && git diff %:p' | else | silent! execute '!git diff <args>' | endif
|
|||
|
command! -nargs=*
|
|||
|
\ GITrestore execute '!clear && git status '.(<q-args>=='.' ? '%:p':'<args>').' -bs & git restore '.(<q-args>=='' ? '%:p':'<args>').' --patch'
|
|||
|
command! -nargs=* -complete=customlist,<sid>gitCompletion
|
|||
|
\ GIThub execute '!clear && echo ":: gh '.<q-args>->escape('"').' ::" && gh '.<q-args>
|
|||
|
command! -nargs=?
|
|||
|
\ GIThubIssue execute '!clear && gh issue view '.expand('<cword>').' '.<q-args>
|
|||
|
let g:git_messenger_no_default_mappings= v:true
|
|||
|
let g:git_messenger_date_format= '%Y-%m-%d (%c)'
|
|||
|
let g:git_messenger_always_into_popup= v:true
|
|||
|
augroup git_messenger_help
|
|||
|
autocmd!
|
|||
|
autocmd FileType gitmessengerpopup setlocal keywordprg=git\ show
|
|||
|
augroup END
|
|||
|
command! -nargs=0
|
|||
|
\ GITblameThis GitMessenger
|
|||
|
"" #endregion GIT
|
|||
|
"" #region COC – COC and so on, compilers, code/commands completions
|
|||
|
let g:coc_global_extensions= ['coc-css', 'coc-docthis', 'coc-emmet', 'coc-emoji', 'coc-eslint', 'coc-gitmoji', 'coc-html', 'coc-json', 'coc-marketplace', 'coc-phpls', 'coc-sh', 'coc-snippets', 'coc-styled-components', 'coc-svg', 'coc-tabnine', 'coc-tsserver']
|
|||
|
" https://github.com/antonk52/cssmodules-language-server
|
|||
|
call coc#config('languageserver.cssmodules', {
|
|||
|
\ "command": "cssmodules-language-server",
|
|||
|
\ "initializationOptions": {"camelCase": "dashes"},
|
|||
|
\ "filetypes": ["javascript", "javascriptreact", "typescript", "typescriptreact"],
|
|||
|
\ "requireRootPattern": 0,
|
|||
|
\ "settings": {}
|
|||
|
\ })
|
|||
|
autocmd FileType scss setl iskeyword+=@-@
|
|||
|
command -nargs=? ALTmake if &filetype=='javascript' | compiler jshint | elseif &filetype=='php' | compiler php | endif
|
|||
|
\| if <q-args>!='' | silent make <args> | else | silent make '%' | endif | checktime | silent redraw! " …prev line, hotfix (filetype detection does’t works)
|
|||
|
function <sid>ToggleALTmakeOnWrite()
|
|||
|
if exists('#ALTmake_auto#BufWritePost')
|
|||
|
augroup ALTmake_auto
|
|||
|
autocmd!
|
|||
|
augroup END
|
|||
|
else
|
|||
|
augroup ALTmake_auto
|
|||
|
autocmd!
|
|||
|
autocmd BufWritePost *.{php,js,mjs} execute 'ALTmake' | call <sid>QuickFixCmdPost()
|
|||
|
augroup END
|
|||
|
endif
|
|||
|
endfunction
|
|||
|
command! ALTmakeOnWrite call <sid>ToggleALTmakeOnWrite()
|
|||
|
function! CustomKeyWord(word)
|
|||
|
if(a:word=="gulp_place")
|
|||
|
highlight link gulp_place ErrorMsg
|
|||
|
syntax match gulp_place "gulp_place"
|
|||
|
augroup gulp_place
|
|||
|
autocmd!
|
|||
|
autocmd BufEnter *.{js,html} syntax match gulp_place "gulp_place"
|
|||
|
augroup END
|
|||
|
return 0
|
|||
|
endif
|
|||
|
endfunction
|
|||
|
|
|||
|
set completeopt=menuone,preview,noinsert,noselect
|
|||
|
inoremap <silent><expr> <F1> coc#pum#visible() ? coc#pum#confirm() : coc#refresh()
|
|||
|
set wildcharm=<f1>
|
|||
|
inoremap <silent><expr> <tab> coc#pum#visible() ? coc#pum#next(1) : <sid>check_back_space() ? "\<tab>" : coc#refresh()
|
|||
|
inoremap <silent><expr> <s-tab> coc#pum#visible() ? coc#pum#prev(1) : "\<c-h>"
|
|||
|
function! s:check_back_space() abort
|
|||
|
let col = col('.') - 1
|
|||
|
return !col || getline('.')[col - 1] =~# '\s'
|
|||
|
endfunction
|
|||
|
|
|||
|
nmap <silent> gd <Plug>(coc-definition)
|
|||
|
nmap <leader>/ :CocSearch
|
|||
|
nmap <leader>? <leader>/
|
|||
|
command! -bang NAVdiagnostic call CocActionAsync('diagnostic'.( "<bang>" == '!' ? 'Previous' : 'Next' ))
|
|||
|
command! NAVdefinition call CocActionAsync('jumpDefinition')
|
|||
|
command! NAVtype call CocActionAsync('jumpTypeDefinition')
|
|||
|
command! NAVimplementation call CocActionAsync('jumpImplementation')
|
|||
|
command! NAVreferences call CocActionAsync('jumpReferences')
|
|||
|
" navigate diagnostics, use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
|
|||
|
nnoremap <silent> gh :call <sid>show_documentation(expand("<cword>"))<cr>
|
|||
|
vnoremap <silent> gh :<c-u>call <sid>show_documentation(mini_enhancement#selectedText())<cr>
|
|||
|
nnoremap <leader>gf :let g:ctrlp_default_input=expand("<cword>") <bar> execute 'CtrlP' <bar> unlet g:ctrlp_default_input <cr>
|
|||
|
vnoremap <leader>gf :<c-u>let g:ctrlp_default_input=mini_enhancement#selectedText() <bar> execute 'CtrlP' <bar> unlet g:ctrlp_default_input <cr>
|
|||
|
""" #region COCP – Coc popups scroll (Remap <C-f> and <C-b> for scroll float windows/popups.)
|
|||
|
if has('nvim-0.4.0') || has('patch-8.2.0750')
|
|||
|
nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
|
|||
|
nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
|
|||
|
inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
|
|||
|
inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
|
|||
|
vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
|
|||
|
vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
|
|||
|
endif
|
|||
|
""" #endregion COCP
|
|||
|
command! -nargs=? SETFOLDcoc :call CocAction('fold', <f-args>)
|
|||
|
|
|||
|
call scommands#map('C', 'Coc', "n,v")
|
|||
|
nmap sc :CocList lists<cr>
|
|||
|
nmap Sc :CocListResume<cr>
|
|||
|
nnoremap <c-g> :CLwhereami<cr>
|
|||
|
command! CLwhereami :call popup_notification([
|
|||
|
\expand('%:t').( coc#status() != "" ? '/'.CocAction("getCurrentFunctionSymbol")."\t…\t".coc#status() : '' ),
|
|||
|
\"– – –",
|
|||
|
\"Line:\t".line('.').' / '.line('$'),
|
|||
|
\"Column:\t".col('.').' / '.col('$'),
|
|||
|
\"Path:\t".expand('%:p:h')
|
|||
|
\], #{ line: &lines-3, pos: 'botleft', moved: 'any', close: 'button', time: 3000 })
|
|||
|
command! CLhelpCocPlug call feedkeys(':<c-u>help <Plug>(coc ', 'tn')
|
|||
|
command! CLhelpCocAction call feedkeys(':<c-u>help CocAction('' ', 'tn')
|
|||
|
command! CLrename call CocActionAsync('rename')
|
|||
|
command! CLrenameFile exec 'CocCommand workspace.renameCurrentFile'
|
|||
|
command! -nargs=? -bang
|
|||
|
\ CLreplace call feedkeys(':<c-u>'.(<q-args>==''?'.':<q-args>).'s/'.("<bang>"=='!'?mini_enhancement#selectedText():expand('<cword>')).'//cgODODOD', 'tn')
|
|||
|
command! CLrepeatLastChange call feedkeys('/\V<C-r>"<CR>cgn<C-a><Esc>', 'tn')
|
|||
|
command! CLjsdoc exec 'CocCommand docthis.documentThis'
|
|||
|
command! CLjshintGlobal normal yiwmm?\/\* global<cr><c-l>f*hi, p`m
|
|||
|
command! CLcodeactionCursor call CocActionAsync('codeAction', 'cursor')
|
|||
|
command! CLfixCodeQuick call CocActionAsync('doQuickfix')
|
|||
|
|
|||
|
function! AIcodeFn(range, ...) range abort
|
|||
|
let l:instruction = 'Hi, can you help me with ' . &filetype . 'code? Thanks in advance. I would like to: '
|
|||
|
if a:0
|
|||
|
let l:instruction = l:instruction . a:1
|
|||
|
endif
|
|||
|
if a:range
|
|||
|
'<,'>call vim_ai#AIRun(a:range, {}, l:instruction)
|
|||
|
else
|
|||
|
call vim_ai#AIRun(a:range, {}, l:instruction)
|
|||
|
endif
|
|||
|
endfunction
|
|||
|
command! -range -nargs=? AIcode <line1>,<line2>call AIcodeFn(<range>, <f-args>)
|
|||
|
vnoremap <f1> :AI<f1>
|
|||
|
nnoremap <f1> :AI<f1>
|
|||
|
command! -nargs=?
|
|||
|
\ CLcheat call cheat_copilot#open(<q-args>==''?&filetype:<q-args>)
|
|||
|
|
|||
|
function! s:show_documentation(word)
|
|||
|
if (index(['vim', 'help'], &filetype) >= 0)
|
|||
|
" inspired by https://github.com/tpope/vim-scriptease/blob/74bd5bf46a63b982b100466f9fd47d2d0597fcdd/autoload/scriptease.vim#L737
|
|||
|
let syn= get(reverse(map(synstack(line('.'), col('.')), 'synIDattr(v:val,"name")')), 0, '')
|
|||
|
if syn ==# 'vimFuncName' | return <sid>show_documentation_vim('h '.a:word.'()')
|
|||
|
elseif syn ==# 'vimOption' | return <sid>show_documentation_vim("h '".a:word."'")
|
|||
|
elseif syn ==# 'vimUserAttrbKey' | return <sid>show_documentation_vim('h :command-'.a:word)
|
|||
|
endif
|
|||
|
|
|||
|
let col= col('.') - 1
|
|||
|
while col && getline('.')[col] =~# '\k' | let col-= 1 | endwhile
|
|||
|
let pre= col == 0 ? '' : getline('.')[0 : col]
|
|||
|
let col= col('.') - 1
|
|||
|
while col && getline('.')[col] =~# '\k' | let col+= 1 | endwhile
|
|||
|
if pre =~# '^\s*:\=$' | return <sid>show_documentation_vim('h :'.a:word)
|
|||
|
elseif pre =~# '\<v:$' | return <sid>show_documentation_vim('h v:'.a:word)
|
|||
|
endif
|
|||
|
|
|||
|
let post= getline('.')[col : -0]
|
|||
|
if a:word ==# 'v' && post =~# ':\w\+' | return <sid>show_documentation_vim('h v'.matchstr(post, ':\w\+')) | endif
|
|||
|
return <sid>show_documentation_vim('h '.a:word)
|
|||
|
endif
|
|||
|
if (!CocAction('hasProvider', 'hover'))
|
|||
|
return feedkeys('K', 'in')
|
|||
|
endif
|
|||
|
if &filetype=='html' && coc#source#custom_elements#hover(a:word)!=0
|
|||
|
return 0
|
|||
|
endif
|
|||
|
|
|||
|
return CocActionAsync('doHover')
|
|||
|
endfunction
|
|||
|
function! s:show_documentation_vim(cmd)
|
|||
|
call execute(a:cmd) | call histadd("cmd", a:cmd)
|
|||
|
endfunction
|
|||
|
"" #endregion COC
|
|||
|
let g:codeium_disable_bindings = 1
|
|||
|
imap <script><silent><nowait><expr> <f3><f3> codeium#Accept()
|
|||
|
imap <f3>n <Cmd>call codeium#CycleCompletions(1)<CR>
|
|||
|
imap <f3>N <Cmd>call codeium#CycleCompletions(-1)<CR>
|
|||
|
imap <f3>d <Cmd>call codeium#Clear()<CR>
|
|||
|
imap <f3>! <Cmd>call codeium#Complete()<CR>
|
|||
|
|
|||
|
" vim: set textwidth=250 :
|
|||
|
" vim>60: set foldmethod=marker foldmarker=#region,#endregion :
|