Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chrisgrieser/nvim-genghis
Lightweight and quick file operations without being a full-blown file manager.
https://github.com/chrisgrieser/nvim-genghis
neovim-plugin nvim
Last synced: 2 days ago
JSON representation
Lightweight and quick file operations without being a full-blown file manager.
- Host: GitHub
- URL: https://github.com/chrisgrieser/nvim-genghis
- Owner: chrisgrieser
- License: mit
- Created: 2022-11-21T12:41:49.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-10-21T18:16:13.000Z (13 days ago)
- Last Synced: 2024-10-22T09:36:37.965Z (13 days ago)
- Topics: neovim-plugin, nvim
- Language: Lua
- Homepage:
- Size: 221 KB
- Stars: 201
- Watchers: 2
- Forks: 11
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- awesome-neovim - chrisgrieser/nvim-genghis - Convenience file operations, written in Lua. (Utility / Cursorline)
README
# nvim-genghis ⚔️
Lightweight and quick file operations without being a full-blown file manager.
- [Features](#features)
- [Installation](#installation)
- [Configuration](#configuration)
- [Usage](#usage)
- [Available commands](#available-commands)
* [File Operations](#file-operations)
* [Path copying](#path-copying)
* [Other operations](#other-operations)
- [Why that Name](#why-that-name)
- [About the author](#about-the-author)## Features
- Commands for moving, renaming, creating, deleting, or, duplicating files and
more.
- Commands for copying the path or name of the current file in various formats.
- All movement and renaming commands update `import` statements to the renamed
file (if the LSP supports `workspace/willRenameFiles`).
- Lightweight: no file management UI or file tree.
- Various quality-of-life improvements like automatically keeping the extensions
when no extension is given, or the ability to use vim motions in the input
field.## Installation
```lua
-- lazy.nvim
{
"chrisgrieser/nvim-genghis",
dependencies = "stevearc/dressing.nvim"
},-- packer
use {
"chrisgrieser/nvim-genghis",
requires = "stevearc/dressing.nvim"
}
```## Configuration
The `setup` call is optional.```lua
-- default config
require("genghis").setup {
backdrop = {
enabled = true,
blend = 50,
},
-- default is ` "trash" ` on Mac/Windows, and `{ "gio", "trash" }` on Linux
trashCmd = "trash",
}
```## Usage
You can access a command via the lua API:
```lua
require("genghis").createNewFile()
```Or you can use the ex command `:Genghis` with the respective sub-command:
```txt
:Genghis createNewFile
```> [!TIP]
> Previously, the plugins used ex commands such as `:New` or `:Move`. To avoid
> conflicts, the ex commands are now only available as sub-commands of
> `:Genghis`. If you prefer the old, shorter ex commands, you can use
> abbreviations to re-create them, for example: `vim.cmd.cabbrev("New Genghis
> createNewFile")`.## Available commands
### File operations
- `.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. (Note that this is a Visual
Line mode 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.The following applies to all commands above:
1. If no extension has been provided, uses the extension of the original file.
2. If the new file name includes a `/`, the new file is placed in the
respective subdirectory, creating any non-existing folders.
3. All movement and renaming commands update `import` statements to the renamed
file (if the LSP supports `workspace/willRenameFiles`).### Path copying
- `.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.All commands use the system clipboard.
### Other operations
- `.chmodx`: Makes current file executable. Equivalent to `chmod
+x`.
- `.trashFile`: Move the current file
to the trash location.
* Defaults to `gio trash` on *Linux*, `trash` on *Mac* and *Windows*.
* If [bufdelete.nvim](https://github.com/famiu/bufdelete.nvim) is available,
`require'bufdelete.nvim'.bufwipeout` would be used to keep window layout
intact instead of `vim.cmd.bwipeout`.> [!NOTE]
> The trash CLIs are usually not available by default, and must be installed.## Why that Name
A nod to [vim.eunuch](https://github.com/tpope/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](https://allthatsinteresting.com/genghis-khan-children).## About the author
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](https://nanotipsforvim.prose.sh)
- [Academic Website](https://chris-grieser.de/)
- [Twitter](https://twitter.com/pseudo_meta)
- [ResearchGate](https://www.researchgate.net/profile/Christopher-Grieser)
- [LinkedIn](https://www.linkedin.com/in/christopher-grieser-ba693b17a/)