Lightweight and quick file operations without being a full-blown file manager.
vim.eunuch
?import
statements to the renamed
file (if the LSP supports workspace/willRenameFiles
).vim.ui.input
.-- Packer
use {"chrisgrieser/nvim-genghis", requires = "stevearc/dressing.nvim"}
-- Lazy
{"chrisgrieser/nvim-genghis", dependencies = "stevearc/dressing.nvim"},
nvim-genghis
(and dressing.nvim
) require no .setup()
function. Just create
keybindings for the commands you want to use:
local keymap = vim.keymap.set
local genghis = require("genghis")
keymap("n", "<leader>yp", genghis.copyFilepath)
keymap("n", "<leader>yn", genghis.copyFilename)
keymap("n", "<leader>cx", genghis.chmodx)
keymap("n", "<leader>rf", genghis.renameFile)
keymap("n", "<leader>mf", genghis.moveAndRenameFile)
keymap("n", "<leader>mc", genghis.moveToFolderInCwd)
keymap("n", "<leader>nf", genghis.createNewFile)
keymap("n", "<leader>yf", genghis.duplicateFile)
keymap("n", "<leader>df", genghis.trashFile)
keymap("x", "<leader>x", genghis.moveSelectionToNewFile)
.createNewFile
or :New
: Create a new file..duplicateFile
or :Duplicate
: Duplicate the current file..moveSelectionToNewFile
or :NewFromSelection
: Prompts for a new file name
and moves the current selection to that new file. (Note that this is a Visual
Line Mode command; the selection is moved linewise.).renameFile
or :Rename
: Rename the current file..moveAndRenameFile
or :Move
: Move and Rename the current file. Keeps the
old name if the new path ends with /
. Works like the UNIX mv
command..moveToFolderInCwd
or :MoveToFolderInCwd
: Move the current file to an
existing folder in the current working directory. Can use telescope for the
selection of the destination.The following applies to all commands above:
/
, the new file is placed in the
respective subdirectory, creating any non-existing folders.import
statements to the renamed
file (if the LSP supports workspace/willRenameFiles
)..chmodx
or :Chmodx
: Makes current file executable. Equivalent to chmod +x
..trashFile{trashCmd = "your_cli"}
or :Trash
: Move the current file
to the trash location.gio trash
on Linux, trash
on Mac and Windows.require'bufdelete.nvim'.bufwipeout
would be used to keep window layout
intact instead of vim.cmd.bwipeout
.[!NOTE] The trash CLIs are not available by default, and must be installed.
.copyFilename
or :CopyFilename
: Copy the file name..copyFilepath
or :CopyFilepath
: Copy the absolute file path..copyFilepathWithTilde
or :CopyFilepathWithTilde
: Copy the absolute file
path, replacing the home directory with ~
..copyRelativePath
or :CopyRelativePath
: Copy the relative file path..copyDirectoryPath
or :CopyDirectoryPath
: Copy the absolute directory
path..copyRelativeDirectoryPath
or :CopyRelativeDirectoryPath
: Copy the
relative directory path.When clipboard="unnamed[plus]"
has been set, copies to the +
register,
otherwise to "
. To always use system clipboard, put this in your configuration
file:
vim.g.genghis_use_systemclipboard = true
vim.g.genghis_disable_commands = true
.moveToFolderInCwd
require("dressing").setup {
select = {
backend = { "telescope" },
},
}
.moveAndRenameFile
You can get autocompletion for directories by nvim-cmp
and vim's omnifunc
:
-- packer
use {
"chrisgrieser/nvim-genghis",
requires = {
"stevearc/dressing.nvim",
"hrsh7th/nvim-cmp",
"hrsh7th/cmp-omni",
},
}
-- lazy
{
"chrisgrieser/nvim-genghis",
dependencies = {
"stevearc/dressing.nvim",
"hrsh7th/nvim-cmp",
"hrsh7th/cmp-omni",
},
},
-- required setup for cmp, somewhere after your main cmp-config
require("cmp").setup.filetype("DressingInput", {
sources = cmp.config.sources { { name = "omni" } },
})
vim.eunuch
?os
modules, so it has no dependencies and
works cross-platform.vim.ui.input
or vim.notify
.
This means you can get nicer input fields with normal mode support via plugins
like dressing.nvim, and
confirmation notices with plugins like
nvim-notify, if they are installed
and setup.A nod to vim.eunuch. 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.
Blog
I also occasionally blog about vim: Nano Tips for Vim
Profiles