Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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: 3 days ago
JSON representation

Lightweight and quick file operations without being a full-blown file manager.

Awesome Lists containing this project

README

        

# nvim-genghis ⚔️


badge

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.

Showcase for renaming files

## Table of contents

- [Features](#features)
- [Installation](#installation)
- [Configuration](#configuration)
- [Usage](#usage)
* [File operations](#file-operations)
* [Copy operations](#copy-operations)
* [File navigation](#file-navigation)
- [Why the name "Genghis"?](#why-the-name-genghis)
- [About the author](#about-the-author)

## Features
**Commands**
- Perform **common file operations**: moving, renaming, creating, deleting, or
duplicating files.
- **Copy** the path or name of the current file in various formats.
- **Navigate** to the next or previous file in the current folder.
- **Lightweight**: This plugin only provides utility file operations, it does
not provide a full-blown file manager UI.

**Quality-of-life**
- All movement and renaming commands **update `import` statements** to the
renamed file (if the LSP supports `workspace/willRenameFiles`).
- Automatically keep the extension when no extension is given.
- Use vim motions in the input field.

## Installation
**Requirements**
- nvim 0.10+
- a `vim.ui.input` provider such as
[dressing.nvim](http://github.com/stevearc/dressing.nvim) or
[snacks.nvim](http://github.com/folke/snacks.nvim) for an input UI that
**supports vim motions** and looks much nicer
- *for the trash command*: an OS-specific trash CLI like `trash` or `gio trash`

```lua
-- lazy.nvim
{ "chrisgrieser/nvim-genghis" },

-- packer
use { "chrisgrieser/nvim-genghis" }
```

## Configuration
The `setup` call is required for `lazy.nvim`, but otherwise optional.

```lua
-- 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,
}
```

## Usage
You can access a command as lua function:

```lua
require("genghis").createNewFile()
```

Or you can use the ex command `:Genghis` with the respective sub-command:

```vim
:Genghis createNewFile
```

### 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. (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:
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 intermediate folders.
3. All movement and renaming commands update `import` statements to the renamed
file (if the LSP supports `workspace/willRenameFiles`).

### Copy operations
- `.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.

### File navigation
`.navigateToFileInFolder("next"|"prev")`: Move to the next/previous file in the
current folder of the current file, in alphabetical order.
- If `snacks.nvim` is installed, displays a cycling notification.

## Why the name "Genghis"?
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)

- [Website](https://chris-grieser.de/)
- [Mastodon](https://pkm.social/@pseudometa)
- [ResearchGate](https://www.researchgate.net/profile/Christopher-Grieser)
- [LinkedIn](https://www.linkedin.com/in/christopher-grieser-ba693b17a/)

Buy Me a Coffee at ko-fi.com