Home

Awesome

nvim-revJ.lua

:warning: I've decided to completely re-write this plugin and use treesitter instead of textobjects etc and completely move away from the current implementation. Feel free to checkout trevJ instead:

https://github.com/AckslD/nvim-trevJ.lua

Nvim-plugin for doing the opposite of join-line (J) of arguments written in lua. Requires some textobject that selects a argument such as vim-textobj-parameter or targets.vim. Note: vim-textobj-parameter in turn requires vim-textobj-user. Note: targets.vim should in principle work I think but I haven't managed to get it to select arguments as I would want. Note: whitespace needs to be included in the textobject so nvim-treesitter-textobjects won't work yet, because of this.

Installation

Use your favourite plugin manager, for example using packer.nvim

use {
    'AckslD/nvim-revJ.lua',
    requires = {'kana/vim-textobj-user', 'sgur/vim-textobj-parameter'},
    -- or
    -- requires = {'wellle/targets.vim'},
    -- or ...
}

or vim-plug:

Plug 'kana/vim-textobj-user'
Plug 'sgur/vim-textobj-parameter'
" or
" Plug 'wellle/targets.vim'
" or ...
Plug 'AckslD/nvim-revJ.lua'

Usage

The plugin needs to be enabled by calling it's setup function.

require("revj").setup{}

By default no keybindings are enabled, see below for configuration.

Configuration

These are the default values

require("revj").setup{
    brackets = {first = '([{<', last = ')]}>'}, -- brackets to consider surrounding arguments
    new_line_before_last_bracket = true, -- add new line between last argument and last bracket (only if no last seperator)
    add_seperator_for_last_parameter = true, -- if a seperator should be added if not present after last parameter
    enable_default_keymaps = false, -- enables default keymaps without having to set them below
    keymaps = {
        operator = '<Leader>J', -- for operator (+motion)
        line = '<Leader>j', -- for formatting current line
        visual = '<Leader>j', -- for formatting visual selection
    },
    parameter_mapping = ',', -- specifies what text object selects an arguments (ie a, and i, by default)
        -- if you're using `vim-textobj-parameter` you can also set this to `vim.g.vim_textobj_parameter_mapping`
}

Keybindings

Three keybindings can be enabled:

require("revj").setup{
    keymaps = {
        operator = '<Leader>J', -- for operator (+motion)
        line = '<Leader>j', -- for formatting current line
        visual = '<Leader>j', -- for formatting visual selection
    },
}

Development

Testing

To run the tests locally (TODO update)

make test