https://github.com/is0n/fm-nvim
π Neovim plugin that lets you use your favorite terminal file managers (and fuzzy finders) from within Neovim.
https://github.com/is0n/fm-nvim
fff file-manager fm fzf fzy gitui lazygit lf lua neovim neovim-plugin nnn nvim ranger skim twf vifm xplr
Last synced: about 1 month ago
JSON representation
π Neovim plugin that lets you use your favorite terminal file managers (and fuzzy finders) from within Neovim.
- Host: GitHub
- URL: https://github.com/is0n/fm-nvim
- Owner: is0n
- License: gpl-3.0
- Created: 2021-09-26T00:48:47.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-07-24T07:31:57.000Z (9 months ago)
- Last Synced: 2024-07-31T20:45:14.767Z (9 months ago)
- Topics: fff, file-manager, fm, fzf, fzy, gitui, lazygit, lf, lua, neovim, neovim-plugin, nnn, nvim, ranger, skim, twf, vifm, xplr
- Language: Lua
- Homepage:
- Size: 1.08 MB
- Stars: 268
- Watchers: 3
- Forks: 17
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-neovim - is0n/fm-nvim - Neovim plugin that lets you use your favorite terminal file managers (and fuzzy finders). (File Explorer / PHP)
- awesome-neovim-sorted - is0n/fm-nvim
- awesome-neovim-sorted - is0n/fm-nvim
README
[](https://github.com/is0n/fm-nvim/stargazers/)
[](http://makeapullrequest.com)
[](https://github.com/is0n/fm-nvim/pulse)
[](https://github.com/is0n/fm-nvim/issues/)
[](https://github.com/is0n/fm-nvim/issues?q=is%3Aissue+is%3Aclosed)
[](https://github.com/is0n/fm-nvim/blob/master/LICENSE)
[](https://github.com/is0n/fm-nvim/search?l=lua)# fm-nvim
`fm-nvim` is a Neovim plugin that lets you use your favorite terminal file managers (and fuzzy finders) from within Neovim.
Supported File Managers
- [Lazygit](https://github.com/jesseduffield/lazygit)1
- [Joshuto](https://github.com/kamiyaa/joshuto)
- [Ranger](https://github.com/ranger/ranger)
- [Gitui](https://github.com/extrawurst/gitui)1
- [Broot](https://github.com/Canop/broot)
- [Xplr](https://github.com/sayanarijit/xplr)
- [Vifm](https://github.com/vifm/vifm)
- [Nnn](https://github.com/jarun/nnn)
- [Fff](https://github.com/dylanaraps/fff)
- [Twf](https://github.com/wvanlint/twf)
- [Lf](https://github.com/gokcehan/lf)
- [Fm](https://github.com/knipferrc/fm)Supported Fuzzy Finders
- [Skim](https://github.com/lotabout/skim)
- [Fzf](https://github.com/junegunn/fzf)
- [Fzy](https://github.com/jhawthorn/fzy)Extra
- [Neomutt](https://github.com/neomutt/neomutt)1
- [Taskwarrior-tui](https://github.com/kdheepak/taskwarrior-tui)1Keep in mind that support for fuzzy finding is quite limited and using seperate plugins would be more practical.
1. Partial Support as files cannot be opened.
## Demo and Screenshots:

Screenshots
##### [Fzf](https://github.com/junegunn/fzf)

##### [Fzy](https://github.com/jhawthorn/fzy)

##### [Skim](https://github.com/lotabout/skim)

##### [Fm](https://github.com/knipferrc/fm)

##### [Lf](https://github.com/gokcehan/lf)

##### [Twf](https://github.com/wvanlint/twf)

##### [Fff](https://github.com/dylanaraps/fff)

##### [Nnn](https://github.com/jarun/nnn)

##### [Vifm](https://github.com/vifm/vifm)

##### [Xplr](https://github.com/sayanarijit/xplr)

##### [Broot](https://github.com/Canop/broot)

##### [Ranger](https://github.com/ranger/ranger)

##### [Joshuto](https://github.com/kamiyaa/joshuto)

## Installation:
- [packer.nvim](https://github.com/wbthomason/packer.nvim):
```lua
use {'is0n/fm-nvim'}
```## Configuration:
The following configuration contains the defaults so if you find them satisfactory, there is no need to use the setup function.
```lua
require('fm-nvim').setup{
-- (Vim) Command used to open files
edit_cmd = "edit",-- See `Q&A` for more info
on_close = {},
on_open = {},-- UI Options
ui = {
-- Default UI (can be "split" or "float")
default = "float",float = {
-- Floating window border (see ':h nvim_open_win')
border = "none",-- Highlight group for floating window/border (see ':h winhl')
float_hl = "Normal",
border_hl = "FloatBorder",-- Floating Window Transparency (see ':h winblend')
blend = 0,-- Num from 0 - 1 for measurements
height = 0.8,
width = 0.8,-- X and Y Axis of Window
x = 0.5,
y = 0.5
},split = {
-- Direction of split
direction = "topleft",-- Size of split
size = 24
}
},-- Terminal commands used w/ file manager (have to be in your $PATH)
cmds = {
lf_cmd = "lf", -- eg: lf_cmd = "lf -command 'set hidden'"
fm_cmd = "fm",
nnn_cmd = "nnn",
fff_cmd = "fff",
twf_cmd = "twf",
fzf_cmd = "fzf", -- eg: fzf_cmd = "fzf --preview 'bat --style=numbers --color=always --line-range :500 {}'"
fzy_cmd = "find . | fzy",
xplr_cmd = "xplr",
vifm_cmd = "vifm",
skim_cmd = "sk",
broot_cmd = "broot",
gitui_cmd = "gitui",
ranger_cmd = "ranger",
joshuto_cmd = "joshuto",
lazygit_cmd = "lazygit",
neomutt_cmd = "neomutt",
taskwarrior_cmd = "taskwarrior-tui"
},-- Mappings used with the plugin
mappings = {
vert_split = "",
horz_split = "",
tabedit = "",
edit = "",
ESC = ""
},-- Path to broot config
broot_conf = vim.fn.stdpath("data") .. "/site/pack/packer/start/fm-nvim/assets/broot_conf.hjson"
}
```## Usage:
Any of the following commands are fine...
- Commands
- `:Neomutt`
- `:Lazygit`
- `:Joshuto`
- `:Ranger`
- `:Broot`
- `:Gitui`
- `:Xplr`
- `:Vifm`
- `:Skim`
- `:Nnn`
- `:Fff`
- `:Twf`
- `:Fzf`
- `:Fzy`
- `:Lf`
- `:Fm`
- `:TaskWarriorTUI`but you can add a directory path w/ the command (doesn't work with `skim`, `fzy`, or `fzf`).
Example:
```
:Lf ~/.config/nvim/
```## Q&A
Q: What if I want to open files in splits or tabs?
A: Use any of the default mappings (unless you've changed them)...
- `` for horizontal split
- `` for vertical split
- `` for normal edit
- `` for tabsQ: Can I run a function once exiting or entering the plugin?
A: Yes you can! Use the following code as a guide...
```lua
local function yourFunction()
-- Your code goes here
endrequire('fm-nvim').setup{
-- Runs yourFunction() upon exiting the floating window (can only be a function)
on_close = { yourFunction },-- Runs yourFunction() upon opening the floating window (can only be a function)
on_open = { yourFunction }
}
```Q: What if I want to map `` to close the window?
A: You can do this by mapping `` to whatever closes your file manager (note that this may bring up other issues). This can be done with the following code...
```lua
require('fm-nvim').setup{
mappings = {
-- Example for Vifm
ESC = ":q"
}
}
```or you could map `` to quit in your file manager...
Example for [Lf](https://github.com/gokcehan/lf):
```
map :quit
```Q: Am I able to have image previews?
A: Yes and no. Assuming you are on Linux, it is possible with the help of tools like [Γberzug](https://github.com/seebye/ueberzug). If you are on Mac or Windows, it is not possible.
Q: Can I use splits instead of a floating window
A: It's possible by changing the "default" option in the "ui" table to "split"
Q: Why isn't my `Broot` configuration working?
A: In order to support `Broot`, a custom configuration file is used, however, you can change this by modifying the `broot_conf` option to your configuration. Just be sure to include the following in your config file...
```
{
verbs: [
{
key: enter
execution: ":print_path"
apply_to: file
}
]
}
```