This commit is contained in:
Julian Ospald 2022-07-28 00:13:09 +08:00
parent d07f8f78e1
commit eadc5b4c75
Signed by: hasufell
GPG Key ID: 3786C5262ECB4A3F
8 changed files with 957 additions and 67 deletions

View File

@ -35,9 +35,6 @@ endfunction
call deoplete#enable() call deoplete#enable()
call deoplete#custom#source('LanguageClient',
\ 'min_pattern_length',
\ 2)
inoremap <expr><tab> pumvisible() ? "\<c-n>" : "\<tab>" inoremap <expr><tab> pumvisible() ? "\<c-n>" : "\<tab>"

View File

@ -15,4 +15,4 @@ call deoplete#custom#option('sources', {
call deoplete#custom#source('ale', 'rank', 999) call deoplete#custom#source('ale', 'rank', 999)
call deoplete#custom#source('ale', 'input_pattern', '[^. *\t]\.\w*') call deoplete#custom#source('ale', 'input_pattern', '[^. *\t]\.\w*')
autocmd FileType typescript setlocal balloonexpr=tsuquyomi#balloonexpr() " autocmd FileType typescript setlocal balloonexpr=tsuquyomi#balloonexpr()

View File

@ -1,4 +1,4 @@
if has('nvim') if has('nvim') && !exists("g:vscode")
lua << EOF lua << EOF
vim.diagnostic.config({ vim.diagnostic.config({
virtual_text = false, virtual_text = false,
@ -8,7 +8,6 @@ lua << EOF
severity_sort = false, severity_sort = false,
}) })
vim.cmd('autocmd CursorHold * lua vim.diagnostic.open_float()')
vim.o.updatetime = 300 vim.o.updatetime = 300
-- Show all diagnostics on current line in floating window -- Show all diagnostics on current line in floating window
@ -29,5 +28,27 @@ vim.o.updatetime = 300
-- { noremap = true, silent = true } -- { noremap = true, silent = true }
--) --)
-- IMPORTANT!: this is only a showcase of how you can set default options!
require("telescope").setup {
extensions = {
file_browser = {
grouped = true,
theme = "ivy",
mappings = {
["i"] = {
-- your custom insert mode mappings
},
["n"] = {
-- your custom normal mode mappings
},
},
},
},
}
-- To get telescope-file-browser loaded and working with telescope,
-- you need to call load_extension, somewhere after setup function:
require("telescope").load_extension "file_browser"
EOF EOF
endif endif

119
autoload/log-autocmds.vim Normal file
View File

