From 83ce1fa2bef26ddbc79eb135c0515231a49e28c3 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Sat, 3 Feb 2018 23:12:06 +0800 Subject: [PATCH] Improve FlyGrep ref: https://github.com/BurntSushi/ripgrep/issues/769#issuecomment-362810112 Handle ignorcase and smartcase option in vim --- autoload/SpaceVim/api/prompt.vim | 3 +++ autoload/SpaceVim/mapping/search.vim | 38 ++++++++++++++++++++++++--- autoload/SpaceVim/plugins/flygrep.vim | 37 +++++++++++++------------- doc/SpaceVim.txt | 10 +++++++ 4 files changed, 67 insertions(+), 21 deletions(-) diff --git a/autoload/SpaceVim/api/prompt.vim b/autoload/SpaceVim/api/prompt.vim index 3bf6dac93..fabfa6a1e 100644 --- a/autoload/SpaceVim/api/prompt.vim +++ b/autoload/SpaceVim/api/prompt.vim @@ -136,6 +136,9 @@ func! s:self._build_prompt() abort echohl None | echon self._prompt.begin echohl Wildmenu | echon self._prompt.cursor echohl None | echon self._prompt.end + if empty(self._prompt.cursor) && !has('nvim') + echohl Comment | echon '_' | echohl None + endif endf function! s:self._clear_prompt() abort diff --git a/autoload/SpaceVim/mapping/search.vim b/autoload/SpaceVim/mapping/search.vim index 27f220267..2bd3ba5af 100644 --- a/autoload/SpaceVim/mapping/search.vim +++ b/autoload/SpaceVim/mapping/search.vim @@ -14,31 +14,51 @@ let s:search_tools.a.default_opts = \ '.hg', '--ignore', '.svn', '--ignore', '.git', '--ignore', '.bzr', \ ] let s:search_tools.a.recursive_opt = [] +let s:search_tools.a.expr_opt = [] +let s:search_tools.a.fixed_string_opt = ['-F'] let s:search_tools.a.default_fopts = ['--nonumber'] +let s:search_tools.a.smart_case = ['-S'] +let s:search_tools.a.ignore_case = ['-i'] let s:search_tools.t = {} let s:search_tools.t.command = 'pt' let s:search_tools.t.default_opts = ['--nogroup', '--nocolor'] let s:search_tools.t.recursive_opt = [] +let s:search_tools.t.expr_opt = ['-e'] +let s:search_tools.t.fixed_string_opt = [] let s:search_tools.t.default_fopts = [] +let s:search_tools.t.smart_case = ['-S'] +let s:search_tools.t.ignore_case = ['-i'] let s:search_tools.r = {} let s:search_tools.r.command = 'rg' -let s:search_tools.r.default_opts = ['--hidden', '--no-heading', '--vimgrep', '-S'] +let s:search_tools.r.default_opts = ['--hidden', '--no-heading', '--vimgrep'] let s:search_tools.r.recursive_opt = [] -let s:search_tools.r.default_fopts = ['--hidden', '-S', '-N'] +let s:search_tools.r.expr_opt = ['-e'] +let s:search_tools.r.fixed_string_opt = ['-F'] +let s:search_tools.r.default_fopts = ['--hidden', '-N'] +let s:search_tools.r.smart_case = ['-S'] +let s:search_tools.r.ignore_case = ['-i'] let s:search_tools.k = {} let s:search_tools.k.command = 'ack' let s:search_tools.k.default_opts = ['-i', '--no-heading', '--no-color', '-k', '-H'] let s:search_tools.k.recursive_opt = [] +let s:search_tools.k.expr_opt = [] +let s:search_tools.k.fixed_string_opt = [] let s:search_tools.k.default_fopts = [] +let s:search_tools.k.smart_case = ['--smart-case'] +let s:search_tools.k.ignore_case = ['--ignore-case'] let s:search_tools.g = {} let s:search_tools.g.command = 'grep' let s:search_tools.g.default_opts = ['-inHr'] +let s:search_tools.g.expr_opt = ['-e'] +let s:search_tools.g.fixed_string_opt = ['-F'] let s:search_tools.g.recursive_opt = ['.'] let s:search_tools.g.default_fopts = [] +let s:search_tools.g.smart_case = [] +let s:search_tools.g.ignore_case = ['-i'] function! SpaceVim#mapping#search#grep(key, scope) let cmd = s:search_tools[a:key]['command'] @@ -101,11 +121,23 @@ function! SpaceVim#mapping#search#default_tool() abort let key = s:search_tools.namespace[t] let s:search_tools.default_opt = s:search_tools[key]['default_opts'] let s:search_tools.default_ropt = s:search_tools[key]['recursive_opt'] + let s:search_tools.expr_opt = s:search_tools[key]['expr_opt'] + let s:search_tools.fixed_string_opt = s:search_tools[key]['fixed_string_opt'] + let s:search_tools.ignore_case = s:search_tools[key]['ignore_case'] + let s:search_tools.smart_case = s:search_tools[key]['smart_case'] break endif endfor endif - return [s:search_tools.default_exe, s:search_tools.default_opt, s:search_tools.default_ropt] + return [ + \ s:search_tools.default_exe, + \ s:search_tools.default_opt, + \ s:search_tools.default_ropt, + \ s:search_tools.expr_opt, + \ s:search_tools.fixed_string_opt, + \ s:search_tools.ignore_case, + \ s:search_tools.smart_case, + \ ] endfunction function! SpaceVim#mapping#search#getFopt(exe) abort diff --git a/autoload/SpaceVim/plugins/flygrep.vim b/autoload/SpaceVim/plugins/flygrep.vim index 31a190c97..da0d5ee7b 100644 --- a/autoload/SpaceVim/plugins/flygrep.vim +++ b/autoload/SpaceVim/plugins/flygrep.vim @@ -8,7 +8,15 @@ let s:BUFFER = SpaceVim#api#import('vim#buffer') " Init local options: {{{ let s:grep_expr = '' -let [s:grep_default_exe, s:grep_default_opt, s:grep_default_ropt] = SpaceVim#mapping#search#default_tool() +let [ + \ s:grep_default_exe, + \ s:grep_default_opt, + \ s:grep_default_ropt, + \ s:grep_default_expr_opt, + \ s:grep_default_fix_string_opt, + \ s:grep_ignore_case, + \ s:grep_smart_case + \ ] = SpaceVim#mapping#search#default_tool() let s:grep_timer_id = 0 let s:grepid = 0 " }}} @@ -21,7 +29,6 @@ function! s:grep_timer(timer) abort call SpaceVim#logger#info('grep cmd: ' . string(cmd)) let s:grepid = s:JOB.start(cmd, { \ 'on_stdout' : function('s:grep_stdout'), - \ 'on_stderr' : function('s:grep_stderr'), \ 'in_io' : 'null', \ 'on_exit' : function('s:grep_exit'), \ }) @@ -29,6 +36,13 @@ endfunction function! s:get_search_cmd(expr) abort let cmd = [s:grep_exe] + s:grep_opt + if &ignorecase + let cmd += s:grep_ignore_case + endif + if &smartcase + let cmd += s:grep_smart_case + endif + let cmd += s:grep_default_expr_opt if !empty(s:grep_files) && type(s:grep_files) == 3 return cmd + [a:expr] + s:grep_files elseif !empty(s:grep_files) && type(s:grep_files) == 1 @@ -56,8 +70,6 @@ function! s:flygrep(expr) abort let s:grep_timer_id = timer_start(200, function('s:grep_timer'), {'repeat' : 1}) endfunction -" set default handle func: s:flygrep -let s:MPT._handle_fly = function('s:flygrep') " }}} " filter local funcs: {{{ @@ -100,10 +112,8 @@ endfunction function! s:filter_timer(timer) abort let cmd = s:get_filter_cmd(join(split(s:grep_expr), '.*')) - call SpaceVim#logger#info('filter cmd: ' . string(cmd)) let s:grepid = s:JOB.start(cmd, { \ 'on_stdout' : function('s:grep_stdout'), - \ 'on_stderr' : function('s:grep_stderr'), \ 'in_io' : 'null', \ 'on_exit' : function('s:grep_exit'), \ }) @@ -115,7 +125,6 @@ function! s:get_filter_cmd(expr) abort endfunction " }}} -let s:mode = '' " replace local funcs {{{ function! s:start_replace() abort let s:mode = 'r' @@ -174,17 +183,6 @@ function! s:grep_stdout(id, data, event) abort call s:MPT._build_prompt() endfunction -function! s:grep_stderr(id, data, event) abort - let datas =filter(a:data, '!empty(v:val)') - if getline(1) ==# '' - call setline(1, datas) - else - call append('$', datas) - endif - call append('$', 'job:' . string(s:get_search_cmd(s:grep_expr))) - call s:MPT._build_prompt() -endfunction - function! s:grep_exit(id, data, event) abort redrawstatus let s:grepid = 0 @@ -302,6 +300,9 @@ endif " files: files for grep, @buffers means listed buffer. " dir: specific a directory for grep function! SpaceVim#plugins#flygrep#open(agrv) abort + let s:mode = '' + " set default handle func: s:flygrep + let s:MPT._handle_fly = function('s:flygrep') rightbelow split __flygrep__ setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline nospell nonu norelativenumber let save_tve = &t_ve diff --git a/doc/SpaceVim.txt b/doc/SpaceVim.txt index 55f4eacc5..369c1bda0 100644 --- a/doc/SpaceVim.txt +++ b/doc/SpaceVim.txt @@ -50,6 +50,7 @@ CONTENTS *SpaceVim-contents* 27. operator...................................|SpaceVim-layer-operator| 28. shell.........................................|SpaceVim-layer-shell| 29. tmux...........................................|SpaceVim-layer-tmux| + 30. tools#dash...............................|SpaceVim-layer-tools-dash| 6. API........................................................|SpaceVim-api| 1. cmdlinemenu................................|SpaceVim-api-cmdlinemenu| 2. data#list....................................|SpaceVim-api-data-list| @@ -488,6 +489,10 @@ is on, if any. *g:ale_echo_delay* w0rp/ale {{{ + *g:dash_map* +rizzatti/dash.vim {{{ Allows configuration of mappings between Vim filetypes +and Dash's docsets. + ============================================================================== COMMANDS *SpaceVim-commands* @@ -1116,6 +1121,11 @@ MAPPINGS normal Switch to vim/tmux pane in right direction < +============================================================================== +TOOLS#DASH *SpaceVim-layer-tools-dash* + +This layer provides Dash integration for SpaceVim + ============================================================================== API *SpaceVim-api*