Lightweight and quick file operations without being a full-blown file manager. For when you prefer a fuzzy finder over a file tree, but still want some convenient file operations inside nvim.
Commands
Quality-of-life
import
statements to the
renamed file (if the LSP supports workspace/willRenameFiles
).Requirements
vim.ui.input
provider such as
dressing.nvim or
snacks.nvim for an input UI that
supports vim motions and looks much nicertrash
or gio trash
-- lazy.nvim
{ "chrisgrieser/nvim-genghis" },
-- packer
use { "chrisgrieser/nvim-genghis" }
The setup
call is required for lazy.nvim
, but otherwise optional.
-- default config
require("genghis").setup {
-- cli name, default is `trash` on Mac and Windows, and `gio trash` on Linux
trashCmd = setDefaultTrashCmd(),
-- set to empty string to disable
-- (some icons are only used for notification plugins like `snacks.nvim`)
icons = {
chmodx = "",
copyFile = "",
copyPath = "",
duplicate = "",
file = "",
move = "",
new = "",
nextFile = "",
prevFile = "",
rename = "",
trash = "",
},
navigation = {
ignoreExt = { "png", "svg", "webp", "jpg", "jpeg", "gif", "pdf", "zip" },
},
successNotifications = true,
}
You can access a command as lua function:
require("genghis").createNewFile()
Or you can use the ex command :Genghis
with the respective sub-command:
:Genghis createNewFile
.createNewFile
: Create a new file..duplicateFile
: Duplicate the current file..moveSelectionToNewFile
: Prompts for a new file name
and moves the current selection to that new file. (Visual
Line command, the selection is moved linewise.).renameFile
: Rename the current file..moveAndRenameFile
: Move and Rename the current file. Keeps the
old name if the new path ends with /
. Works like the Unix mv
command..moveToFolderInCwd
: Move the current file to an existing folder in the
current working directory..chmodx
: Makes current file executable. Equivalent to chmod +x
..trashFile
: Move the current file to the trash. Defaults to gio trash
on
Linux, and trash
on macOS or Windows. (The trash CLIs must usually be
installed.).showInSystemExplorer
: Reveals the current file in the system explorer, such
as macOS Finder. (Currently only on macOS, PRs welcome.)The following applies to all commands above:
/
, the new file is placed in the
respective subdirectory, creating any non-existing intermediate folders.import
statements to the renamed
file (if the LSP supports workspace/willRenameFiles
)..copyFilename
: Copy the file name..copyFilepath
: Copy the absolute file path..copyFilepathWithTilde
: Copy the absolute file path, replacing the home
directory with ~
..copyRelativePath
: Copy the relative file path..copyDirectoryPath
: Copy the absolute directory path..copyRelativeDirectoryPath
: Copy the relative directory path..copyFileItself
: Copies the file itself. This means you can paste it into
the browser or file manager. (Currently only on macOS, PRs welcome.)All commands use the system clipboard.
.navigateToFileInFolder("next"|"prev")
: Move to the next/previous file in the
current folder of the current file, in alphabetical order.
snacks.nvim
is installed, displays a cycling notification.A nod to vim.eunuch, an older vimscript plugin with a similar goal. As opposed to childless eunuchs, it is said that Genghis Khan has fathered thousands of children.
In my day job, I am a sociologist studying the social mechanisms underlying the digital economy. For my PhD project, I investigate the governance of the app economy and how software ecosystems manage the tension between innovation and compatibility. If you are interested in this subject, feel free to get in touch.
I also occasionally blog about vim: Nano Tips for Vim