Skip to content

fedepujol/move.nvim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 

Repository files navigation

move.nvim

Gain the power to move lines and blocks!

Vertical Movement

vert_line

vert_block

Horizontal Movement

hor_char

hor_block

Word Movement

word

⚡ Requirements

This plugin works with Neovim v0.5 or later.

📦 Installation

{ 
    'fedepujol/move.nvim',
    opts = {
        --- Config
    }
}
'fedepujol/move.nvim';

⚙️ Configuration

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. ⚠️ Disabling line/block/word/char movements, will not generate the commands.

🚀 Usage

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

⌨️ Mappings

VimScript

" 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>

Lua

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)

or merge with lazy config (thanks to ReKylee)

return {
    "fedepujol/move.nvim",
    keys = {
      -- Normal Mode
      { "<A-j>", ":MoveLine(1)<CR>", desc = "Move Line Up" },
      { "<A-k>", ":MoveLine(-1)<CR>", desc = "Move Line Down" },
      { "<A-h>", ":MoveHChar(-1)<CR>", desc = "Move Character Left" },
      { "<A-l>", ":MoveHChar(1)<CR>", desc = "Move Character Right" },
      { "<leader>wf", ":MoveWord(-1)<CR>", mode = { "n" }, desc = "Move Word Left" },
      { "<leader>wb", ":MoveWord(1)<CR>", mode = { "n" }, desc = "Move Word Right" },
      -- Visual Mode
      { "<A-j>", ":MoveBlock(1)<CR>", mode = { "v" }, desc = "Move Block Up" },
      { "<A-k>", ":MoveBlock(-1)<CR>", mode = { "v" }, desc = "Move Block Down" },
      { "<A-h>", ":MoveHBlock(-1)<CR>", mode = { "v" }, desc = "Move Block Left" },
      { "<A-l>", ":MoveHBlock(1)<CR>", mode = { "v" }, desc = "Move Block Right" },
    },
    opts = {
      -- Config here
    }
}

🔌 Integration

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 },
        ...
    }
})

Mention

There is an original and more feature rich plugin (written in VimScript):

vim-move.

About

Gain the power to move lines and blocks and auto-indent them!

Topics

Resources

License

Stars

Watchers

Forks

Contributors 2

  •  
  •  

Languages