{"id":18109314,"url":"https://github.com/Donaldttt/fuzzyy","last_synced_at":"2025-03-29T15:30:49.255Z","repository":{"id":159112981,"uuid":"634428407","full_name":"Donaldttt/fuzzyy","owner":"Donaldttt","description":"A  vim9 fuzzy finder plugin with minimal dependency and modern UI","archived":false,"fork":false,"pushed_at":"2025-03-24T13:03:08.000Z","size":12539,"stargazers_count":100,"open_issues_count":4,"forks_count":17,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-24T13:23:58.673Z","etag":null,"topics":["fuzzy","fuzzy-search","vim","vim-plugin","vim9","vim9-plugin","vim9-script","vim9script","vimscript"],"latest_commit_sha":null,"homepage":"","language":"Vim Script","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Donaldttt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-30T04:46:01.000Z","updated_at":"2025-03-24T12:06:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"19ea1a36-4bf6-40f2-b4de-d3924fe5eaef","html_url":"https://github.com/Donaldttt/fuzzyy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Donaldttt%2Ffuzzyy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Donaldttt%2Ffuzzyy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Donaldttt%2Ffuzzyy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Donaldttt%2Ffuzzyy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Donaldttt","download_url":"https://codeload.github.com/Donaldttt/fuzzyy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246204532,"owners_count":20740330,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fuzzy","fuzzy-search","vim","vim-plugin","vim9","vim9-plugin","vim9-script","vim9script","vimscript"],"created_at":"2024-11-01T00:01:42.034Z","updated_at":"2025-03-29T15:30:49.248Z","avatar_url":"https://github.com/Donaldttt.png","language":"Vim Script","funding_links":[],"categories":["Fuzzy Finding"],"sub_categories":[],"readme":"# Fuzzyy\n\nA fuzzy finder for files, strings, help documents and many other things.\n\nIt utilizes Vim's native matchfuzzypos function and popup window feature.\n\nFuzzyy strives to provide an out-of-box experience by using pre-installed\nprograms to handle complex tasks.\n\n## Screenshot\n\n![screenshot](https://i.imgur.com/3gkz8Hp.png)\n\n[](https://i.imgur.com/3gkz8Hp.png)\n\n## Requirements\n\n- Vim \u003e= 9.0 (plugin is written in vim9scipt, Vim 9+ required, NeoVim not\n  supported)\n\n### Suggested dependencies\n\n- [ripgrep](https://github.com/BurntSushi/ripgrep) - used for FuzzyGrep and\n  FuzzyFiles if installed, faster than the defaults and respects gitignore\n- [vim-devicons](https://github.com/ryanoasis/vim-devicons) - used to show\n  [devicons](https://devicon.dev/) when listing files if installed\n\n### Optional dependencies\n\n- [ag](https://github.com/ggreer/the_silver_searcher) - used for FuzzyGrep if\n  ripgrep not installed\n- [fd](https://github.com/sharkdp/fd) - used for FuzzyFiles if ripgrep not\n  installed\n- [git](https://git-scm.com/) - used for FuzzyGrep and FuzzyFiles when inside git\n  repo and no alternative dependency installed\n- [ctags](https://ctags.io) - used to generate tags for FuzzyTags (Universal\n  Ctags implementation is required)\n\n## Install\n\nAny plugin manager will work, or you can use Vim's built-in package support:\n\nFor vim-plug\n```vim\nPlug 'Donaldttt/fuzzyy'\n```\n\nAs Vim package\n```\ngit clone https://github.com/Donaldttt/fuzzyy ~/.vim/pack/Donaldttt/start/fuzzyy\n```\n\n## Commands\n\n| Command               | Description\n| ---                   | ---\n| FuzzyFiles            | search files in current working directory (CWD)\n| FuzzyFilesRoot        | search files in the project/vcs root directory\n| FuzzyGrep [str]       | search for string in CWD, use [str] if provided\n| FuzzyGrepRoot [str]   | search for string in the project/vcs root directory\n| FuzzyBuffers          | search opened buffers\n| FuzzyMru              | search most recent used files\n| FuzzyMruCwd           | search most recent used files in CWD\n| FuzzyMruRoot          | search most recent used files in project/vcs root\n| FuzzyInBuffer [str]   | search for string in buffer, use [str] if provided\n| FuzzyHelp             | search subjects/tags in :help documents\n| FuzzyCommands         | search commands\n| FuzzyColors           | search installed color schemes\n| FuzzyCmdHistory       | search command history\n| FuzzyHighlights       | search highlight groups\n| FuzzyTags             | search tags in tagfiles(), see `:h tags`\n| FuzzyTagsRoot         | search tags in the project/vcs root directory\n| FuzzyGitFiles         | search files in output from `git ls-files`\n| FuzzyHelps            | deprecated alias for FuzzyHelp, will be removed\n| FuzzyMRUFiles         | deprecated alias for FuzzyMru, will be removed\n\n- For FuzzyGrep and FuzzyInBuffer, you can define a keymap like this to search\n  the word under cursor.\n  ```vim\n  nnoremap \u003cleader\u003efw :FuzzyGrep \u003cC-R\u003e\u003cC-W\u003e\u003cCR\u003e\n  ```\n- FuzzyGrep requires one of `rg`, `ag`, `grep` or `FINDSTR` commands. If neither\n  `rg` or `ag` are installed it will also use `git-grep` when in a git repo.\n- FuzzyFiles requires one of `rg`, `fd`, `find` or `powershell` commands. If\n  neither `rg` or `fd` are installed it will also use `git-ls-files` when in a\n  git repo.\n- FuzzyTags requires `ctags` (Universal Ctags) to generate a tags file.\n\n## Mappings\n\n```vim\nnnoremap \u003csilent\u003e \u003cleader\u003efb :FuzzyBuffers\u003cCR\u003e\nnnoremap \u003csilent\u003e \u003cleader\u003efc :FuzzyCommands\u003cCR\u003e\nnnoremap \u003csilent\u003e \u003cleader\u003eff :FuzzyFiles\u003cCR\u003e\nnnoremap \u003csilent\u003e \u003cleader\u003efg :FuzzyGrep\u003cCR\u003e\nnnoremap \u003csilent\u003e \u003cleader\u003efh :FuzzyHelp\u003cCR\u003e\nnnoremap \u003csilent\u003e \u003cleader\u003efi :FuzzyInBuffer\u003cCR\u003e\nnnoremap \u003csilent\u003e \u003cleader\u003efm :FuzzyMru\u003cCR\u003e\nnnoremap \u003csilent\u003e \u003cleader\u003efr :FuzzyMruCwd\u003cCR\u003e\n```\n\nYou can set `g:fuzzyy_enable_mappings = 0` to disable these default mappings.\n\nFuzzyy will not overwrite mappings from your vimrc when adding default mappings.\n\n## Navigation\n\n- \\\u003cCTRL-P\u003e or \\\u003cUp\u003e moves up by one line in the menu window\n- \\\u003cCTRL-N\u003e or \\\u003cDown\u003e moves down by one line in the menu window\n- \\\u003cCTRL-U\u003e moves up by half a page in the preview window\n- \\\u003cCTRL-D\u003e moves down by half a page in the preview window\n- \\\u003cCTRL-I\u003e moves up by one line in the preview window\n- \\\u003cCTRL-F\u003e moves down by one line in the preview window\n- \\\u003cCTRL-C\u003e or \\\u003cESC\u003e exits Fuzzyy, closing all the windows\n\nYou can use `g:fuzzyy_keymaps` to change these defaults.\n\nNavigation with the mouse is also supported. A single mouse click in the menu\nwindow moves the cursor line, double click selects a line. The mouse wheel can\nbe used to scroll the preview window, but not the menu window.\n\n**Command specific keymaps**\n\n- FuzzyHighlights\n  - \\\u003cCTRL-K\u003e toggle white preview background color\n\n- FuzzyMru\n  - \\\u003cCTRL-K\u003e toggle between all MRU files and CWD only\n\n- FuzzyBuffers, FuzzyFiles, FuzzyGrep, FuzzyInBuffer, FuzzyMru, FuzzyTags\n  - \\\u003cCTRL-S\u003e open selected file in horizontal split\n  - \\\u003cCTRL-V\u003e open selected file in vertical split\n  - \\\u003cCTRL-T\u003e open selected file in new tab page\n\n- FuzzyBuffers, FuzzyFiles, FuzzyGrep, FuzzyInBuffer, FuzzyMru\n  - \\\u003cCTRL-Q\u003e send results to quickfix list\n\nSend results to quickfix list only includes results currently in the menu buffer,\nwhich effectively limits the results to a few hundred at most (this is probably\nwhat you want, sending thousands of results to the quickfix list is slow).\n\n## Options\n\n### g:fuzzyy_enable_mappings\nSet to 0 to disable default mappings. Default to 1\n```vim\nlet g:fuzzyy_enable_mappings = 1\n```\n\n### g:fuzzyy_devicons\nShow devicons when listing files (e.g. FuzzyFiles, FuzzyBuffers). Requires\n[vim-devicons](https://github.com/ryanoasis/vim-devicons). Default 1 (show\ndevicons if installed), set to 0 to always disable\n```vim\nlet g:fuzzyy_devicons = 1\n```\n\n### g:fuzzyy_dropdown\nEnable dropdown theme (prompt at top rather than bottom). Default 0\n```vim\nlet g:fuzzyy_dropdown = 0\n```\n\n### g:fuzzyy_reuse_windows\nFuzzyy avoids opening files in windows containing special buffers, like buffers\ncreated by file explorer plugins or help and quickfix buffers. Use this to add\nexceptions, the match is on either buftype or filetype. Default `['netrw']`\n(Netrw is Vim's built-in file explorer plugin)\n```vim\nlet g:fuzzyy_reuse_windows = ['netrw']\n```\nExample usage\n```vim\nlet g:fuzzyy_reuse_windows = ['netrw', 'bufexplorer', 'mru', 'terminal']\n```\n\n### g:fuzzyy_respect_gitignore\nMake FuzzyFiles \u0026 FuzzyGrep respect `.gitignore`. Default 1. Only work when\n1. inside a git repository and git is installed\n2. or either rg or fd is installed for FuzzyFiles\n3. or either rg or ag is installed for FuzzyGrep\n```vim\nlet g:fuzzyy_respect_gitignore = 1\n```\nThis option can also be set specifically for FuzzyFiles and/or FuzzyGrep using\n`g:fuzzyy_files_respect_gitignore` and `g:fuzzyy_grep_respect_gitignore`\n\n### g:fuzzyy_include_hidden\nMake FuzzyFiles \u0026 FuzzyGrep include hidden files. Default 1. Only applied when\n1. rg, fd or PowerShell Get-ChildItem used with FuzzyFiles\n2. rg or ag used with FuzzyGrep\n```vim\nlet g:fuzzyy_include_hidden = 1\n```\nThis option can also be set specifically for FuzzyFiles and/or FuzzyGrep using\n`g:fuzzyy_files_include_hidden` and `g:fuzzyy_grep_include_hidden`\n\n### g:fuzzyy_follow_symlinks\nMake FuzzyFiles \u0026 FuzzyGrep follow symbolic links. Not applied when using\ngit-ls-files, git-grep or FINDSTR. Default 0\n```vim\nlet g:fuzzyy_follow_symlinks = 0\n```\nThis option can also be set specifically for FuzzyFiles and/or FuzzyGrep using\n`g:fuzzyy_files_follow_symlinks` and `g:fuzzyy_grep_follow_symlinks`\n\n### g:fuzzyy_root_patterns\nPatterns to find a project root in supported commands, e.g. FuzzyFilesRoot.\nThese commands find a \"root\" directory to use as the working directory by\nwalking up the direcrory tree looking for any match of these glob patterns.\nDefault is intentionally conservative, using common VCS root markers only.\n```vim\nlet g:fuzzyy_root_patterns = ['.git', '.hg', '.svn']\n```\nExample usage\n```vim\nlet g:fuzzyy_root_patterns = ['.git', 'package.json', 'pyproject.toml']\n```\n\n### g:fuzzyy_exclude_file\nMake FuzzyFiles, FuzzyGrep, and FuzzyMru always exclude files matching these\nglob patterns. Applies whether `.gitignore` is respected or not. Default\n`['*.swp', 'tags']`\n```vim\nlet g:fuzzyy_exclude_file = ['*.swp', 'tags']\n```\nThis option can also be set specifically for FuzzyFiles, FuzzyGrep, and FuzzyMru\nusing `g:fuzzyy_files_exclude_file` and `g:fuzzyy_grep_exclude_file` etc.\n\n### g:fuzzyy_exclude_dir\nMake FuzzyFiles, FuzzyGrep, and FuzzyMru always exclude these directories.\nApplies whether `.gitignore` is respected or not. Default\n`['.git', '.hg', '.svn']`\n```vim\nlet g:fuzzyy_exclude_dir = ['.git', '.hg', '.svn']\n```\nThis option can also be set specifically for FuzzyFiles, FuzzyGrep, and FuzzyMru\nusing `g:fuzzyy_files_exclude_dir` and `g:fuzzyy_grep_exclude_dir` etc.\n\n### g:fuzzyy_ripgrep_options\nAdd custom ripgrep options for FuzzyFiles \u0026 FuzzyGrep. Appended to the generated\noptions. Default `[]`\n```vim\nlet g:fuzzyy_ripgrep_options = []\n```\nExample usage\n```vim\nlet g:fuzzyy_ripgrep_options = [\n  \\ \"--no-config\",\n  \\ \"--max-filesize=1M\",\n  \\ \"--no-ignore-parent\",\n  \\ \"--ignore-file \" . expand('~/.ignore')\n  \\ ]\n```\nThis option can also be set specifically for FuzzyFiles and/or FuzzyGrep using\n`g:fuzzyy_files_ripgrep_options` and `g:fuzzyy_grep_ripgrep_options`\n\n### g:fuzzyy_devicons_color_table\nAdd custom mappings for colorizing devicon glyphs. A dictionary of filename\npatterns and colors. Colors must be either color names in Vim's `v:colornames`\ndict or hex colors in `#rrggbb` format. Default {}\n```vim\nlet g:fuzzyy_devicons_color_table = {}\n```\nExample usage\n```vim\nlet g:fuzzyy_devicons_color_table = { '*.vala': 'mediumpurple', '*.jl': '#9558B2' }\n```\n\n### g:fuzzyy_devicons_glyph_func\nSpecify a custom function for obtaining devicon glyphs from file names or paths.\nBy default Fuzzyy integrates with vim-devicons to obtain glyphs and measure byte\nwidths. You can use this option to obtain devicon glyphs from another nerdfont\ncompatible plugin, or your own custom function. Default ''\n```vim\nlet g:fuzzyy_devicons_glyph_func = ''\n```\nExample usage\n```vim\nlet g:fuzzyy_devicons_glyph_func = 'nerdfont#find'\n```\nThe function should take a single string argument and return a single glyph.\n\n### g:fuzzyy_devicons_color_func\nSpecify a custom function for colorizing devicon glyphs. By default Fuzzyy does\nthis with an internal function using a small set of common file name patterns\nand colors, but you may want more extensive support for file name patterns not\nrecognised by Fuzzyy and to apply the same colors to Fuzzyy as other plugins.\nDefault ''\n```vim\nlet g: fuzzyy_devicons_color_func = ''\n```\nExample usage\n```vim\nlet g: fuzzyy_devicons_color_func = 'glyph_palette#apply'\n```\nThe function should take no arguments and use matchadd() to add highlighting.\n\n### g:fuzzyy_keymaps\nChange navigation keymaps. The following are the defaults\n```vim\nlet g:fuzzyy_keymaps = {\n  \\ 'menu_up': [\"\\\u003cc-p\u003e\", \"\\\u003cUp\u003e\"],\n  \\ 'menu_down': [\"\\\u003cc-n\u003e\", \"\\\u003cDown\u003e\"],\n  \\ 'menu_select': [\"\\\u003cCR\u003e\"],\n  \\ 'preview_up': [\"\\\u003cc-i\u003e\"],\n  \\ 'preview_down': [\"\\\u003cc-f\u003e\"],\n  \\ 'preview_up_half_page': [\"\\\u003cc-u\u003e\"],\n  \\ 'preview_down_half_page': [\"\\\u003cc-d\u003e\"],\n  \\ 'cursor_begining': [\"\\\u003cc-a\u003e\"],          \" move cursor to the begining of the line in the prompt\n  \\ 'cursor_end': [\"\\\u003cc-e\u003e\"],               \" move cursor to the end of the line in the prompt\n  \\ 'backspace': [\"\\\u003cbs\u003e\"],\n  \\ 'delete_all': [\"\\\u003cc-k\u003e\"],               \" delete whole line of the prompt\n  \\ 'delete_prefix': [],                    \" delete to the start of the line\n  \\ 'exit': [\"\\\u003cEsc\u003e\", \"\\\u003cc-c\u003e\", \"\\\u003cc-[\u003e\"], \" exit fuzzyy\n  \\ }\n```\n\n### g:fuzzyy_buffers_exclude\nFuzzyBuffers will exclude the buffers in this list. Buffers not included in\nVim's buffer list are excluded by default, so this is only necessary for buffers\nincluded in Vim's buffer list, but you want hidden by FuzzyBuffers. Default `[]`\n```vim\nlet g:fuzzyy_buffers_exclude = []\n```\n\n### g:fuzzyy_buffers_keymap\nFuzzyBuffer keymap for commands specific to FuzzyBuffers. The following are the\ndefaults\n```vim\nlet g:fuzzyy_buffers_keymap = {\n  \\ 'delete_buffer': \"\",\n  \\ 'close_buffer': \"\\\u003cc-l\u003e\",\n  \\ }\n```\n\n### g:fuzzyy_window_layout\nWindow layout configuration. The general defaults for window layout options are:\n```\n'preview': 1,         \" 1 means enable preview window, 0 means disable\n'preview_ratio': 0.5, \" 0.5 means preview window will take 50% of the layout\n'width': 0.8,         \" 0.8 means total width of the layout will take 80% of the screen\n'height': 0.8,        \" 0.8 means total height of the layout will take 80% of the screen\n'xoffset': auto       \" x offset of the windows, 0.1 means 10% from left of the screen\n'yoffset': auto       \" x offset of the windows, 0.1 means 10% from top of the screen\n```\nThis configuration is also customised per selector, with the following defaults:\n```vim\n\\ {\n\\   'files': {},\n\\   'grep': {},\n\\   'buffers': {},\n\\   'mru': {},\n\\   'tags': {},\n\\   'highlights': {},\n\\   'cmdhistory': {\n\\     'width': 0.6,\n\\   },\n\\   'colors': {\n\\     'width': 0.25,\n\\     'xoffset': 0.7,\n\\   },\n\\     'commands': {\n\\     'width': 0.4,\n\\   },\n\\   help: {\n\\     preview_ratio': 0.6\n\\   },\n\\   'inbuffer': {},\n\\ }\n```\n\nValues set in `g:fuzzyy_window_layout` are merged with the defaults above.\nFor example, you can disable preview window for FuzzyFiles and friends with:\n```vim\nlet g:fuzzyy_window_layout = { 'files': { 'preview': 0 } }\n```\nor you change the width of the preview window for FuzzyColors with:\n```vim\nlet g:fuzzyy_window_layout = { 'colors': { 'width': 0.4 } }\n```\npreview is ignored by commands that do not support it, e.g. FuzzyCmdHistory\\\nx and y offsets are by default calculated to center the windows on the screen\\\nwidth, height, and x and y offsets \u003e 0 and \u003c 1 are resolved as percentages\\\nwidth, height, and x and y offsets \u003e= 1 are fixed numbers of lines and cols\\\ninvalid values for preview_ratio, width, height, and x and y offsets are ignored\n\n### g:fuzzyy_async_step\nFuzzyy mimics async processing to fuzzy match in batches, which avoids problems\nrunning Vim's built in fuzzy matching on massive lists at once. The size of\nthese batches is the async step value, which defaults to 10,000. This default\nshould work well for most developer workstations, but you might want to reduce\nif you notice a lack of responsiveness on low spec machines\n```vim\nlet g:fuzzyy_async_step = 10000\n```\n\n## Syntax highlighting\n\nIt is also possible to modify the colors used for highlighting. The defaults are\nshown below, you can change them in your vimrc. See :help :highlight if you are\nunfamiliar with Vim highlighting\n\n```vim\nhighlight default link fuzzyyCursor Search\nhighlight default link fuzzyyNormal Normal\nhighlight default link fuzzyyBorder Normal\nhighlight default link fuzzyyMatching Special\nhighlight default link fuzzyyPreviewMatch CurSearch\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDonaldttt%2Ffuzzyy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDonaldttt%2Ffuzzyy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDonaldttt%2Ffuzzyy/lists"}