Awesome
fm-nvim
fm-nvim
is a Neovim plugin that lets you use your favorite terminal file managers (and fuzzy finders) from within Neovim.
- Neomutt<sup>1</sup>
- Taskwarrior-tui<sup>1</sup>
Demo and Screenshots:
<p> <details> <summary>Screenshots</summary>Fzf
Fzy
Skim
Fm
Lf
Twf
Fff
Nnn
Vifm
Xplr
Broot
Ranger
Joshuto
</details> </p>Installation:
- packer.nvim:
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.
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 = "<C-v>",
horz_split = "<C-h>",
tabedit = "<C-t>",
edit = "<C-e>",
ESC = "<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)...
<C-h>
for horizontal split<C-v>
for vertical split<C-e>
for normal edit<C-t>
for tabs
Q: Can I run a function once exiting or entering the plugin?
A: Yes you can! Use the following code as a guide...
local function yourFunction()
-- Your code goes here
end
require('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 <ESC>
to close the window?
A: You can do this by mapping <ESC>
to whatever closes your file manager (note that this may bring up other issues). This can be done with the following code...
require('fm-nvim').setup{
mappings = {
-- Example for Vifm
ESC = ":q<CR>"
}
}
or you could map <ESC>
to quit in your file manager...
Example for Lf:
map <esc> :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. 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
}
]
}