@ -0,0 +1,119 @@
command! LogAutocmds call s:log_autocmds_toggle()
function! s:log_autocmds_toggle()
augroup LogAutocmd
autocmd!
augroup END
let l:date = strftime('%F', localtime())
let s:activate = get(s:, 'activate', 0) ? 0 : 1
if !s:activate
call s:log('Stopped autocmd log (' . l:date . ')')
return
endif
call s:log('Started autocmd log (' . l:date . ')')
augroup LogAutocmd
for l:au in s:aulist
silent execute 'autocmd' l:au '* call s:log(''' . l:au . ''')'
endfor
augroup END
endfunction
function! s:log(message)
silent execute '!echo "'
\ . strftime('%T', localtime()) . ' - ' . a:message . '"'
\ '>> /tmp/vim_log_autocommands'
endfunction
" These are deliberately left out due to side effects
" - SourceCmd
" - FileAppendCmd
" - FileWriteCmd
" - BufWriteCmd
" - FileReadCmd
" - BufReadCmd
" - FuncUndefined
let s:aulist = [
\ 'BufNewFile',
\ 'BufReadPre',
\ 'BufRead',
\ 'BufReadPost',
\ 'FileReadPre',
\ 'FileReadPost',
\ 'FilterReadPre',
\ 'FilterReadPost',
\ 'StdinReadPre',
\ 'StdinReadPost',
\ 'BufWrite',
\ 'BufWritePre',
\ 'BufWritePost',
\ 'FileWritePre',
\ 'FileWritePost',
\ 'FileAppendPre',
\ 'FileAppendPost',
\ 'FilterWritePre',
\ 'FilterWritePost',
\ 'BufAdd',
\ 'BufCreate',
\ 'BufDelete',
\ 'BufWipeout',
\ 'BufFilePre',
\ 'BufFilePost',
\ 'BufEnter',
\ 'BufLeave',
\ 'BufWinEnter',
\ 'BufWinLeave',
\ 'BufUnload',
\ 'BufHidden',
\ 'BufNew',
\ 'SwapExists',
\ 'FileType',
\ 'Syntax',
\ 'EncodingChanged',
\ 'TermChanged',
\ 'VimEnter',
\ 'GUIEnter',
\ 'GUIFailed',
\ 'TermResponse',
\ 'QuitPre',
\ 'VimLeavePre',
\ 'VimLeave',
\ 'FileChangedShell',
\ 'FileChangedShellPost',
\ 'FileChangedRO',
\ 'ShellCmdPost',
\ 'ShellFilterPost',
\ 'CmdUndefined',
\ 'SpellFileMissing',
\ 'SourcePre',
\ 'VimResized',
\ 'FocusGained',
\ 'FocusLost',
\ 'CursorHold',
\ 'CursorHoldI',
\ 'CursorMoved',
\ 'CursorMovedI',
\ 'WinEnter',
\ 'WinLeave',
\ 'TabEnter',
\ 'TabLeave',
\ 'CmdwinEnter',
\ 'CmdwinLeave',
\ 'InsertEnter',
\ 'InsertChange',
\ 'InsertLeave',
\ 'InsertCharPre',
\ 'TextChanged',
\ 'TextChangedI',
\ 'ColorScheme',
\ 'RemoteReply',
\ 'QuickFixCmdPre',
\ 'QuickFixCmdPost',
\ 'SessionLoadPost',
\ 'MenuPopup',
\ 'CompleteDone',
\ 'User',
\ ]

551
autoload/submode.vim Normal file
View File

@ -0,0 +1,551 @@
" submode - Create your own submodes
" Version: 0.3.1
" Copyright (C) 2008-2014 kana <http://whileimautomaton.net/>
" License: MIT license {{{
" Permission is hereby granted, free of charge, to any person obtaining
" a copy of this software and associated documentation files (the
" "Software"), to deal in the Software without restriction, including
" without limitation the rights to use, copy, modify, merge, publish,
" distribute, sublicense, and/or sell copies of the Software, and to
" permit persons to whom the Software is furnished to do so, subject to
" the following conditions:
"
" The above copyright notice and this permission notice shall be included
" in all copies or substantial portions of the Software.
"
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
" }}}
" Concept "{{{1
"
" In the following pseudo code, :MAP means :map or :noremap, and it depends on
" user's specification.
"
" map {key-to-enter}
" \ <Plug>(submode-before-entering:{submode}:with:{key-to-enter})
" \<Plug>(submode-before-entering:{submode})
" \<Plug>(submode-enter:{submode})
"
" MAP <Plug>(submode-before-entering:{submode}:with:{key-to-enter})
" \ {anything}
" noremap <Plug>(submode-before-entering:{submode})
" \ {tweaking 'timeout' and others}
" map <Plug>(submode-enter:{submode})
" \ <Plug>(submode-before-action:{submode})
" \<Plug>(submode-prefix:{submode})
"
" map <Plug>(submode-prefix:{submode})
" \ <Plug>(submode-leave:{submode})
" map <Plug>(submode-prefix:{submode}){the first N keys in {lhs}}
" \ <Plug>(submode-leave:{submode})
" map <Plug>(submode-prefix:{submode}){lhs}
" \ <Plug>(submode-rhs:{submode}:for:{lhs})
" \<Plug>(submode-enter:{submode})
" MAP <Plug>(submode-rhs:{submode}:for:{lhs})
" \ {rhs}
" Variables "{{{1
if !exists('g:submode_always_show_submode')
let g:submode_always_show_submode = 0
endif
if !exists('g:submode_keep_leaving_key')
let g:submode_keep_leaving_key = 0
endif
if !exists('g:submode_keyseqs_to_leave')
let g:submode_keyseqs_to_leave = ['<Esc>']
endif
if !exists('g:submode_timeout')
let g:submode_timeout = &timeout
endif
if !exists('g:submode_timeoutlen')
let g:submode_timeoutlen = &timeoutlen
endif
"" See s:set_up_options() and s:restore_options().
"
" let s:original_showcmd = &showcmd
" let s:original_showmode = &showmode
" let s:original_timeout = &timeout
" let s:original_timeoutlen = &timeoutlen
" let s:original_ttimeout = &ttimeout
" let s:original_ttimeoutlen = &ttimeoutlen
if !exists('s:options_overridden_p')
let s:options_overridden_p = 0
endif
" A padding string to wipe out internal key mappings in 'showcmd' area. (gh-3)
"
" We use no-break spaces (U+00A0) or dots, depending of the current 'encoding'.
" Because
"
" * A normal space (U+0020) is rendered as "<20>" since Vim 7.4.116.
" * U+00A0 is rendered as an invisible glyph if 'encoding' is set to one of
" Unicode encodings. Otherwise "| " is rendered instead.
let s:STEALTH_TYPEAHEAD =
\ &g:encoding =~# '^u'
\ ? repeat("\<Char-0xa0>", 5)
\ : repeat('.', 10)
let s:current_submode = ''
" Interface "{{{1
" :SubmodeRestoreOptions "{{{2
command! -bar -nargs=0 SubmodeRestoreOptions call submode#restore_options()
function! submode#current() "{{{2
return s:current_submode
endfunction
function! submode#enter_with(submode, modes, options, lhs, ...) "{{{2
let rhs = 0 < a:0 ? a:1 : '<Nop>'
for mode in s:each_char(a:modes)
call s:define_entering_mapping(a:submode, mode, a:options, a:lhs, rhs)
endfor
return
endfunction
function! submode#leave_with(submode, modes, options, lhs) "{{{2
let options = substitute(a:modes, 'e', '', 'g') " <Nop> is not expression.
return submode#map(a:submode, a:modes, options . 'x', a:lhs, '<Nop>')
endfunction
function! submode#map(submode, modes, options, lhs, rhs) "{{{2
for mode in s:each_char(a:modes)
call s:define_submode_mapping(a:submode, mode, a:options, a:lhs, a:rhs)
endfor
return
endfunction
function! submode#restore_options() "{{{2
call s:restore_options()
return
endfunction
function! submode#unmap(submode, modes, options, lhs) "{{{2
for mode in s:each_char(a:modes)
call s:undefine_submode_mapping(a:submode, mode, a:options, a:lhs)
endfor
return
endfunction
" Core "{{{1
function! s:define_entering_mapping(submode, mode, options, lhs, rhs) "{{{2
execute s:map_command(a:mode, 'r')
\ s:map_options(s:filter_flags(a:options, 'bu'))
\ (a:lhs)
\ (s:named_key_before_entering_with(a:submode, a:lhs)
\ . s:named_key_before_entering(a:submode)
\ . s:named_key_enter(a:submode))
if !s:mapping_exists_p(s:named_key_enter(a:submode), a:mode)
" When the given submode is not defined yet - define the default key
" mappings to leave the submode.
for keyseq in g:submode_keyseqs_to_leave
call submode#leave_with(a:submode, a:mode, a:options, keyseq)
endfor
endif
execute s:map_command(a:mode, s:filter_flags(a:options, 'r'))
\ s:map_options(s:filter_flags(a:options, 'besu'))
\ s:named_key_before_entering_with(a:submode, a:lhs)
\ a:rhs
execute s:map_command(a:mode, '')
\ s:map_options('e')
\ s:named_key_before_entering(a:submode)
\ printf('<SID>on_entering_submode(%s)', string(a:submode))
execute s:map_command(a:mode, 'r')
\ s:map_options('')
\ s:named_key_enter(a:submode)
\ (s:named_key_before_action(a:submode)
\ . s:named_key_prefix(a:submode))
execute s:map_command(a:mode, '')
\ s:map_options('e')
\ s:named_key_before_action(a:submode)
\ printf('<SID>on_executing_action(%s)', string(a:submode))
execute s:map_command(a:mode, 'r')
\ s:map_options('')
\ s:named_key_prefix(a:submode)
\ s:named_key_leave(a:submode)
" NB: :map-<expr> cannot be used for s:on_leaving_submode(),
" because it uses some commands not allowed in :map-<expr>.
execute s:map_command(a:mode, '')
\ s:map_options('s')
\ s:named_key_leave(a:submode)
\ printf('%s<SID>on_leaving_submode(%s)<Return>',
\ a:mode =~# '[ic]' ? '<C-r>=' : '@=',
\ string(a:submode))
return
endfunction
function! s:define_submode_mapping(submode, mode, options, lhs, rhs) "{{{2
execute s:map_command(a:mode, 'r')
\ s:map_options(s:filter_flags(a:options, 'bu'))
\ (s:named_key_prefix(a:submode) . a:lhs)
\ (s:named_key_rhs(a:submode, a:lhs)
\ . (s:has_flag_p(a:options, 'x')
\ ? s:named_key_leave(a:submode)
\ : s:named_key_enter(a:submode)))
execute s:map_command(a:mode, s:filter_flags(a:options, 'r'))
\ s:map_options(s:filter_flags(a:options, 'besu'))
\ s:named_key_rhs(a:submode, a:lhs)
\ a:rhs
let keys = s:split_keys(a:lhs)
for n in range(1, len(keys) - 1)
let first_n_keys = join(keys[:-(n+1)], '')
silent! execute s:map_command(a:mode, 'r')
\ s:map_options(s:filter_flags(a:options, 'bu'))
\ (s:named_key_prefix(a:submode) . first_n_keys)
\ s:named_key_leave(a:submode)
endfor
return
endfunction
function! s:undefine_submode_mapping(submode, mode, options, lhs) "{{{2
execute s:map_command(a:mode, 'u')
\ s:map_options(s:filter_flags(a:options, 'b'))
\ s:named_key_rhs(a:submode, a:lhs)
let keys = s:split_keys(a:lhs)
for n in range(len(keys), 1, -1)
let first_n_keys = join(keys[:n-1], '')
execute s:map_command(a:mode, 'u')
\ s:map_options(s:filter_flags(a:options, 'b'))
\ s:named_key_prefix(a:submode) . first_n_keys
if s:longer_mapping_exists_p(s:named_key_prefix(a:submode), first_n_keys)
execute s:map_command(a:mode, 'r')
\ s:map_options(s:filter_flags(a:options, 'b'))
\ s:named_key_prefix(a:submode) . first_n_keys
\ s:named_key_leave(a:submode)
break
endif
endfor
return
endfunction
" Misc. "{{{1
function! s:each_char(s) "{{{2
return split(a:s, '.\zs')
endfunction
function! s:filter_flags(s, cs) "{{{2
return join(map(s:each_char(a:cs), 's:has_flag_p(a:s, v:val) ? v:val : ""'),
\ '')
endfunction
function! s:has_flag_p(s, c) "{{{2
return 0 <= stridx(a:s, a:c)
endfunction
function! s:insert_mode_p(mode) "{{{2
return a:mode =~# '^[iR]'
endfunction
function! s:longer_mapping_exists_p(submode, lhs) "{{{2
" FIXME: Implement the proper calculation.
" Note that mapcheck() can't be used for this purpose because it may
" act as s:shorter_mapping_exists_p() if there is such a mapping.
return !0
endfunction
function! s:map_command(mode, flags) "{{{2
if s:has_flag_p(a:flags, 'u')
return a:mode . 'unmap'
else
return a:mode . (s:has_flag_p(a:flags, 'r') ? 'map' : 'noremap')
endif
endfunction
function! s:map_options(options) "{{{2
let _ = {
\ 'b': '<buffer>',
\ 'e': '<expr>',
\ 's': '<silent>',
\ 'u': '<unique>',
\ }
return join(map(s:each_char(a:options), 'get(_, v:val, "")'))
endfunction
function! s:mapping_exists_p(keyseq, mode) "{{{2
return maparg(a:keyseq, a:mode) != ''
endfunction
function! s:may_override_showmode_p(mode) "{{{2
" Normal mode / Visual mode (& its variants) / Insert mode (& its variants)
return a:mode =~# "^[nvV\<C-v>sS\<C-s>]" || s:insert_mode_p(a:mode)
endfunction
function! s:named_key_before_action(submode) "{{{2
return printf('<Plug>(submode-before-action:%s)', a:submode)
endfunction
function! s:named_key_before_entering(submode) "{{{2
return printf('<Plug>(submode-before-entering:%s)', a:submode)
endfunction
function! s:named_key_before_entering_with(submode, lhs) "{{{2
return printf('<Plug>(submode-before-entering:%s:with:%s)', a:submode, a:lhs)
endfunction
function! s:named_key_enter(submode) "{{{2
return printf('<Plug>(submode-enter:%s)', a:submode)
endfunction
function! s:named_key_leave(submode) "{{{2
return printf('<Plug>(submode-leave:%s)', a:submode)
endfunction
function! s:named_key_prefix(submode) "{{{2
return printf('<Plug>(submode-prefix:%s)%s', a:submode, s:STEALTH_TYPEAHEAD)
endfunction
function! s:named_key_rhs(submode, lhs) "{{{2
return printf('<Plug>(submode-rhs:%s:for:%s)', a:submode, a:lhs)
endfunction
function! s:on_entering_submode(submode) "{{{2
call s:set_up_options(a:submode)
return ''
endfunction
function! s:on_executing_action(submode) "{{{2
if (s:original_showmode || g:submode_always_show_submode)
\ && s:may_override_showmode_p(mode())
echohl ModeMsg
echo '-- Submode:' a:submode '--'
echohl None
endif
return ''
endfunction
function! s:on_leaving_submode(submode) "{{{2
if (s:original_showmode || g:submode_always_show_submode)
\ && s:may_override_showmode_p(mode())
if s:insert_mode_p(mode())
let cursor_position = getpos('.')
endif
" BUGS: :redraw! doesn't redraw 'showmode'.
execute "normal! \<C-l>"
if s:insert_mode_p(mode())
call setpos('.', cursor_position)
endif
endif
if !g:submode_keep_leaving_key && getchar(1) isnot 0
" To completely ignore unbound key sequences in a submode,
" here we have to fetch and drop the last key in the key sequence.
call getchar()
endif
call s:restore_options()
return ''
endfunction
function! s:remove_flag(s, c) "{{{2
" Assumption: a:c is not a meta character.
return substitute(a:s, a:c, '', 'g')
endfunction
function! s:restore_options() "{{{2
if !s:options_overridden_p
return
endif
let s:options_overridden_p = 0
let &showcmd = s:original_showcmd
let &showmode = s:original_showmode
let &timeout = s:original_timeout
let &timeoutlen = s:original_timeoutlen
let &ttimeout = s:original_ttimeout
let &ttimeoutlen = s:original_ttimeoutlen
let s:current_submode = ''
return
endfunction
function! s:set_up_options(submode) "{{{2
if s:options_overridden_p
return
endif
let s:options_overridden_p = !0
let s:original_showcmd = &showcmd
let s:original_showmode = &showmode
let s:original_timeout = &timeout
let s:original_timeoutlen = &timeoutlen
let s:original_ttimeout = &ttimeout
let s:original_ttimeoutlen = &ttimeoutlen
" NB: 'showcmd' must be enabled to render the cursor properly.
" If 'showcmd' is disabled and the current submode message is rendered, the
" cursor is rendered at the end of the message, not the actual position in
" the current window. (gh-9)
set showcmd
set noshowmode
let &timeout = g:submode_timeout
let &ttimeout = s:original_timeout ? !0 : s:original_ttimeout
let &timeoutlen = g:submode_timeoutlen
let &ttimeoutlen = s:original_ttimeoutlen < 0
\ ? s:original_timeoutlen
\ : s:original_ttimeoutlen
let s:current_submode = a:submode
return
endfunction
function! s:split_keys(keyseq) "{{{2
" Assumption: Special keys such as <C-u> are escaped with < and >, i.e.,
" a:keyseq doesn't directly contain any escape sequences.
return split(a:keyseq, '\(<[^<>]\+>\|.\)\zs')
endfunction
" __END__ "{{{1
" vim: foldmethod=marker

View File

@ -295,8 +295,7 @@ inoremap <C-A> <C-O>:call Select()<CR>
nnoremap <leader>cd :cd %:p:h<CR>:pwd<CR> nnoremap <leader>cd :cd %:p:h<CR>:pwd<CR>
nnoremap <Leader>cc :cclose<CR> nnoremap <Leader>cc :call ToggleQuickFix()<CR>
nnoremap <Leader>co :copen<CR>
function! ToggleQuickFix() function! ToggleQuickFix()
if empty(filter(getwininfo(), 'v:val.quickfix')) if empty(filter(getwininfo(), 'v:val.quickfix'))
@ -325,6 +324,7 @@ nnoremap <silent> <F4> :call ToggleLocList()<CR>
" NERDTree " NERDTree
if !exists('g:vscode') if !exists('g:vscode')
" noremap <C-j> :Telescope file_browser<CR>
noremap <C-j> :NERDTreeToggle<CR> noremap <C-j> :NERDTreeToggle<CR>
" noremap <C-B> :TagbarToggle<CR> " noremap <C-B> :TagbarToggle<CR>
inoremap <C-B> <C-O>:TagbarToggle<CR> inoremap <C-B> <C-O>:TagbarToggle<CR>
@ -349,7 +349,7 @@ if !exists('g:vscode')
if has('nvim') if has('nvim')
nnoremap <leader>ag <cmd>lua require('telescope.builtin').live_grep({ default_text = vim.fn.expand("<cword>") })<cr> nnoremap <leader>ag <cmd>lua require('telescope.builtin').live_grep({ default_text = vim.fn.expand("<cword>") })<cr>
nnoremap <silent> <leader>tg <cmd>lua require('telescope.builtin').tags({ default_text = vim.fn.expand("<cword>") })<cr> nnoremap <silent> <leader>tg <cmd>lua require('telescope.builtin').tags({ default_text = vim.fn.expand("<cword>") })<cr>
nmap <C-f> :call ComIfGit('lua require("telescope.builtin").git_files()', 'lua require("telescope.builtin").find_files()')<CR> nmap <silent> <C-f> :call ComIfGit('lua require("telescope.builtin").git_files()', 'lua require("telescope.builtin").find_files()')<CR>
nmap <F1> <cmd>lua require('telescope.builtin').tags()<cr> nmap <F1> <cmd>lua require('telescope.builtin').tags()<cr>
nmap <C-b> <cmd>lua require('telescope.builtin').buffers()<cr> nmap <C-b> <cmd>lua require('telescope.builtin').buffers()<cr>
nmap <C-d> <cmd>lua require('telescope.builtin').diagnostics()<cr> nmap <C-d> <cmd>lua require('telescope.builtin').diagnostics()<cr>
@ -359,7 +359,7 @@ if !exists('g:vscode')
nnoremap <leader>ag :Clap grep ++query=<cword><CR> nnoremap <leader>ag :Clap grep ++query=<cword><CR>
nnoremap <leader>dg :Clap dumb_jump ++query=<cword><CR> nnoremap <leader>dg :Clap dumb_jump ++query=<cword><CR>
" nnoremap <silent> <leader>tg :Clap proj_tags ++query=<cword><CR> " nnoremap <silent> <leader>tg :Clap proj_tags ++query=<cword><CR>
nmap <C-f> :call ComIfGit('Clap gfiles', 'Clap files')<CR> nmap <silent> <C-f> :call ComIfGit('Clap gfiles', 'Clap files')<CR>
nmap <F1> :Clap tags<CR> nmap <F1> :Clap tags<CR>
nmap <F2> :Clap proj_tags<CR> nmap <F2> :Clap proj_tags<CR>
nmap <C-b> :Clap buffers<CR> nmap <C-b> :Clap buffers<CR>
@ -415,8 +415,8 @@ else
nnoremap <leader>la :lua vim.lsp.buf.code_action()<CR> nnoremap <leader>la :lua vim.lsp.buf.code_action()<CR>
nnoremap <leader>rn :lua vim.lsp.buf.rename()<CR> nnoremap <leader>rn :lua vim.lsp.buf.rename()<CR>
nnoremap <leader>ln <Plug>(lcn-diagnostics-next) nnoremap <leader>ci :lua vim.lsp.buf.incoming_calls()<CR>
nnoremap <leader>lp <Plug>(lcn-diagnostics-prev) nnoremap <leader>co :lua vim.lsp.buf.outgoing_calls()<CR>
" Vim Script " Vim Script
nnoremap <leader>xx <cmd>TroubleToggle<cr> nnoremap <leader>xx <cmd>TroubleToggle<cr>

View File

@ -1,4 +1,93 @@
[[plugins]] [[plugins]]
repo = 'dstein64/nvim-scrollview'
hook_add = '''
lua require('scrollview').setup({ excluded_filetypes = {'nerdtree'}, current_only = true, winblend = 75, base = 'right', column = 1 })
'''
on_if = 'has("nvim") && !exists("g:vscode")'
lazy = false
[[plugins]]
repo = 'romgrk/fzy-lua-native'
[[plugins]]
repo = 'gelguy/wilder.nvim'
on_event = 'CmdlineEnter'
hook_post_source = '''
call wilder#setup({
\ 'modes': [':', '/', '?'],
\ 'enable_cmdline_enter': 0,
\ })
call wilder#set_option('noselect', 0)
call wilder#set_option('pipeline', [
\ wilder#branch(
\ wilder#python_file_finder_pipeline({
\ 'file_command': {_, arg -> stridx(arg, '.') != -1 ? ['fd', '-tf', '-H'] : ['fd', '-tf']},
\ 'dir_command': ['fd', '-td'],
\ 'filters': ['cpsm_filter'],
\ }),
\ wilder#substitute_pipeline({
\ 'pipeline': wilder#python_search_pipeline({
\ 'skip_cmdtype_check': 1,
\ 'pattern': wilder#python_fuzzy_pattern({
\ 'start_at_boundary': 0,
\ }),
\ }),
\ }),
\ wilder#cmdline_pipeline({
\ 'fuzzy': 2,
\ 'fuzzy_filter': has('nvim') ? wilder#lua_fzy_filter() : wilder#vim_fuzzy_filter(),
\ }),
\ [
\ wilder#check({_, x -> empty(x)}),
\ wilder#history(),
\ ],
\ wilder#python_search_pipeline({
\ 'pattern': wilder#python_fuzzy_pattern({
\ 'start_at_boundary': 0,
\ }),
\ }),
\ ),
\ ])
let s:highlighters = [
\ wilder#pcre2_highlighter(),
\ has('nvim') ? wilder#lua_fzy_highlighter() : wilder#cpsm_highlighter(),
\ ]
let s:popupmenu_renderer = wilder#popupmenu_renderer(wilder#popupmenu_border_theme({
\ 'border': 'rounded',
\ 'empty_message': wilder#popupmenu_empty_message_with_spinner(),
\ 'highlighter': s:highlighters,
\ 'left': [
\ ' ',
\ wilder#popupmenu_devicons(),
\ wilder#popupmenu_buffer_flags({
\ 'flags': ' a + ',
\ 'icons': {'+': '', 'a': '', 'h': ''},
\ }),
\ ],
\ 'right': [
\ ' ',
\ wilder#popupmenu_scrollbar(),
\ ],
\ }))
let s:wildmenu_renderer = wilder#wildmenu_renderer({
\ 'highlighter': s:highlighters,
\ 'separator': ' · ',
\ 'left': [' ', wilder#wildmenu_spinner(), ' '],
\ 'right': [' ', wilder#wildmenu_index()],
\ })
call wilder#set_option('renderer', wilder#renderer_mux({
\ ':': s:popupmenu_renderer,
\ '/': s:wildmenu_renderer,
\ 'substitute': s:wildmenu_renderer,
\ }))
'''
#[[plugins]]
#repo = 'dstein64/vim-startuptime'
[[plugins]]
repo = 'purescript-contrib/purescript-vim' repo = 'purescript-contrib/purescript-vim'
[[plugins]] [[plugins]]
repo = 'PProvost/vim-ps1' repo = 'PProvost/vim-ps1'
@ -85,7 +174,6 @@ hook_add = '''
on_if = '!exists("g:vscode")' on_if = '!exists("g:vscode")'
[[plugins]] [[plugins]]
repo = 'Xuyuanp/nerdtree-git-plugin' repo = 'Xuyuanp/nerdtree-git-plugin'
on_event = 'NERDTreeToggle'
on_if = '!exists("g:vscode")' on_if = '!exists("g:vscode")'
[[plugins]] [[plugins]]
repo = 'xolox/vim-easytags' repo = 'xolox/vim-easytags'
@ -190,50 +278,50 @@ repo = 'mkitt/tabline.vim'
repo = 'kshenoy/vim-signature' repo = 'kshenoy/vim-signature'
# finder # finder
[[plugins]] #[[plugins]]
repo = 'liuchengxu/vim-clap' #repo = 'liuchengxu/vim-clap'
build = 'make' #build = 'make'
hook_add = ''' #hook_add = '''
autocmd Filetype clap_input inoremap <silent> <buffer> <kPageDown> <C-R>=clap#navigation#scroll('down')<CR> # autocmd Filetype clap_input inoremap <silent> <buffer> <kPageDown> <C-R>=clap#navigation#scroll('down')<CR>
autocmd Filetype clap_input inoremap <silent> <buffer> <kPageUp> <C-R>=clap#navigation#scroll('up')<CR> # autocmd Filetype clap_input inoremap <silent> <buffer> <kPageUp> <C-R>=clap#navigation#scroll('up')<CR>
autocmd Filetype clap_input nnoremap <silent> <buffer> <kPageDown> <C-R>=clap#navigation#scroll('down')<CR> # autocmd Filetype clap_input nnoremap <silent> <buffer> <kPageDown> <C-R>=clap#navigation#scroll('down')<CR>
autocmd Filetype clap_input nnoremap <silent> <buffer> <kPageUp> <C-R>=clap#navigation#scroll('up')<CR> # autocmd Filetype clap_input nnoremap <silent> <buffer> <kPageUp> <C-R>=clap#navigation#scroll('up')<CR>
#
let g:clap_popup_move_manager = { # let g:clap_popup_move_manager = {
\ "\<kPageUp>": "\<PageUp>", # \ "\<kPageUp>": "\<PageUp>",
\ "\<kPageDown>": "\<PageDown>", # \ "\<kPageDown>": "\<PageDown>",
\ } # \ }
#
let g:clap_layout = {'relative': 'editor', 'width': '95%', 'height': '33%', 'row': '33%', 'col': '5%'} # let g:clap_layout = {'relative': 'editor', 'width': '95%', 'height': '33%', 'row': '33%', 'col': '5%'}
let g:clap_use_pure_python = 1 # let g:clap_use_pure_python = 1
#
function! MultiClap(com, ...) abort # function! MultiClap(com, ...) abort
let opts = map(copy(a:000), "printf('++query=%s', v:val)") # let opts = map(copy(a:000), "printf('++query=%s', v:val)")
execute 'Clap ' a:com join(opts, ' ') # execute 'Clap ' a:com join(opts, ' ')
endfunction # endfunction
#
command! -nargs=* Rag call MultiClap('grep', <f-args>) # command! -nargs=* Rag call MultiClap('grep', <f-args>)
command! -nargs=* Dag call MultiClap('dumb_jump', <f-args>) # command! -nargs=* Dag call MultiClap('dumb_jump', <f-args>)
#
let g:clap_provider_generated_tags = { # let g:clap_provider_generated_tags = {
\ 'source': {-> Tags__source()}, # \ 'source': {-> Tags__source()},
\ 'sink': {line -> Tags__sink(line)}, # \ 'sink': {line -> Tags__sink(line)},
\} # \}
#
function! Tags__source () # function! Tags__source ()
return flatten(map(tagfiles(), {_, file -> filter(readfile(file), 'stridx(v:val, "!_TAG") != 0')})) # return flatten(map(tagfiles(), {_, file -> filter(readfile(file), 'stridx(v:val, "!_TAG") != 0')}))
endfunc # endfunc
#
function! Tags__sink (line) # function! Tags__sink (line)
" Let vim handle the tag # " Let vim handle the tag
execute 'tag' split(a:line, '\t')[0] # execute 'tag' split(a:line, '\t')[0]
endfunc # endfunc
#
cabbrev C Clap # cabbrev C Clap
cabbrev c Clap # cabbrev c Clap
cabbrev cp Clap proj_tags # cabbrev cp Clap proj_tags
''' #'''
on_if = '!has("nvim") && !exists("g:vscode")' #on_if = '!has("nvim") && !exists("g:vscode")'
# scm # scm
[[plugins]] [[plugins]]
@ -245,7 +333,6 @@ on_if = '!exists("g:vscode")'
[[plugins]] [[plugins]]
repo = 'tommcdo/vim-fubitive' repo = 'tommcdo/vim-fubitive'
[[plugins]] [[plugins]]
on_if = '!exists("g:vscode")'
repo = 'airblade/vim-gitgutter' repo = 'airblade/vim-gitgutter'
hook_add = ''' hook_add = '''
" https://github.com/airblade/vim-gitgutter/issues/696 " https://github.com/airblade/vim-gitgutter/issues/696
@ -289,10 +376,15 @@ repo = 'LucHermitte/local_vimrc'
[[plugins]] [[plugins]]
repo = 'Shougo/deoplete.nvim' repo = 'Shougo/deoplete.nvim'
hook_add = ''' hook_add = '''
let g:deoplete#enable_at_startup = 0 let g:deoplete#enable_at_startup = 1
autocmd FileType TelescopePrompt call deoplete#custom#buffer_option('auto_complete', v:false) autocmd FileType TelescopePrompt call deoplete#custom#buffer_option('auto_complete', v:false)
''' '''
on_if = '!exists("g:vscode")' on_if = '!exists("g:vscode")'
lazy = false
[[plugins]]
repo = 'Shougo/deoplete-lsp'
on_if = '!exists("g:vscode")'
lazy = false
[[plugins]] [[plugins]]
repo = 'roxma/nvim-yarp' repo = 'roxma/nvim-yarp'
on_if = '!has("nvim")' on_if = '!has("nvim")'
@ -382,6 +474,7 @@ hook_add = '''
\ 'typescript': ['typescript-language-server', '--stdio'] \ 'typescript': ['typescript-language-server', '--stdio']
\ } \ }
''' '''
on_if = '!has("nvim")'
#[[plugins]] #[[plugins]]
#repo = 'prabirshrestha/vim-lsp' #repo = 'prabirshrestha/vim-lsp'
#hook_add = ''' #hook_add = '''
@ -593,11 +686,11 @@ name = 'fontzoom'
repo = 'https://gogs.hasufell.de/hasufell/vim-unmanaged.git' repo = 'https://gogs.hasufell.de/hasufell/vim-unmanaged.git'
rtp = 'fontzoom' rtp = 'fontzoom'
on_if = '!has("nvim")' on_if = '!has("nvim")'
[[plugins]] #[[plugins]]
name = 'fuzzyfinder' #name = 'fuzzyfinder'
repo = 'https://gogs.hasufell.de/hasufell/vim-unmanaged.git' #repo = 'https://gogs.hasufell.de/hasufell/vim-unmanaged.git'
rtp = 'fuzzyfinder' #rtp = 'fuzzyfinder'
on_if = '!exists("g:vscode")' #on_if = '!exists("g:vscode")'
[[plugins]] [[plugins]]
name = 'log' name = 'log'
repo = 'https://gogs.hasufell.de/hasufell/vim-unmanaged.git' repo = 'https://gogs.hasufell.de/hasufell/vim-unmanaged.git'
@ -617,12 +710,86 @@ on_if = '!exists("g:vscode")'
[[plugins]] [[plugins]]
repo = 'neovim/nvim-lspconfig' repo = 'williamboman/nvim-lsp-installer'
hook_add = ''' hook_add = '''
lua require('lspconfig').hls.setup{} lua << EOF
require("nvim-lsp-installer").setup({
automatic_installation = false,
ui = {
icons = {
server_installed = "✓",
server_pending = "➜",
server_uninstalled = "✗"
}
}
})
EOF
''' '''
on_if = 'has("nvim") && !exists("g:vscode")' on_if = 'has("nvim") && !exists("g:vscode")'
lazy = false lazy = true
depends = 'nvim-lspconfig'
[[plugins]]
repo = 'neovim/nvim-lspconfig'
hook_add = '''
" https://github.com/nvim-lua/diagnostic-nvim/issues/29#issuecomment-819344193
" https://github.com/neovim/neovim/issues/12389
function! Diagnostic_open()
if len(filter(nvim_tabpage_list_wins(0), {k,v->nvim_win_get_config(v).relative!=""})) <= 1
lua vim.diagnostic.open_float({focusable = false})
endif
endfunction
lua << EOF
local on_attach = function(client, bufnr)
vim.cmd('autocmd CursorHold * call Diagnostic_open()')
end
require('lspconfig').hls.setup{
cmd = { vim.fs.normalize('~/.ghcup/bin/haskell-language-server-wrapper'), '--lsp', '+RTS', '--nonmoving-gc', '-RTS' },
on_attach = on_attach,
settings = {
haskell = {
formattingProvider = "brittany",
plugin = {
["ghcide-hover-and-symbols"] = { globalOn = true },
["ghcide-code-actions-imports-exports"] = { globalOn = true },
["ghcide-code-actions-type-signatures"] = { globalOn = false },
["ghcide-code-actions-bindings"] = { globalOn = false },
["ghcide-code-actions-fill-holes"] = { globalOn = false },
["ghcide-completions"] = { globalOn = true },
["ghcide-type-lenses"] = { globalOn = false },
pragmas = { globalOn = false },
tactics = { globalOn = false },
rename = { globalOn = false },
retrie = { globalOn = false },
callHierarchy = { globalOn = true },
class = { globalOn = false },
haddockComments = { globalOn = true },
eval = { globalOn = false },
importLens = { globalOn = false },
qualifyImportNames = { globalOn = true },
refineImports = { globalOn = true },
moduleName = { globalOn = false },
hlint = { globalOn = true },
splice = { globalOn = false },
alternateNumberFormat = { globalOn = false },
selectionRange = { globalOn = false },
changeTypeSignature = { globalOn = false }
}
}
}
}
require('lspconfig').tsserver.setup{ on_attach = on_attach }
require('lspconfig').bashls.setup{ on_attach = on_attach }
require('lspconfig').jsonls.setup{ on_attach = on_attach }
require('lspconfig').vimls.setup{ on_attach = on_attach }
require('lspconfig').dockerls.setup{ on_attach = on_attach }
require('lspconfig').powershell_es.setup{ on_attach = on_attach, bundle_path = 'c:/w/PowerShellEditorServices', shell = 'pwsh' }
EOF
'''
on_if = 'has("nvim") && !exists("g:vscode")'
lazy = true
[[plugins]] [[plugins]]
repo = 'kyazdani42/nvim-web-devicons' repo = 'kyazdani42/nvim-web-devicons'
@ -646,7 +813,36 @@ EOF
lazy = false lazy = false
on_if = 'has("nvim") && !exists("g:vscode")' on_if = 'has("nvim") && !exists("g:vscode")'
[[plugins]]
repo = 'nvim-telescope/telescope-file-browser.nvim'
lazy = false
on_if = 'has("nvim") && !exists("g:vscode")'
[[plugins]] [[plugins]]
repo = 'nvim-telescope/telescope.nvim' repo = 'nvim-telescope/telescope.nvim'
lazy = false lazy = false
on_if = 'has("nvim") && !exists("g:vscode")' on_if = 'has("nvim") && !exists("g:vscode")'
hook_add = '''
command! -nargs=* Rag :lua require('telescope.builtin').live_grep({ default_text = vim.fn.expand(<f-args>) })
'''
[[plugins]]
repo = 'ldelossa/litee.nvim'
lazy = false
hook_add = '''
lua << EOF
require("litee.lib").setup({})
EOF
'''
on_if = 'has("nvim") && !exists("g:vscode")'
[[plugins]]
repo = 'hasufell/litee-calltree.nvim'
lazy = false
hook_add = '''
lua << EOF
require("litee.calltree").setup({
map_resize_keys = false
})
EOF
'''
on_if = 'has("nvim") && !exists("g:vscode")'

