{"id":13479690,"url":"https://github.com/lambdalisue/vim-fern","last_synced_at":"2025-05-14T15:09:13.315Z","repository":{"id":37987854,"uuid":"158129350","full_name":"lambdalisue/vim-fern","owner":"lambdalisue","description":"🌿 General purpose asynchronous tree viewer written in Pure Vim script","archived":false,"fork":false,"pushed_at":"2025-04-11T06:53:05.000Z","size":1513,"stargazers_count":1315,"open_issues_count":22,"forks_count":49,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-04-12T20:43:47.507Z","etag":null,"topics":["async","cross-platform","drawer","file-explorer","filer","linux","mac","neovim","tree","viewer","vim","windows"],"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/lambdalisue.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,"zenodo":null},"funding":{"github":"lambdalisue"}},"created_at":"2018-11-18T21:36:34.000Z","updated_at":"2025-04-12T11:58:59.000Z","dependencies_parsed_at":"2024-12-20T02:02:42.405Z","dependency_job_id":"7dfb5515-e752-4971-9f97-9e5fc043127a","html_url":"https://github.com/lambdalisue/vim-fern","commit_stats":{"total_commits":698,"total_committers":30,"mean_commits":"23.266666666666666","dds":"0.11031518624641834","last_synced_commit":"56f7c0dafb94dc9161f0edf67f88ada99b96de81"},"previous_names":["lambdalisue/vim-fern","lambdalisue/fern.vim"],"tags_count":153,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lambdalisue%2Fvim-fern","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lambdalisue%2Fvim-fern/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lambdalisue%2Fvim-fern/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lambdalisue%2Fvim-fern/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lambdalisue","download_url":"https://codeload.github.com/lambdalisue/vim-fern/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254169971,"owners_count":22026217,"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":["async","cross-platform","drawer","file-explorer","filer","linux","mac","neovim","tree","viewer","vim","windows"],"created_at":"2024-07-31T16:02:21.465Z","updated_at":"2025-05-14T15:09:13.278Z","avatar_url":"https://github.com/lambdalisue.png","language":"Vim Script","readme":"# 🌿 vim-fern\n\n![Support Vim 8.2.5136 or above](https://img.shields.io/badge/support-Vim%208.2.5136%20or%20above-yellowgreen.svg)\n![Support Neovim 0.4.4 or above](https://img.shields.io/badge/support-Neovim%200.4.4%20or%20above-yellowgreen.svg)\n[![Powered by vital.vim](https://img.shields.io/badge/powered%20by-vital.vim-80273f.svg)](https://github.com/vim-jp/vital.vim)\n[![Powered by vital-Whisky](https://img.shields.io/badge/powered%20by-vital--Whisky-80273f.svg)](https://github.com/lambdalisue/vital-Whisky)\n[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n[![Doc](https://img.shields.io/badge/doc-%3Ah%20fern-orange.svg)](doc/fern.txt)\n[![Doc (dev)](https://img.shields.io/badge/doc-%3Ah%20fern--develop-orange.svg)](doc/fern-develop.txt)\n[![reviewdog](https://github.com/lambdalisue/vim-fern/actions/workflows/reviewdog.yml/badge.svg)](https://github.com/lambdalisue/vim-fern/actions/workflows/reviewdog.yml)\n[![Vim](https://github.com/lambdalisue/vim-fern/actions/workflows/vim.yml/badge.svg)](https://github.com/lambdalisue/vim-fern/actions/workflows/vim.yml)\n[![Neovim](https://github.com/lambdalisue/vim-fern/actions/workflows/neovim.yml/badge.svg)](https://github.com/lambdalisue/vim-fern/actions/workflows/neovim.yml)\n\n\u003cp align=\"center\"\u003e\n\u003cstrong\u003eSplit windows (netrw style)\u003c/strong\u003e\u003cbr\u003e\n\u003csup\u003e\n\u003ca href=\"https://github.com/lambdalisue/nerdfont.vim\" target=\"_blank\"\u003enerdfont.vim\u003c/a\u003e\n/\n\u003ca href=\"https://github.com/lambdalisue/glyph-palette.vim\" target=\"_blank\"\u003eglyph-palette.vim\u003c/a\u003e\n/\n\u003ca href=\"https://github.com/lambdalisue/fern-renderer-nerdfont.vim\" target=\"_blank\"\u003efern-renderer-nerdfont.vim\u003c/a\u003e\n/\n\u003ca href=\"https://github.com/lambdalisue/fern-git-status.vim\" target=\"_blank\"\u003efern-git-status.vim\u003c/a\u003e\n\u003c/sup\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/546312/90719223-cdbc8780-e2ee-11ea-8a6e-ea837a194ffa.png\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\u003cstrong\u003eProject drawer (NERDTree style)\u003c/strong\u003e\u003cbr\u003e\n\u003csup\u003e\n\u003ca href=\"https://github.com/lambdalisue/nerdfont.vim\" target=\"_blank\"\u003enerdfont.vim\u003c/a\u003e\n/\n\u003ca href=\"https://github.com/lambdalisue/glyph-palette.vim\" target=\"_blank\"\u003eglyph-palette.vim\u003c/a\u003e\n/\n\u003ca href=\"https://github.com/lambdalisue/fern-renderer-nerdfont.vim\" target=\"_blank\"\u003efern-renderer-nerdfont.vim\u003c/a\u003e\n/\n\u003ca href=\"https://github.com/lambdalisue/fern-git-status.vim\" target=\"_blank\"\u003efern-git-status.vim\u003c/a\u003e\n\u003c/sup\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/546312/90719227-ceedb480-e2ee-11ea-98c5-0b7cbcb1bb6a.png\"\u003e\n\u003c/p\u003e\n\u003cp align=\"right\"\u003e\n\u003csup\u003e\nSee \u003ca href=\"https://github.com/lambdalisue/vim-fern/wiki/Screenshots\" target=\"_blank\"\u003eScreenshots\u003c/a\u003e for more screenshots.\n\u003c/sup\u003e\n\u003c/p\u003e\n\nFern ([furn](https://www.youtube.com/watch?v=SSYgr-_69mg)) is a general purpose\nasynchronous tree viewer written in pure Vim script.\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003e🔍 \u003ca href=\"https://github.com/topics/fern-vim-plugin\"\u003eClick here to find fern plugins\u003c/a\u003e 🔍\u003c/strong\u003e\n\u003c/p\u003e\n\n---\n\n## Concept\n\n- Supports both Vim and Neovim without any external dependencies\n- Support _split windows_ and _project drawer_ explained in\n  [this article](http://vimcasts.org/blog/2013/01/oil-and-vinegar-split-windows-and-project-drawer/)\n- Provide features as actions so that user don't have to remember mappings\n- Make operation asynchronous as much as possible to keep latency\n- User experience is more important than simplicity (maintainability)\n- Customizability is less important than simplicity (maintainability)\n- Easy to create 3rd party plugins to support any kind of trees\n\n## Installation\n\nvim-fern has no extra dependencies so use your favorite Vim plugin manager or\nsee\n[How to install](https://github.com/lambdalisue/vim-fern/wiki#how-to-install)\npage for detail.\n\n- If you use Neovim \u003c 0.8, you **SHOULD** add\n  [antoinemadec/FixCursorHold.nvim](https://github.com/antoinemadec/FixCursorHold.nvim)\n  (See [#120](https://github.com/lambdalisue/vim-fern/issues/120))\n\n## Usage\n\n### Command (Split windows)\n\n![Screencast of Split windows](https://user-images.githubusercontent.com/546312/73183457-29120700-415e-11ea-8d04-cb959659e369.gif)\n\nOpen fern on a current working directory by:\n\n```vim\n:Fern .\n```\n\nOr open fern on a parent directory of a current buffer by:\n\n```vim\n:Fern %:h\n```\n\nOr open fern on a current working directory with a current buffer focused by:\n\n```vim\n:Fern . -reveal=%\n```\n\n![](https://user-images.githubusercontent.com/546312/90720134-f3e32700-e2f0-11ea-82f7-c86512ad5854.png)\n\nThe following options are available for fern viewer.\n\n| Option    | Default | Description                                                                         |\n| --------- | ------- | ----------------------------------------------------------------------------------- |\n| `-opener` | `edit`  | An opener to open the buffer. See `:help fern-opener` for detail.                   |\n| `-reveal` |         | Recursively expand branches and focus the node. See `:help fern-reveal` for detail. |\n| `-stay`   |         | Stay focus on the window where the command has called.                              |\n| `-wait`   |         | Wait synchronously until the fern viewer become ready.                              |\n\n```\n:Fern {url} [-opener={opener}] [-reveal={reveal}] [-stay] [-wait]\n```\n\n### Command (Project drawer)\n\n![Screencast of Project drawer](https://user-images.githubusercontent.com/546312/73184080-324fa380-415f-11ea-8280-e0b6c7a9989f.gif)\n\nAll usage above open fern as [_split windows style_][*split windows style*]. To\nopen fern as [_project drawer style_][*project drawer style*], use `-drawer`\noption like:\n\n```vim\n:Fern . -drawer\n```\n\nA fern window with _project drawer_ style always appeared to the most left side\nof Vim and behaviors of some mappings/actions are slightly modified (e.g. a\nbuffer in the next window will be used as an anchor buffer in a project drawer\nstyle to open a new buffer.)\n\nNote that additional to the all options available for _split windows_ style,\n_project drawer_ style enables the following options:\n\n| Option    | Default | Description                                                      |\n| --------- | ------- | ---------------------------------------------------------------- |\n| `-width`  | `30`    | The width of the project drawer window                           |\n| `-keep`   |         | Disable to quit Vim when there is only one project drawer buffer |\n| `-toggle` |         | Close existing project drawer rather than focus                  |\n\n```\n:Fern {url} -drawer [-opener={opener}] [-reveal={reveal}] [-stay] [-wait] [-width=30] [-keep] [-toggle]\n```\n\n[*split windows style*]: http://vimcasts.org/blog/2013/01/oil-and-vinegar-split-windows-and-project-drawer/\n[*project drawer style*]: http://vimcasts.org/blog/2013/01/oil-and-vinegar-split-windows-and-project-drawer/\n\n### Actions\n\nTo execute actions, hit `a` on a fern buffer and input an action to perform. To\nsee all actions available, hit `?` or execute `help` action then all available\nactions will be listed.\n\n![Actions](https://user-images.githubusercontent.com/546312/73184453-c91c6000-415f-11ea-8e6b-f1df4b9284de.gif)\n\n### Window selector\n\nThe `open:select` action open a prompt to visually select window to open a node.\nThis feature is strongly inspired by [t9md/vim-choosewin][t9md/vim-choosewin].\n\n![Window selector](https://user-images.githubusercontent.com/546312/73605707-090e9780-45e5-11ea-864a-457dd785f1c4.gif)\n\n[t9md/vim-choosewin]: https://github.com/t9md/vim-choosewin\n\n### Renamer action (A.k.a exrename)\n\nThe `rename` action open a new buffer with path of selected nodes. Users can\nedit that buffer and `:w` applies the changes. This feature is strongly inspired\nby [shougo/vimfiler.vim][shougo/vimfiler.vim].\n\n![Renamer](https://user-images.githubusercontent.com/546312/73184814-5d86c280-4160-11ea-9ed1-d5a8d66d1774.gif)\n\n[shougo/vimfiler.vim]: https://github.com/Shougo/vimfiler.vim\n\n# Plugins\n\n## Users\n\nMost of functionalities are provided as plugins in fern. So visit\n[Github topics of `fern-vim-plugin`](https://github.com/topics/fern-vim-plugin)\nor [Plugins](https://github.com/lambdalisue/vim-fern/wiki/Plugins) page to find\nfern plugins to satisfy your wants.\n\nFor example, following features are provided as official plugins\n\n- Netrw hijack (Use fern as a default file explorer)\n- [Nerd Fonts](https://www.nerdfonts.com/) integration\n- Git integration (show status, touch index, ...)\n- Bookmark feature\n\nAnd lot more!\n\n## Developers\n\nPlease add `fern-vim-plugin` topic to your fern plugin. The topic is used to\nlist up 3rd party fern plugins.\n![](https://user-images.githubusercontent.com/546312/94343538-d160ce00-0053-11eb-9ec6-0dd2a4c3f4b0.png)\n\nThen please add a following badge to indicate that your plugin is for fern.\n\n```\n[![fern plugin](https://img.shields.io/badge/🌿%20fern-plugin-yellowgreen)](https://github.com/lambdalisue/vim-fern)\n```\n\n## Customize\n\nUse `FileType fern` autocmd to execute initialization scripts for fern buffer\nlike:\n\n```vim\nfunction! s:init_fern() abort\n  \" Use 'select' instead of 'edit' for default 'open' action\n  nmap \u003cbuffer\u003e \u003cPlug\u003e(fern-action-open) \u003cPlug\u003e(fern-action-open:select)\nendfunction\n\naugroup fern-custom\n  autocmd! *\n  autocmd FileType fern call s:init_fern()\naugroup END\n```\n\nThe `FileType` autocmd will be invoked AFTER a fern buffer has initialized but\nBEFORE contents of a buffer become ready. So avoid accessing actual contents in\nthe above function.\n\nSee [Tips](https://github.com/lambdalisue/vim-fern/wiki/Tips) pages to find\ntips, or write pages to share your tips ;-)\n\n# Contribution\n\nAny contribution including documentations are welcome.\n\nContributors who change codes should install\n[thinca/vim-themis][thinca/vim-themis] to run tests before complete a PR. PRs\nwhich does not pass tests won't be accepted.\n\n[thinca/vim-themis]: https://github.com/thinca/vim-themis\n\n# License\n\nThe code in vim-fern follows MIT license texted in [LICENSE](./LICENSE).\nContributors need to agree that any modifications sent in this repository follow\nthe license.\n","funding_links":["https://github.com/sponsors/lambdalisue"],"categories":["Vim Script"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flambdalisue%2Fvim-fern","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flambdalisue%2Fvim-fern","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flambdalisue%2Fvim-fern/lists"}