fm-nvim
is a Neovim plugin that lets you use your favorite terminal file managers (and fuzzy finders) from within Neovim.
Extra
Keep 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.
- packer.nvim:
use {'is0n/fm-nvim'}
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"
}
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: 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
}
]
}