https://github.com/nvim-mini/mini.move
Neovim Lua plugin to move any selection in any direction. Part of 'mini.nvim' library.
https://github.com/nvim-mini/mini.move
lua mini-nvim neovim neovim-plugin
Last synced: 4 months ago
JSON representation
Neovim Lua plugin to move any selection in any direction. Part of 'mini.nvim' library.
- Host: GitHub
- URL: https://github.com/nvim-mini/mini.move
- Owner: nvim-mini
- License: mit
- Created: 2023-01-15T09:00:44.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2025-08-28T13:02:31.000Z (5 months ago)
- Last Synced: 2025-08-28T20:42:57.030Z (5 months ago)
- Topics: lua, mini-nvim, neovim, neovim-plugin
- Language: Lua
- Homepage:
- Size: 47.9 KB
- Stars: 110
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
### Move any selection in any direction
See more details in [Features](#features) and [help file](doc/mini-move.txt).
---
> [!NOTE]
> This was previously hosted at a personal `echasnovski` GitHub account. It was transferred to a dedicated organization to improve long term project stability. See more details [here](https://github.com/nvim-mini/mini.nvim/discussions/1970).
⦿ This is a part of [mini.nvim](https://github.com/nvim-mini/mini.nvim) library. Please use [this link](https://github.com/nvim-mini/mini.nvim/blob/main/readmes/mini-move.md) if you want to mention this module.
⦿ All contributions (issues, pull requests, discussions, etc.) are done inside of 'mini.nvim'.
⦿ See the repository page to learn about common design principles and configuration recipes.
---
If you want to help this project grow but don't know where to start, check out [contributing guides of 'mini.nvim'](https://github.com/nvim-mini/mini.nvim/blob/main/CONTRIBUTING.md) or leave a Github star for 'mini.nvim' project and/or any its standalone Git repositories.
## Demo
https://user-images.githubusercontent.com/24854248/213466308-2e732d83-7c49-452d-8974-6b18b38bf89f.mp4
## Features
- Works in two modes:
- Visual mode. Select text (charwise with `v`, linewise with `V`, and blockwise with `CTRL-V`) and press customizable mapping to move in all four directions (left, right, down, up). It keeps Visual mode.
- Normal mode. Press customizable mapping to move current line in all four directions (left, right, down, up).
- Special handling of linewise movement:
- Vertical movement gets reindented with `=`.
- Horizontal movement is improved indent/dedent with `>` / `<`.
- Cursor moves along with selection.
- Provides both mappings and Lua functions for motions. See `:h MiniMove.move_selection()` and `:h MiniMove.move_line()`.
- Respects `v:count`. Movement mappings can be preceded by a number which multiplies command effect.
- All consecutive moves (regardless of direction) can be undone by a single `u`.
- Respects preferred column for vertical movement. It will vertically move selection as how cursor is moving (not strictly vertically if target column is not present in target line).
## Installation
This plugin can be installed as part of 'mini.nvim' library (**recommended**) or as a standalone Git repository.
There are two branches to install from:
- `main` (default, **recommended**) will have latest development version of plugin. All changes since last stable release should be perceived as being in beta testing phase (meaning they already passed alpha-testing and are moderately settled).
- `stable` will be updated only upon releases with code tested during public beta-testing phase in `main` branch.
Here are code snippets for some common installation methods (use only one):
With mini.deps
Github repo
Branch Code snippet
'mini.nvim' library Main Follow recommended 'mini.deps' installation
Stable
Standalone plugin Main add('nvim-mini/mini.move')
Stable add({ source = 'nvim-mini/mini.move', checkout = 'stable' })
With folke/lazy.nvim
Github repo
Branch Code snippet
'mini.nvim' library
Main { 'nvim-mini/mini.nvim', version = false },
Stable { 'nvim-mini/mini.nvim', version = '*' },
Standalone plugin
Main { 'nvim-mini/mini.move', version = false },
Stable { 'nvim-mini/mini.move', version = '*' },
With junegunn/vim-plug
Github repo
Branch Code snippet
'mini.nvim' library
Main Plug 'nvim-mini/mini.nvim'
Stable Plug 'nvim-mini/mini.nvim', { 'branch': 'stable' }
Standalone plugin Main Plug 'nvim-mini/mini.move'
Stable Plug 'nvim-mini/mini.move', { 'branch': 'stable' }
**Important**: don't forget to call `require('mini.move').setup()` to enable its functionality.
**Note**: if you are on Windows, there might be problems with too long file paths (like `error: unable to create file : Filename too long`). Try doing one of the following:
- Enable corresponding git global config value: `git config --system core.longpaths true`. Then try to reinstall.
- Install plugin in other place with shorter path.
## Default config
```lua
-- No need to copy this inside `setup()`. Will be used automatically.
{
-- Module mappings. Use `''` (empty string) to disable one.
mappings = {
-- Move visual selection in Visual mode. Defaults are Alt (Meta) + hjkl.
left = '',
right = '',
down = '',
up = '',
-- Move current line in Normal mode
line_left = '',
line_right = '',
line_down = '',
line_up = '',
},
-- Options which control moving behavior
options = {
-- Automatically reindent selection during linewise vertical move
reindent_linewise = true,
},
}
```
## Similar plugins
- [matze/vim-move](https://github.com/matze/vim-move)
- [booperlv/nvim-gomove](https://github.com/booperlv/nvim-gomove)