Gain the power to move lines and blocks!
This plugin works with Neovim v0.5 or later.
{
'fedepujol/move.nvim',
opts = {
--- Config
}
}
'fedepujol/move.nvim';
You can use the default's (leaving the setup function empty)
require('move').setup({})
or customizing it
require('move').setup({
line = {
enable = true, -- Enables line movement
indent = true -- Toggles indentation
},
block = {
enable = true, -- Enables block movement
indent = true -- Toggles indentation
},
word = {
enable = true, -- Enables word movement
},
char = {
enable = false -- Enables char movement
}
})
ℹ️ By default, every option is enabled except char movement.
The plugin provides the following commands:
Command | Description | Mode |
---|---|---|
MoveLine | Moves a line up or down | Normal |
MoveHChar | Moves the character under the cursor, left or right | Normal |
MoveWord | Transpose the word under the cursor forwards or backwards | Normal |
MoveBlock | Moves a selected block of text, up or down | Visual |
MoveHBlock | Moves a visual area, left or right | Visual |
" Normal-mode commands
nnoremap <silent> <A-j> :MoveLine(1)<CR>
nnoremap <silent> <A-k> :MoveLine(-1)<CR>
nnoremap <silent> <A-l> :MoveHChar(1)<CR>
nnoremap <silent> <A-h> :MoveHChar(-1)<CR>
nnoremap <silent> <leader>wf :MoveWord(1)<CR>
nnoremap <silent> <leader>wb :MoveWord(-1)<CR>
" Visual-mode commands
vnoremap <silent> <A-j> :MoveBlock(1)<CR>
vnoremap <silent> <A-k> :MoveBlock(-1)<CR>
vnoremap <silent> <A-l> :MoveHBlock(1)<CR>
vnoremap <silent> <A-h> :MoveHBlock(-1)<CR>
local opts = { noremap = true, silent = true }
-- Normal-mode commands
vim.keymap.set('n', '<A-j>', ':MoveLine(1)<CR>', opts)
vim.keymap.set('n', '<A-k>', ':MoveLine(-1)<CR>', opts)
vim.keymap.set('n', '<A-h>', ':MoveHChar(-1)<CR>', opts)
vim.keymap.set('n', '<A-l>', ':MoveHChar(1)<CR>', opts)
vim.keymap.set('n', '<leader>wf', ':MoveWord(1)<CR>', opts)
vim.keymap.set('n', '<leader>wb', ':MoveWord(-1)<CR>', opts)
-- Visual-mode commands
vim.keymap.set('v', '<A-j>', ':MoveBlock(1)<CR>', opts)
vim.keymap.set('v', '<A-k>', ':MoveBlock(-1)<CR>', opts)
vim.keymap.set('v', '<A-h>', ':MoveHBlock(-1)<CR>', opts)
vim.keymap.set('v', '<A-l>', ':MoveHBlock(1)<CR>', opts)
Thanks to hinell to point this out:
Note: Don't set up the keys like above if you're using legendary
local opts = { noremap = true }
require('legendary').setup({
keymaps = {
{ "<A-k>", ":MoveLine -1", description = "Line: move up", opts },
{ "<A-j>", ":MoveLine 1", description = "Line: move down", opts },
...
}
})
There is an original and more feature rich plugin (written in VimScript):