diff --git a/after/ftplugin/haskell.vim b/after/ftplugin/haskell.vim index 4b048f3..c9a2b5d 100644 --- a/after/ftplugin/haskell.vim +++ b/after/ftplugin/haskell.vim @@ -35,9 +35,6 @@ endfunction call deoplete#enable() -call deoplete#custom#source('LanguageClient', - \ 'min_pattern_length', - \ 2) inoremap pumvisible() ? "\" : "\" diff --git a/after/ftplugin/typescript.vim b/after/ftplugin/typescript.vim index 1656b73..ad6f143 100644 --- a/after/ftplugin/typescript.vim +++ b/after/ftplugin/typescript.vim @@ -15,4 +15,4 @@ call deoplete#custom#option('sources', { call deoplete#custom#source('ale', 'rank', 999) call deoplete#custom#source('ale', 'input_pattern', '[^. *\t]\.\w*') -autocmd FileType typescript setlocal balloonexpr=tsuquyomi#balloonexpr() +" autocmd FileType typescript setlocal balloonexpr=tsuquyomi#balloonexpr() diff --git a/after/plugin/plugin_settings.vim b/after/plugin/plugin_settings.vim index 5acc31f..d67d000 100644 --- a/after/plugin/plugin_settings.vim +++ b/after/plugin/plugin_settings.vim @@ -1,4 +1,4 @@ -if has('nvim') +if has('nvim') && !exists("g:vscode") lua << EOF vim.diagnostic.config({ virtual_text = false, @@ -8,7 +8,6 @@ lua << EOF severity_sort = false, }) -vim.cmd('autocmd CursorHold * lua vim.diagnostic.open_float()') vim.o.updatetime = 300 -- Show all diagnostics on current line in floating window @@ -29,5 +28,27 @@ vim.o.updatetime = 300 -- { 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 endif + diff --git a/autoload/log-autocmds.vim b/autoload/log-autocmds.vim new file mode 100644 index 0000000..0b2b489 --- /dev/null +++ b/autoload/log-autocmds.vim @@ -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', + \ ] + diff --git a/autoload/submode.vim b/autoload/submode.vim new file mode 100644 index 0000000..6889e8a --- /dev/null +++ b/autoload/submode.vim @@ -0,0 +1,551 @@ +" submode - Create your own submodes +" Version: 0.3.1 +" Copyright (C) 2008-2014 kana +" 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} +" \ (submode-before-entering:{submode}:with:{key-to-enter}) +" \(submode-before-entering:{submode}) +" \(submode-enter:{submode}) +" +" MAP (submode-before-entering:{submode}:with:{key-to-enter}) +" \ {anything} +" noremap (submode-before-entering:{submode}) +" \ {tweaking 'timeout' and others} +" map (submode-enter:{submode}) +" \ (submode-before-action:{submode}) +" \(submode-prefix:{submode}) +" +" map (submode-prefix:{submode}) +" \ (submode-leave:{submode}) +" map (submode-prefix:{submode}){the first N keys in {lhs}} +" \ (submode-leave:{submode}) +" map (submode-prefix:{submode}){lhs} +" \ (submode-rhs:{submode}:for:{lhs}) +" \(submode-enter:{submode}) +" MAP (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 = [''] +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("\", 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 : '' + 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') " is not expression. + return submode#map(a:submode, a:modes, options . 'x', a:lhs, '') +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('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('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- cannot be used for s:on_leaving_submode(), + " because it uses some commands not allowed in :map-. + execute s:map_command(a:mode, '') + \ s:map_options('s') + \ s:named_key_leave(a:submode) + \ printf('%son_leaving_submode(%s)', + \ a:mode =~# '[ic]' ? '=' : '@=', + \ 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': '', + \ 'e': '', + \ 's': '', + \ 'u': '', + \ } + 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\sS\]" || s:insert_mode_p(a:mode) +endfunction + + + + +function! s:named_key_before_action(submode) "{{{2 + return printf('(submode-before-action:%s)', a:submode) +endfunction + + + + +function! s:named_key_before_entering(submode) "{{{2 + return printf('(submode-before-entering:%s)', a:submode) +endfunction + + + + +function! s:named_key_before_entering_with(submode, lhs) "{{{2 + return printf('(submode-before-entering:%s:with:%s)', a:submode, a:lhs) +endfunction + + + + +function! s:named_key_enter(submode) "{{{2 + return printf('(submode-enter:%s)', a:submode) +endfunction + + + + +function! s:named_key_leave(submode) "{{{2 + return printf('(submode-leave:%s)', a:submode) +endfunction + + + + +function! s:named_key_prefix(submode) "{{{2 + return printf('(submode-prefix:%s)%s', a:submode, s:STEALTH_TYPEAHEAD) +endfunction + + + + +function! s:named_key_rhs(submode, lhs) "{{{2 + return printf('(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! \" + + 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 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 + + diff --git a/plugin/keys.vim b/plugin/keys.vim index 543b8c2..d362b83 100644 --- a/plugin/keys.vim +++ b/plugin/keys.vim @@ -295,8 +295,7 @@ inoremap :call Select() nnoremap cd :cd %:p:h:pwd -nnoremap cc :cclose -nnoremap co :copen +nnoremap cc :call ToggleQuickFix() function! ToggleQuickFix() if empty(filter(getwininfo(), 'v:val.quickfix')) @@ -325,6 +324,7 @@ nnoremap :call ToggleLocList() " NERDTree if !exists('g:vscode') +" noremap :Telescope file_browser noremap :NERDTreeToggle " noremap :TagbarToggle inoremap :TagbarToggle @@ -349,7 +349,7 @@ if !exists('g:vscode') if has('nvim') nnoremap ag lua require('telescope.builtin').live_grep({ default_text = vim.fn.expand("") }) nnoremap tg lua require('telescope.builtin').tags({ default_text = vim.fn.expand("") }) - nmap :call ComIfGit('lua require("telescope.builtin").git_files()', 'lua require("telescope.builtin").find_files()') + nmap :call ComIfGit('lua require("telescope.builtin").git_files()', 'lua require("telescope.builtin").find_files()') nmap lua require('telescope.builtin').tags() nmap lua require('telescope.builtin').buffers() nmap lua require('telescope.builtin').diagnostics() @@ -359,7 +359,7 @@ if !exists('g:vscode') nnoremap ag :Clap grep ++query= nnoremap dg :Clap dumb_jump ++query= " nnoremap tg :Clap proj_tags ++query= - nmap :call ComIfGit('Clap gfiles', 'Clap files') + nmap :call ComIfGit('Clap gfiles', 'Clap files') nmap :Clap tags nmap :Clap proj_tags nmap :Clap buffers @@ -415,8 +415,8 @@ else nnoremap la :lua vim.lsp.buf.code_action() nnoremap rn :lua vim.lsp.buf.rename() - nnoremap ln (lcn-diagnostics-next) - nnoremap lp (lcn-diagnostics-prev) + nnoremap ci :lua vim.lsp.buf.incoming_calls() + nnoremap co :lua vim.lsp.buf.outgoing_calls() " Vim Script nnoremap xx TroubleToggle diff --git a/plugins.toml b/plugins.toml index b2d298b..6203fc9 100644 --- a/plugins.toml +++ b/plugins.toml @@ -1,4 +1,93 @@ [[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' [[plugins]] repo = 'PProvost/vim-ps1' @@ -85,7 +174,6 @@ hook_add = ''' on_if = '!exists("g:vscode")' [[plugins]] repo = 'Xuyuanp/nerdtree-git-plugin' -on_event = 'NERDTreeToggle' on_if = '!exists("g:vscode")' [[plugins]] repo = 'xolox/vim-easytags' @@ -190,50 +278,50 @@ repo = 'mkitt/tabline.vim' repo = 'kshenoy/vim-signature' # finder -[[plugins]] -repo = 'liuchengxu/vim-clap' -build = 'make' -hook_add = ''' - autocmd Filetype clap_input inoremap =clap#navigation#scroll('down') - autocmd Filetype clap_input inoremap =clap#navigation#scroll('up') - autocmd Filetype clap_input nnoremap =clap#navigation#scroll('down') - autocmd Filetype clap_input nnoremap =clap#navigation#scroll('up') - - let g:clap_popup_move_manager = { - \ "\": "\", - \ "\": "\", - \ } - - let g:clap_layout = {'relative': 'editor', 'width': '95%', 'height': '33%', 'row': '33%', 'col': '5%'} - let g:clap_use_pure_python = 1 - - function! MultiClap(com, ...) abort - let opts = map(copy(a:000), "printf('++query=%s', v:val)") - execute 'Clap ' a:com join(opts, ' ') - endfunction - - command! -nargs=* Rag call MultiClap('grep', ) - command! -nargs=* Dag call MultiClap('dumb_jump', ) - - let g:clap_provider_generated_tags = { - \ 'source': {-> Tags__source()}, - \ 'sink': {line -> Tags__sink(line)}, - \} - - function! Tags__source () - return flatten(map(tagfiles(), {_, file -> filter(readfile(file), 'stridx(v:val, "!_TAG") != 0')})) - endfunc - - function! Tags__sink (line) - " Let vim handle the tag - execute 'tag' split(a:line, '\t')[0] - endfunc - - cabbrev C Clap - cabbrev c Clap - cabbrev cp Clap proj_tags -''' -on_if = '!has("nvim") && !exists("g:vscode")' +#[[plugins]] +#repo = 'liuchengxu/vim-clap' +#build = 'make' +#hook_add = ''' +# autocmd Filetype clap_input inoremap =clap#navigation#scroll('down') +# autocmd Filetype clap_input inoremap =clap#navigation#scroll('up') +# autocmd Filetype clap_input nnoremap =clap#navigation#scroll('down') +# autocmd Filetype clap_input nnoremap =clap#navigation#scroll('up') +# +# let g:clap_popup_move_manager = { +# \ "\": "\", +# \ "\": "\", +# \ } +# +# let g:clap_layout = {'relative': 'editor', 'width': '95%', 'height': '33%', 'row': '33%', 'col': '5%'} +# let g:clap_use_pure_python = 1 +# +# function! MultiClap(com, ...) abort +# let opts = map(copy(a:000), "printf('++query=%s', v:val)") +# execute 'Clap ' a:com join(opts, ' ') +# endfunction +# +# command! -nargs=* Rag call MultiClap('grep', ) +# command! -nargs=* Dag call MultiClap('dumb_jump', ) +# +# let g:clap_provider_generated_tags = { +# \ 'source': {-> Tags__source()}, +# \ 'sink': {line -> Tags__sink(line)}, +# \} +# +# function! Tags__source () +# return flatten(map(tagfiles(), {_, file -> filter(readfile(file), 'stridx(v:val, "!_TAG") != 0')})) +# endfunc +# +# function! Tags__sink (line) +# " Let vim handle the tag +# execute 'tag' split(a:line, '\t')[0] +# endfunc +# +# cabbrev C Clap +# cabbrev c Clap +# cabbrev cp Clap proj_tags +#''' +#on_if = '!has("nvim") && !exists("g:vscode")' # scm [[plugins]] @@ -245,7 +333,6 @@ on_if = '!exists("g:vscode")' [[plugins]] repo = 'tommcdo/vim-fubitive' [[plugins]] -on_if = '!exists("g:vscode")' repo = 'airblade/vim-gitgutter' hook_add = ''' " https://github.com/airblade/vim-gitgutter/issues/696 @@ -289,10 +376,15 @@ repo = 'LucHermitte/local_vimrc' [[plugins]] repo = 'Shougo/deoplete.nvim' 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) ''' on_if = '!exists("g:vscode")' +lazy = false +[[plugins]] +repo = 'Shougo/deoplete-lsp' +on_if = '!exists("g:vscode")' +lazy = false [[plugins]] repo = 'roxma/nvim-yarp' on_if = '!has("nvim")' @@ -382,6 +474,7 @@ hook_add = ''' \ 'typescript': ['typescript-language-server', '--stdio'] \ } ''' +on_if = '!has("nvim")' #[[plugins]] #repo = 'prabirshrestha/vim-lsp' #hook_add = ''' @@ -593,11 +686,11 @@ name = 'fontzoom' repo = 'https://gogs.hasufell.de/hasufell/vim-unmanaged.git' rtp = 'fontzoom' on_if = '!has("nvim")' -[[plugins]] -name = 'fuzzyfinder' -repo = 'https://gogs.hasufell.de/hasufell/vim-unmanaged.git' -rtp = 'fuzzyfinder' -on_if = '!exists("g:vscode")' +#[[plugins]] +#name = 'fuzzyfinder' +#repo = 'https://gogs.hasufell.de/hasufell/vim-unmanaged.git' +#rtp = 'fuzzyfinder' +#on_if = '!exists("g:vscode")' [[plugins]] name = 'log' repo = 'https://gogs.hasufell.de/hasufell/vim-unmanaged.git' @@ -617,12 +710,86 @@ on_if = '!exists("g:vscode")' [[plugins]] -repo = 'neovim/nvim-lspconfig' +repo = 'williamboman/nvim-lsp-installer' 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")' -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]] repo = 'kyazdani42/nvim-web-devicons' @@ -646,7 +813,36 @@ EOF lazy = false 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]] repo = 'nvim-telescope/telescope.nvim' lazy = false on_if = 'has("nvim") && !exists("g:vscode")' +hook_add = ''' + command! -nargs=* Rag :lua require('telescope.builtin').live_grep({ default_text = vim.fn.expand() }) +''' + +[[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")' diff --git a/vimrc b/vimrc index 155561a..bd94658 100644 --- a/vimrc +++ b/vimrc @@ -4,6 +4,8 @@ set shortmess+=A let g:pymode_python = 'python3' +let g:python_host_prog = '/usr/bin/python2' +let g:python3_host_prog = '/usr/bin/python3' " plugin stuff filetype plugin on @@ -28,6 +30,7 @@ endif set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim let s:toml = $HOME . '/.vim/plugins.toml' +let g:dein#lazy_rplugins = v:false " Required: if dein#load_state($HOME . '/.cache/dein') 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('LS', 'LanguageClientStart') +call CmdAlias('LspLog', 'lua vim.cmd("e"..vim.lsp.get_log_path())') @@ -278,5 +282,7 @@ endfunction set title +autocmd BufEnter * set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:~:h\")})%)%(\ %a%) + " vim:foldmethod=marker:foldlevel=0