{"id":13393342,"url":"https://github.com/junegunn/fzf","last_synced_at":"2026-05-25T07:01:53.054Z","repository":{"id":11370823,"uuid":"13807606","full_name":"junegunn/fzf","owner":"junegunn","description":":cherry_blossom: A command-line fuzzy finder","archived":false,"fork":false,"pushed_at":"2026-05-23T15:19:31.000Z","size":8107,"stargazers_count":80452,"open_issues_count":312,"forks_count":2802,"subscribers_count":393,"default_branch":"master","last_synced_at":"2026-05-23T15:21:22.161Z","etag":null,"topics":["bash","cli","fish","fzf","go","neovim","tmux","unix","vim","zsh"],"latest_commit_sha":null,"homepage":"https://junegunn.github.io/fzf/","language":"Go","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/junegunn.png","metadata":{"files":{"readme":"README-VIM.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"junegunn"}},"created_at":"2013-10-23T16:04:23.000Z","updated_at":"2026-05-23T15:19:32.000Z","dependencies_parsed_at":"2023-10-11T02:48:14.662Z","dependency_job_id":"6f0862f7-1e45-4817-9dbb-c50562197681","html_url":"https://github.com/junegunn/fzf","commit_stats":{"total_commits":2460,"total_committers":262,"mean_commits":9.389312977099237,"dds":"0.19430894308943092","last_synced_commit":"a34e8dcdc99d1509667f74a5e24a41ace172757e"},"previous_names":[],"tags_count":172,"template":false,"template_full_name":null,"purl":"pkg:github/junegunn/fzf","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junegunn%2Ffzf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junegunn%2Ffzf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junegunn%2Ffzf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junegunn%2Ffzf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/junegunn","download_url":"https://codeload.github.com/junegunn/fzf/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junegunn%2Ffzf/sbom","scorecard":{"id":228784,"data":{"date":"2025-08-11","repo":{"name":"github.com/junegunn/fzf","commit":"19a9296c47a5edab2b604abc948e666cb191c328"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.7,"checks":[{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Code-Review","score":1,"reason":"Found 4/29 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 15 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:17","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:18","Info: topLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:12","Info: topLevel 'contents' permission set to 'read': .github/workflows/depsreview.yaml:5","Info: topLevel 'contents' permission set to 'read': .github/workflows/linux.yml:12","Info: topLevel 'contents' permission set to 'read': .github/workflows/macos.yml:12","Warn: no topLevel permission defined: .github/workflows/sponsors.yml:1","Warn: no topLevel permission defined: .github/workflows/typos.yml:1","Warn: no topLevel permission defined: .github/workflows/winget.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":1,"reason":"dependency not pinned by hash detected -- score normalized to 1","details":["Info: Possibly incomplete results: error parsing shell code: a command can only contain words and redirects; encountered (: test/lib/common.sh:0","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/depsreview.yaml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/depsreview.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/depsreview.yaml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/depsreview.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/linux.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/linux.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/linux.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/linux.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/linux.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/linux.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/macos.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/macos.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/macos.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/macos.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/macos.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/macos.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sponsors.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/sponsors.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/sponsors.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/sponsors.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/sponsors.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/sponsors.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/typos.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/typos.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/typos.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/typos.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/winget.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/junegunn/fzf/winget.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating rubylang/ruby:3.4.1-noble to rubylang/ruby:3.4.1-noble@sha256:922359065b15c7176371f5bfcd81d520b20bdbcbd078d61699140181dc71ae45","Info:   0 out of  12 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   6 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned","Info:   1 out of   1 goCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.65.1 not signed: https://api.github.com/repos/junegunn/fzf/releases/237112104","Warn: release artifact v0.65.0 not signed: https://api.github.com/repos/junegunn/fzf/releases/235414172","Warn: release artifact v0.64.0 not signed: https://api.github.com/repos/junegunn/fzf/releases/230293349","Warn: release artifact v0.63.0 not signed: https://api.github.com/repos/junegunn/fzf/releases/228416119","Warn: release artifact v0.62.0 not signed: https://api.github.com/repos/junegunn/fzf/releases/216345090","Warn: release artifact v0.65.1 does not have provenance: https://api.github.com/repos/junegunn/fzf/releases/237112104","Warn: release artifact v0.65.0 does not have provenance: https://api.github.com/repos/junegunn/fzf/releases/235414172","Warn: release artifact v0.64.0 does not have provenance: https://api.github.com/repos/junegunn/fzf/releases/230293349","Warn: release artifact v0.63.0 does not have provenance: https://api.github.com/repos/junegunn/fzf/releases/228416119","Warn: release artifact v0.62.0 does not have provenance: https://api.github.com/repos/junegunn/fzf/releases/216345090"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":8,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 3 commits out of 5 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T04:24:03.887Z","repository_id":11370823,"created_at":"2025-08-17T04:24:03.887Z","updated_at":"2025-08-17T04:24:03.887Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33419556,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T22:14:44.296Z","status":"online","status_checked_at":"2026-05-24T02:00:06.296Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["bash","cli","fish","fzf","go","neovim","tmux","unix","vim","zsh"],"created_at":"2024-07-30T17:00:50.681Z","updated_at":"2026-05-25T07:01:53.048Z","avatar_url":"https://github.com/junegunn.png","language":"Go","funding_links":["https://github.com/sponsors/junegunn"],"categories":["Go","Linux Tools","Uncategorized","Bash Utilities","HarmonyOS","开源类库","Files and Directories","Frameworks","Misc","Developer Tools","Command-Line Productivity","Tools/Scripts/Code:","Command Line","CLI tools","Command Line Utilities","User Interaction","Config files","CLI","Utilities","Open source library","Interaction","Lovely Commands","[Go](#go)","Alternatives to `grep`","Weapons","Linux System Tools","\u003e 20K ⭐️","🛠️ Developer Tools","0x07. junegunn/fzf","Go (531)","Install Vundle","语言资源库","终端","Catalog","Terminal","cli","Tools","Command Line Apps","CLI 项目","Vim","公用事业公司","CLI Tools with Great Aesthetics","工具库","Awesome Tools","CLIs \u0026 Terminal Tools","Table of Contents","常用工具","Tools and Plugins","Mac 软件","Requirements","實用工具","Programming Languages","开源工具","Resources","UI Components","Repositories","go","zsh","🐧 Linux","全局搜索","\u003ca name=\"option-picker\"\u003e\u003c/a\u003eFuzzy finders and option pickers","bash","\u003ca id=\"software\"\u003e\u003c/a\u003eSoftware","Linux","编程","Fuzzy Finding","Tool","\\*nix/\\*nux","Tools \u0026 Services","tools","Command-line","Utility","File Management","Other","Languages and frameworks","实用工具","Applications","⚡ Productivity","✨ Features at a glance","Linux生态圈Dev\u0026Ops工具与服务","工具库`可以提升效率的通用代码库和工具`","Fuzzy Finding \u0026 Search","Command line - Linux","Productivity and Workflow Tools","Cli","Developer Tools | 开发者工具","\u003ca name=\"core\"\u003e\u003c/a\u003ecore","Finder","Miscellaneous Tools"],"sub_categories":["Uncategorized","Installing","Windows Manager","命令行","Search","[zplug](https://github.com/zplug/zplug)","Command Line Tools","Dependency Management","Tools","Command Line Interface","vimrc","Utility/Miscellaneous","Command Line","File \u0026 Directory Tools","Caveats","go","HTTP Clients","网络服务_其他","search","Smart Shell","\u003cb\u003e\u003ccode\u003e\u0026nbsp;\u0026nbsp;5971⭐\u003c/code\u003e\u003c/b\u003e \u003cb\u003e\u003ccode\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;229🍴\u003c/code\u003e\u003c/b\u003e [zplug](https://github.com/zplug/zplug))","Go","Other","实用程序/Miscellaneous","交流","Terminal Tools","Terminal Utilities","爬虫工具","Windows","高級控制台界面","命令行工具","Others","Command-Line Tools","Searching","shell","TUI Tool","Individual Episodes","Advanced Console UIs","Shell","高级控制台界面","Software packages","System tools","\u003cspan id=\"高级控制台用户界面-advanced-console-uis\"\u003e高级控制台用户界面 Advanced Console UIs\u003c/span\u003e","Useful Linux Tools","查询语","CLIs \u0026 Terminal Tools","Command line","Fail injection","Learning resources","CLI Tools | 命令行工具"],"readme":"FZF Vim integration\n===================\n\nInstallation\n------------\n\nOnce you have fzf installed, you can enable it inside Vim simply by adding the\ndirectory to `\u0026runtimepath` in your Vim configuration file. The path may\ndiffer depending on the package manager.\n\n```vim\n\" If installed using Homebrew\nset rtp+=/usr/local/opt/fzf\n\n\" If installed using Homebrew on Apple Silicon\nset rtp+=/opt/homebrew/opt/fzf\n\n\" If you have cloned fzf on ~/.fzf directory\nset rtp+=~/.fzf\n```\n\nIf you use [vim-plug](https://github.com/junegunn/vim-plug), the same can be\nwritten as:\n\n```vim\n\" If installed using Homebrew\nPlug '/usr/local/opt/fzf'\n\n\" If installed using Homebrew on Apple Silicon\nPlug '/opt/homebrew/opt/fzf'\n\n\" If you have cloned fzf on ~/.fzf directory\nPlug '~/.fzf'\n```\n\nBut if you want the latest Vim plugin file from GitHub rather than the one\nincluded in the package, write:\n\n```vim\nPlug 'junegunn/fzf'\n```\n\nThe Vim plugin will pick up fzf binary available on the system. If fzf is not\nfound on `$PATH`, it will ask you if it should download the latest binary for\nyou.\n\nTo make sure that you have the latest version of the binary, set up\npost-update hook like so:\n\n```vim\nPlug 'junegunn/fzf', { 'do': { -\u003e fzf#install() } }\n```\n\nSummary\n-------\n\nThe Vim plugin of fzf provides two core functions, and `:FZF` command which is\nthe basic file selector command built on top of them.\n\n1. **`fzf#run([spec dict])`**\n    - Starts fzf inside Vim with the given spec\n    - `:call fzf#run({'source': 'ls'})`\n2. **`fzf#wrap([spec dict]) -\u003e (dict)`**\n    - Takes a spec for `fzf#run` and returns an extended version of it with\n      additional options for addressing global preferences (`g:fzf_xxx`)\n        - `:echo fzf#wrap({'source': 'ls'})`\n    - We usually *wrap* a spec with `fzf#wrap` before passing it to `fzf#run`\n        - `:call fzf#run(fzf#wrap({'source': 'ls'}))`\n3. **`:FZF [fzf_options string] [path string]`**\n    - Basic fuzzy file selector\n    - A reference implementation for those who don't want to write VimScript\n      to implement custom commands\n    - If you're looking for more such commands, check out [fzf.vim](https://github.com/junegunn/fzf.vim) project.\n\nThe most important of all is `fzf#run`, but it would be easier to understand\nthe whole if we start off with `:FZF` command.\n\n`:FZF[!]`\n---------\n\n```vim\n\" Look for files under current directory\n:FZF\n\n\" Look for files under your home directory\n:FZF ~\n\n\" With fzf command-line options\n:FZF --reverse --info=inline /tmp\n\n\" Bang version starts fzf in fullscreen mode\n:FZF!\n```\n\nSimilarly to [ctrlp.vim](https://github.com/kien/ctrlp.vim), use enter key,\n`CTRL-T`, `CTRL-X` or `CTRL-V` to open selected files in the current window,\nin new tabs, in horizontal splits, or in vertical splits respectively.\n\nNote that the environment variables `FZF_DEFAULT_COMMAND` and\n`FZF_DEFAULT_OPTS` also apply here.\n\n### Configuration\n\n- `g:fzf_action`\n    - Customizable extra key bindings for opening selected files in different ways\n- `g:fzf_layout`\n    - Determines the size and position of fzf window\n- `g:fzf_colors`\n    - Customizes fzf colors to match the current color scheme\n- `g:fzf_history_dir`\n    - Enables history feature\n\n#### Examples\n\n```vim\n\" This is the default extra key bindings\nlet g:fzf_action = {\n  \\ 'ctrl-t': 'tab split',\n  \\ 'ctrl-x': 'split',\n  \\ 'ctrl-v': 'vsplit' }\n\n\" An action can be a reference to a function that processes selected lines\nfunction! s:build_quickfix_list(lines)\n  call setqflist(map(copy(a:lines), '{ \"filename\": v:val, \"lnum\": 1 }'))\n  copen\n  cc\nendfunction\n\nlet g:fzf_action = {\n  \\ 'ctrl-q': function('s:build_quickfix_list'),\n  \\ 'ctrl-t': 'tab split',\n  \\ 'ctrl-x': 'split',\n  \\ 'ctrl-v': 'vsplit' }\n\n\" Default fzf layout\n\" - Popup window (center of the screen)\nlet g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } }\n\n\" - Popup window (center of the current window)\nlet g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6, 'relative': v:true } }\n\n\" - Popup window (anchored to the bottom of the current window)\nlet g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6, 'relative': v:true, 'yoffset': 1.0 } }\n\n\" - down / up / left / right\nlet g:fzf_layout = { 'down': '40%' }\n\n\" - Window using a Vim command\nlet g:fzf_layout = { 'window': 'enew' }\nlet g:fzf_layout = { 'window': '-tabnew' }\nlet g:fzf_layout = { 'window': '10new' }\n\n\" Customize fzf colors to match your color scheme\n\" - fzf#wrap translates this to a set of `--color` options\nlet g:fzf_colors =\n\\ { 'fg':      ['fg', 'Normal'],\n  \\ 'bg':      ['bg', 'Normal'],\n  \\ 'query':   ['fg', 'Normal'],\n  \\ 'hl':      ['fg', 'Comment'],\n  \\ 'fg+':     ['fg', 'CursorLine', 'CursorColumn', 'Normal'],\n  \\ 'bg+':     ['bg', 'CursorLine', 'CursorColumn'],\n  \\ 'hl+':     ['fg', 'Statement'],\n  \\ 'info':    ['fg', 'PreProc'],\n  \\ 'border':  ['fg', 'Ignore'],\n  \\ 'prompt':  ['fg', 'Conditional'],\n  \\ 'pointer': ['fg', 'Exception'],\n  \\ 'marker':  ['fg', 'Keyword'],\n  \\ 'spinner': ['fg', 'Label'],\n  \\ 'header':  ['fg', 'Comment'] }\n\n\" Enable per-command history\n\" - History files will be stored in the specified directory\n\" - When set, CTRL-N and CTRL-P will be bound to 'next-history' and\n\"   'previous-history' instead of 'down' and 'up'.\nlet g:fzf_history_dir = '~/.local/share/fzf-history'\n```\n\n##### Explanation of `g:fzf_colors`\n\n`g:fzf_colors` is a dictionary mapping fzf elements to a color specification\nlist:\n\n    element: [ component, group1 [, group2, ...] ]\n\n- `element` is an fzf element to apply a color to:\n\n  | Element                     | Description                                           |\n  | ---                         | ---                                                   |\n  | `fg`  / `bg`  / `hl`        | Item (foreground / background / highlight)            |\n  | `fg+` / `bg+` / `hl+`       | Current item (foreground / background / highlight)    |\n  | `preview-fg` / `preview-bg` | Preview window text and background                    |\n  | `hl`  / `hl+`               | Highlighted substrings (normal / current)             |\n  | `gutter`                    | Background of the gutter on the left                  |\n  | `pointer`                   | Pointer to the current line (`\u003e`)                     |\n  | `marker`                    | Multi-select marker (`\u003e`)                             |\n  | `border`                    | Border around the window (`--border` and `--preview`) |\n  | `header`                    | Header (`--header` or `--header-lines`)               |\n  | `info`                      | Info line (match counters)                            |\n  | `spinner`                   | Streaming input indicator                             |\n  | `query`                     | Query string                                          |\n  | `disabled`                  | Query string when search is disabled                  |\n  | `prompt`                    | Prompt before query (`\u003e `)                            |\n  | `pointer`                   | Pointer to the current line (`\u003e`)                     |\n\n- `component` specifies the component (`fg` / `bg`) from which to extract the\n  color when considering each of the following highlight groups\n\n- `group1 [, group2, ...]` is a list of highlight groups that are searched (in\n  order) for a matching color definition\n\nFor example, consider the following specification:\n\n```vim\n  'prompt':  ['fg', 'Conditional', 'Comment'],\n```\n\nThis means we color the **prompt**\n- using the `fg` attribute of the `Conditional` if it exists,\n- otherwise use the `fg` attribute of the `Comment` highlight group if it exists,\n- otherwise fall back to the default color settings for the **prompt**.\n\nYou can examine the color option generated according the setting by printing\nthe result of `fzf#wrap()` function like so:\n\n```vim\n:echo fzf#wrap()\n```\n\n`fzf#run`\n---------\n\n`fzf#run()` function is the core of Vim integration. It takes a single\ndictionary argument, *a spec*, and starts fzf process accordingly. At the very\nleast, specify `sink` option to tell what it should do with the selected\nentry.\n\n```vim\ncall fzf#run({'sink': 'e'})\n```\n\nWe haven't specified the `source`, so this is equivalent to starting fzf on\ncommand line without standard input pipe; fzf will traverse the file system\nunder the current directory to get the list of files. (If\n`$FZF_DEFAULT_COMMAND` is set, fzf will use the output of the command\ninstead.) When you select one, it will open it with the sink, `:e` command. If\nyou want to open it in a new tab, you can pass `:tabedit` command instead as\nthe sink.\n\n```vim\ncall fzf#run({'sink': 'tabedit'})\n```\n\nYou can use any shell command as the source to generate the list. The\nfollowing example will list the files managed by git. It's equivalent to\nrunning `git ls-files | fzf` on shell.\n\n```vim\ncall fzf#run({'source': 'git ls-files', 'sink': 'e'})\n```\n\nfzf options can be specified as `options` entry in spec dictionary.\n\n```vim\ncall fzf#run({'sink': 'tabedit', 'options': '--multi --reverse'})\n```\n\nYou can also pass a layout option if you don't want fzf window to take up the\nentire screen.\n\n```vim\n\" up / down / left / right / window are allowed\ncall fzf#run({'source': 'git ls-files', 'sink': 'e', 'left': '40%'})\ncall fzf#run({'source': 'git ls-files', 'sink': 'e', 'window': '30vnew'})\n```\n\n`source` doesn't have to be an external shell command, you can pass a Vim\narray as the source. In the next example, we pass the names of color\nschemes as the source to implement a color scheme selector.\n\n```vim\ncall fzf#run({'source': map(split(globpath(\u0026rtp, 'colors/*.vim')),\n            \\               'fnamemodify(v:val, \":t:r\")'),\n            \\ 'sink': 'colo', 'left': '25%'})\n```\n\nThe following table summarizes the available options.\n\n| Option name                | Type          | Description                                                           |\n| -------------------------- | ------------- | ----------------------------------------------------------------      |\n| `source`                   | string        | External command to generate input to fzf (e.g. `find .`)             |\n| `source`                   | list          | Vim list as input to fzf                                              |\n| `sink`                     | string        | Vim command to handle the selected item (e.g. `e`, `tabe`)            |\n| `sink`                     | funcref       | Function to be called with each selected item                         |\n| `sinklist` (or `sink*`)    | funcref       | Similar to `sink`, but takes the list of output lines at once         |\n| `exit`                     | funcref       | Function to be called with the exit status of fzf (e.g. 0, 1, 2, 130) |\n| `options`                  | string/list   | Options to fzf                                                        |\n| `dir`                      | string        | Working directory                                                     |\n| `up`/`down`/`left`/`right` | number/string | (Layout) Window position and size (e.g. `20`, `50%`)                  |\n| `tmux`                     | string        | (Layout) `--tmux` options (e.g. `90%,70%`)                            |\n| `window` (Vim 8 / Neovim)  | string        | (Layout) Command to open fzf window (e.g. `vertical aboveleft 30new`) |\n| `window` (Vim 8 / Neovim)  | dict          | (Layout) Popup window settings (e.g. `{'width': 0.9, 'height': 0.6}`) |\n\n`options` entry can be either a string or a list. For simple cases, string\nshould suffice, but prefer to use list type to avoid escaping issues.\n\n```vim\ncall fzf#run({'options': '--reverse --prompt \"C:\\\\Program Files\\\\\"'})\ncall fzf#run({'options': ['--reverse', '--prompt', 'C:\\Program Files\\']})\n```\n\nWhen `window` entry is a dictionary, fzf will start in a popup window. The\nfollowing options are allowed:\n\n- Required:\n    - `width` [float range [0 ~ 1]] or [integer range [8 ~ ]]\n    - `height` [float range [0 ~ 1]] or [integer range [4 ~ ]]\n- Optional:\n    - `yoffset` [float default 0.5 range [0 ~ 1]]\n    - `xoffset` [float default 0.5 range [0 ~ 1]]\n    - `relative` [boolean default v:false]\n    - `border` [string default `rounded` (`sharp` on Windows)]: Border style\n        - `rounded` / `sharp` / `horizontal` / `vertical` / `top` / `bottom` / `left` / `right` / `no[ne]`\n\n`fzf#wrap`\n----------\n\nWe have seen that several aspects of `:FZF` command can be configured with\na set of global option variables; different ways to open files\n(`g:fzf_action`), window position and size (`g:fzf_layout`), color palette\n(`g:fzf_colors`), etc.\n\nSo how can we make our custom `fzf#run` calls also respect those variables?\nSimply by *\"wrapping\"* the spec dictionary with `fzf#wrap` before passing it\nto `fzf#run`.\n\n- **`fzf#wrap([name string], [spec dict], [fullscreen bool]) -\u003e (dict)`**\n    - All arguments are optional. Usually we only need to pass a spec dictionary.\n    - `name` is for managing history files. It is ignored if\n      `g:fzf_history_dir` is not defined.\n    - `fullscreen` can be either `0` or `1` (default: 0).\n\n`fzf#wrap` takes a spec and returns an extended version of it (also\na dictionary) with additional options for addressing global preferences. You\ncan examine the return value of it like so:\n\n```vim\necho fzf#wrap({'source': 'ls'})\n```\n\nAfter we *\"wrap\"* our spec, we pass it to `fzf#run`.\n\n```vim\ncall fzf#run(fzf#wrap({'source': 'ls'}))\n```\n\nNow it supports `CTRL-T`, `CTRL-V`, and `CTRL-X` key bindings (configurable\nvia `g:fzf_action`) and it opens fzf window according to `g:fzf_layout`\nsetting.\n\nTo make it easier to use, let's define `LS` command.\n\n```vim\ncommand! LS call fzf#run(fzf#wrap({'source': 'ls'}))\n```\n\nType `:LS` and see how it works.\n\nWe would like to make `:LS!` (bang version) open fzf in fullscreen, just like\n`:FZF!`. Add `-bang` to command definition, and use `\u003cbang\u003e` value to set\nthe last `fullscreen` argument of `fzf#wrap` (see `:help \u003cbang\u003e`).\n\n```vim\n\" On :LS!, \u003cbang\u003e evaluates to '!', and '!0' becomes 1\ncommand! -bang LS call fzf#run(fzf#wrap({'source': 'ls'}, \u003cbang\u003e0))\n```\n\nOur `:LS` command will be much more useful if we can pass a directory argument\nto it, so that something like `:LS /tmp` is possible.\n\n```vim\ncommand! -bang -complete=dir -nargs=? LS\n    \\ call fzf#run(fzf#wrap({'source': 'ls', 'dir': \u003cq-args\u003e}, \u003cbang\u003e0))\n```\n\nLastly, if you have enabled `g:fzf_history_dir`, you might want to assign\na unique name to our command and pass it as the first argument to `fzf#wrap`.\n\n```vim\n\" The query history for this command will be stored as 'ls' inside g:fzf_history_dir.\n\" The name is ignored if g:fzf_history_dir is not defined.\ncommand! -bang -complete=dir -nargs=? LS\n    \\ call fzf#run(fzf#wrap('ls', {'source': 'ls', 'dir': \u003cq-args\u003e}, \u003cbang\u003e0))\n```\n\n### Global options supported by `fzf#wrap`\n\n- `g:fzf_layout`\n- `g:fzf_action`\n    - **Works only when no custom `sink` (or `sinklist`) is provided**\n        - Having custom sink usually means that each entry is not an ordinary\n          file path (e.g. name of color scheme), so we can't blindly apply the\n          same strategy (i.e. `tabedit some-color-scheme` doesn't make sense)\n- `g:fzf_colors`\n- `g:fzf_history_dir`\n\nTips\n----\n\n### fzf inside terminal buffer\n\nOn the latest versions of Vim and Neovim, fzf will start in a terminal buffer.\nIf you find the default ANSI colors to be different, consider configuring the\ncolors using `g:terminal_ansi_colors` in regular Vim or `g:terminal_color_x`\nin Neovim.\n\n```vim\n\" Terminal colors for seoul256 color scheme\nif has('nvim')\n  let g:terminal_color_0 = '#4e4e4e'\n  let g:terminal_color_1 = '#d68787'\n  let g:terminal_color_2 = '#5f865f'\n  let g:terminal_color_3 = '#d8af5f'\n  let g:terminal_color_4 = '#85add4'\n  let g:terminal_color_5 = '#d7afaf'\n  let g:terminal_color_6 = '#87afaf'\n  let g:terminal_color_7 = '#d0d0d0'\n  let g:terminal_color_8 = '#626262'\n  let g:terminal_color_9 = '#d75f87'\n  let g:terminal_color_10 = '#87af87'\n  let g:terminal_color_11 = '#ffd787'\n  let g:terminal_color_12 = '#add4fb'\n  let g:terminal_color_13 = '#ffafaf'\n  let g:terminal_color_14 = '#87d7d7'\n  let g:terminal_color_15 = '#e4e4e4'\nelse\n  let g:terminal_ansi_colors = [\n    \\ '#4e4e4e', '#d68787', '#5f865f', '#d8af5f',\n    \\ '#85add4', '#d7afaf', '#87afaf', '#d0d0d0',\n    \\ '#626262', '#d75f87', '#87af87', '#ffd787',\n    \\ '#add4fb', '#ffafaf', '#87d7d7', '#e4e4e4'\n  \\ ]\nendif\n```\n\n### Starting fzf in a popup window\n\n```vim\n\" Required:\n\" - width [float range [0 ~ 1]] or [integer range [8 ~ ]]\n\" - height [float range [0 ~ 1]] or [integer range [4 ~ ]]\n\"\n\" Optional:\n\" - xoffset [float default 0.5 range [0 ~ 1]]\n\" - yoffset [float default 0.5 range [0 ~ 1]]\n\" - relative [boolean default v:false]\n\" - border [string default 'rounded']: Border style\n\"   - 'rounded' / 'sharp' / 'horizontal' / 'vertical' / 'top' / 'bottom' / 'left' / 'right'\nlet g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } }\n```\n\nAlternatively, you can make fzf open in a tmux popup window (requires tmux 3.2\nor above) by putting `--tmux` option value in `tmux` key.\n\n```vim\n\" See `--tmux` option in `man fzf` for available options\n\" [center|top|bottom|left|right][,SIZE[%]][,SIZE[%]]\nif exists('$TMUX')\n  let g:fzf_layout = { 'tmux': '90%,70%' }\nelse\n  let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } }\nendif\n```\n\n### Hide statusline\n\nWhen fzf starts in a terminal buffer, the file type of the buffer is set to\n`fzf`. So you can set up `FileType fzf` autocmd to customize the settings of\nthe window.\n\nFor example, if you open fzf on the bottom on the screen (e.g. `{'down':\n'40%'}`), you might want to temporarily disable the statusline for a cleaner\nlook.\n\n```vim\nlet g:fzf_layout = { 'down': '30%' }\nautocmd! FileType fzf\nautocmd  FileType fzf set laststatus=0 noshowmode noruler\n  \\| autocmd BufLeave \u003cbuffer\u003e set laststatus=2 showmode ruler\n```\n\n[License](LICENSE)\n------------------\n\nThe MIT License (MIT)\n\nCopyright (c) 2013-2026 Junegunn Choi\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjunegunn%2Ffzf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjunegunn%2Ffzf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjunegunn%2Ffzf/lists"}