6
vimrc
View File

@ -4,6 +4,8 @@
set shortmess+=A set shortmess+=A
let g:pymode_python = 'python3' let g:pymode_python = 'python3'
let g:python_host_prog = '/usr/bin/python2'
let g:python3_host_prog = '/usr/bin/python3'
" plugin stuff " plugin stuff
filetype plugin on filetype plugin on
@ -28,6 +30,7 @@ endif
set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim
let s:toml = $HOME . '/.vim/plugins.toml' let s:toml = $HOME . '/.vim/plugins.toml'
let g:dein#lazy_rplugins = v:false
" Required: " Required:
if dein#load_state($HOME . '/.cache/dein') if dein#load_state($HOME . '/.cache/dein')
call dein#begin($HOME . '/.cache/dein', [$HOME . '/.vim/vimrc', $HOME . '/.vim/plugins.toml']) call dein#begin($HOME . '/.cache/dein', [$HOME . '/.vim/vimrc', $HOME . '/.vim/plugins.toml'])
@ -67,6 +70,7 @@ call CmdAlias('Nf', 'Neoformat')
call CmdAlias('NF', 'Neoformat') call CmdAlias('NF', 'Neoformat')
call CmdAlias('nf', 'Neoformat') call CmdAlias('nf', 'Neoformat')
call CmdAlias('LS', 'LanguageClientStart') call CmdAlias('LS', 'LanguageClientStart')
call CmdAlias('LspLog', 'lua vim.cmd("e"..vim.lsp.get_log_path())<CR>')
@ -278,5 +282,7 @@ endfunction
set title set title
autocmd BufEnter * set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:~:h\")})%)%(\ %a%)
" vim:foldmethod=marker:foldlevel=0 " vim:foldmethod=marker:foldlevel=0