Home

Awesome

GitHub Stars PRs Welcome Last Commit GitHub Open Issues GitHub Closed Issues GitHub License Lua

fm-nvim

fm-nvim is a Neovim plugin that lets you use your favorite terminal file managers (and fuzzy finders) from within Neovim.

<details> <summary>Supported File Managers</summary> </details> <p> <details> <summary>Supported Fuzzy Finders</summary> </details> </p> <details> <summary>Extra</summary> </details> </p> <p>Keep in mind that support for fuzzy finding is quite limited and using seperate plugins would be more practical.</p> <p>1. Partial Support as files cannot be opened.</p>

Demo and Screenshots:

Demo

<p> <details> <summary>Screenshots</summary>
Fzf

Fzf

Fzy

Fzy

Skim

Skim

Fm

Fm

Lf

Lf

Twf

Twf

Fff

Fff

Nnn

Nnn

Vifm

Vifm

Xplr

Xplr

Broot

Broot

Ranger

Ranger

Joshuto

Joshuto

</details> </p>

Installation:

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...

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)...

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
		}
	]
}