From 2dd0f66ec1a0f36d81ea8736e80bd216ba4849a1 Mon Sep 17 00:00:00 2001 From: Wang Shidong Date: Sat, 1 May 2021 22:47:19 +0800 Subject: [PATCH] Add file search option (#4245) --- autoload/SpaceVim.vim | 12 +++++ autoload/SpaceVim/plugins/find.vim | 25 +++++----- doc/SpaceVim.txt | 77 +++++++++++++++++------------- docs/documentation.md | 11 +++++ 4 files changed, 81 insertions(+), 44 deletions(-) diff --git a/autoload/SpaceVim.vim b/autoload/SpaceVim.vim index f34946574..d51e48385 100644 --- a/autoload/SpaceVim.vim +++ b/autoload/SpaceVim.vim @@ -173,6 +173,18 @@ let g:spacevim_enable_guicolors = 0 " < let g:spacevim_escape_key_binding = 'jk' +"" +" @section file_searching_tools, options-file_searching_tools +" @parentsection options +" Set the default file searching tool used by `SPC f /`, by default it is `[]`. +" The first item in this list is the name of the tool, the second one is the +" default command. for example: +" > +" file_searching_tools = ['find', 'find -not -iwholename "*.git*" '] +" < + +let g:spacevim_file_searching_tools = [] + "" " @section enable_googlesuggest, options-enable_googlesuggest " @parentsection options diff --git a/autoload/SpaceVim/plugins/find.vim b/autoload/SpaceVim/plugins/find.vim index 57b9ef95e..3bdfa9ca2 100644 --- a/autoload/SpaceVim/plugins/find.vim +++ b/autoload/SpaceVim/plugins/find.vim @@ -17,13 +17,17 @@ let s:FILE = SpaceVim#api#import('file') "}}} -let s:support_tools = ['find', 'fd'] -let s:default_cmd = { +let s:file_searching_commands = { \ 'find' : 'find -not -iwholename "*.git*" ', \ 'fd' : 'fd', \ } -let s:current_tool = 'find' - let s:MPT._prompt.mpt = ' ' . s:default_cmd[s:current_tool] . ' ' +if !empty(g:spacevim_file_searching_tools) + call extend(s:file_searching_commands, {g:spacevim_file_searching_tools[0] : g:spacevim_file_searching_tools[1]}) + let s:current_tool = g:spacevim_file_searching_tools[0] +else + let s:current_tool = 'find' +endif +let s:MPT._prompt.mpt = ' ' . s:file_searching_commands[s:current_tool] . ' ' let s:options = {} let s:second_option = {} let s:options.find = { @@ -119,11 +123,7 @@ let s:second_option.fd = { \ } function! s:start_find() abort - if s:current_tool ==# 'find' - let cmd = s:default_cmd[s:current_tool] . ' ' . s:MPT._prompt.begin . s:MPT._prompt.cursor . s:MPT._prompt.end - elseif s:current_tool ==# 'fd' - let cmd = s:default_cmd[s:current_tool] . ' ' . s:MPT._prompt.begin . s:MPT._prompt.cursor . s:MPT._prompt.end - endif + let cmd = s:file_searching_commands[s:current_tool] . ' ' . s:MPT._prompt.begin . s:MPT._prompt.cursor . s:MPT._prompt.end let s:MPT._quit = 1 call s:MPT._clear_prompt() call s:close_buffer() @@ -210,7 +210,7 @@ function! s:switch_tool() abort let s:MPT._prompt.begin = '' let s:MPT._prompt.cursor = '' let s:MPT._prompt.end = '' - let s:MPT._prompt.mpt = ' ' . s:default_cmd[s:current_tool] . ' ' + let s:MPT._prompt.mpt = ' ' . s:file_searching_commands[s:current_tool] . ' ' redraw call s:MPT._build_prompt() endfunction @@ -227,13 +227,16 @@ function! s:handle_command_line(cmd) abort return endif let argv = split(s:MPT._prompt.begin)[-1] - if s:MPT._prompt.begin[-1:] ==# ' ' && has_key(s:second_option[s:current_tool], argv) + if s:MPT._prompt.begin[-1:] ==# ' ' + \ && has_key(s:second_option, s:current_tool) + \ && has_key(s:second_option[s:current_tool], argv) let line = [] for item in items(s:second_option[s:current_tool][argv]) call add(line, ' ' . item[0] . repeat(' ', 8 - len(item[0])) . item[1]) endfor call setline(1, line) elseif argv =~# '^-[a-zA-Z0-1]*' + \ && has_key(s:options, s:current_tool) let argvs = filter(deepcopy(s:options[s:current_tool]), 'v:key =~ argv') let line = [] for item in items(argvs) diff --git a/doc/SpaceVim.txt b/doc/SpaceVim.txt index 6917e2af6..803da98f1 100644 --- a/doc/SpaceVim.txt +++ b/doc/SpaceVim.txt @@ -43,41 +43,42 @@ CONTENTS *SpaceVim-contents* 23. enable_ycm.............................|SpaceVim-options-enable_ycm| 24. error_symbol.........................|SpaceVim-options-error_symbol| 25. escape_key_binding.............|SpaceVim-options-escape_key_binding| - 26. filemanager...........................|SpaceVim-options-filemanager| - 27. filetree_direction.............|SpaceVim-options-filetree_direction| - 28. guifont...................................|SpaceVim-options-guifont| - 29. home_files_number...............|SpaceVim-options-home_files_number| - 30. info_symbol...........................|SpaceVim-options-info_symbol| - 31. keep_server_alive...............|SpaceVim-options-keep_server_alive| - 32. language.................................|SpaceVim-options-language| - 33. lint_engine...........................|SpaceVim-options-lint_engine| - 34. lint_on_the_fly...................|SpaceVim-options-lint_on_the_fly| - 35. max_column.............................|SpaceVim-options-max_column| - 36. plugin_bundle_dir...............|SpaceVim-options-plugin_bundle_dir| - 37. plugin_manager_processes.|SpaceVim-options-plugin_manager_processes| - 38. project_rooter_automatically + 26. file_searching_tools.........|SpaceVim-options-file_searching_tools| + 27. filemanager...........................|SpaceVim-options-filemanager| + 28. filetree_direction.............|SpaceVim-options-filetree_direction| + 29. guifont...................................|SpaceVim-options-guifont| + 30. home_files_number...............|SpaceVim-options-home_files_number| + 31. info_symbol...........................|SpaceVim-options-info_symbol| + 32. keep_server_alive...............|SpaceVim-options-keep_server_alive| + 33. language.................................|SpaceVim-options-language| + 34. lint_engine...........................|SpaceVim-options-lint_engine| + 35. lint_on_the_fly...................|SpaceVim-options-lint_on_the_fly| + 36. max_column.............................|SpaceVim-options-max_column| + 37. plugin_bundle_dir...............|SpaceVim-options-plugin_bundle_dir| + 38. plugin_manager_processes.|SpaceVim-options-plugin_manager_processes| + 39. project_rooter_automatically ...............................|SpaceVim-options-project_rooter_automatically| - 39. project_rooter_outermost.|SpaceVim-options-project_rooter_outermost| - 40. project_rooter_patterns...|SpaceVim-options-project_rooter_patterns| - 41. projects_cache_num.............|SpaceVim-options-projects_cache_num| - 42. realtime_leader_guide.......|SpaceVim-options-realtime_leader_guide| - 43. relativenumber.....................|SpaceVim-options-relativenumber| - 44. retry_cnt...............................|SpaceVim-options-retry_cnt| - 45. search_tools.........................|SpaceVim-options-search_tools| - 46. sidebar_width.......................|SpaceVim-options-sidebar_width| - 47. snippet_engine.....................|SpaceVim-options-snippet_engine| - 48. statusline_iseparator.......|SpaceVim-options-statusline_iseparator| - 49. statusline_left_sections.|SpaceVim-options-statusline_left_sections| - 50. statusline_separator.........|SpaceVim-options-statusline_separator| - 51. statusline_unicode_symbols + 40. project_rooter_outermost.|SpaceVim-options-project_rooter_outermost| + 41. project_rooter_patterns...|SpaceVim-options-project_rooter_patterns| + 42. projects_cache_num.............|SpaceVim-options-projects_cache_num| + 43. realtime_leader_guide.......|SpaceVim-options-realtime_leader_guide| + 44. relativenumber.....................|SpaceVim-options-relativenumber| + 45. retry_cnt...............................|SpaceVim-options-retry_cnt| + 46. search_tools.........................|SpaceVim-options-search_tools| + 47. sidebar_width.......................|SpaceVim-options-sidebar_width| + 48. snippet_engine.....................|SpaceVim-options-snippet_engine| + 49. statusline_iseparator.......|SpaceVim-options-statusline_iseparator| + 50. statusline_left_sections.|SpaceVim-options-statusline_left_sections| + 51. statusline_separator.........|SpaceVim-options-statusline_separator| + 52. statusline_unicode_symbols .................................|SpaceVim-options-statusline_unicode_symbols| - 52. terminal_cursor_shape.......|SpaceVim-options-terminal_cursor_shape| - 53. vim_help_language...............|SpaceVim-options-vim_help_language| - 54. vimcompatible.......................|SpaceVim-options-vimcompatible| - 55. warning_symbol.....................|SpaceVim-options-warning_symbol| - 56. windows_index_type.............|SpaceVim-options-windows_index_type| - 57. windows_leader.....................|SpaceVim-options-windows_leader| - 58. windows_smartclose.............|SpaceVim-options-windows_smartclose| + 53. terminal_cursor_shape.......|SpaceVim-options-terminal_cursor_shape| + 54. vim_help_language...............|SpaceVim-options-vim_help_language| + 55. vimcompatible.......................|SpaceVim-options-vimcompatible| + 56. warning_symbol.....................|SpaceVim-options-warning_symbol| + 57. windows_index_type.............|SpaceVim-options-windows_index_type| + 58. windows_leader.....................|SpaceVim-options-windows_leader| + 59. windows_smartclose.............|SpaceVim-options-windows_smartclose| 3. Configuration...........................................|SpaceVim-config| 4. Commands..............................................|SpaceVim-commands| 5. Functions............................................|SpaceVim-functions| @@ -440,6 +441,16 @@ to disable this key binding, set this option to empty string. escape_key_binding = 'jk' < +============================================================================== +FILE_SEARCHING_TOOLS *SpaceVim-options-file_searching_tools* + +Set the default file searching tool used by `SPC f /`, by default it is `[]`. +The first item in this list is the name of the tool, the second one is the +default command. for example: +> + file_searching_tools = ['find', 'find -not -iwholename "*.git*" '] +< + ============================================================================== FILEMANAGER *SpaceVim-options-filemanager* diff --git a/docs/documentation.md b/docs/documentation.md index 783541aaf..3fc2f0c14 100644 --- a/docs/documentation.md +++ b/docs/documentation.md @@ -1409,6 +1409,17 @@ By default, `find` is the default tool, you can use `ctrl-e` to switch tools. ![find](https://user-images.githubusercontent.com/13142418/97999590-79717000-1e26-11eb-91b1-458ab30d6254.gif) +To change the default file searching tool, you can use `file_searching_tools` option. +It is `[]` by default. + +```toml +[options] + file_searching_tools = ['find', 'find -not -iwholename "*.git*" '] +``` + +The first item is the name of the tool, the second one is the default searching command. + + #### Vim and SpaceVim files Convenient key bindings are located under the prefix `SPC f v` to quickly navigate between Vim and SpaceVim specific files.