Myzel394 / easytables.nvim

Easily insert and edit markdown tables using Neovim with a live preview and useful helpers

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Easytables

Make Markdown tables great again!
preview.webm

Please note that this is a work in progress.

Features

  • Preview tables in real time
  • Add and remove rows and columns
  • Move rows and columns
  • Move cells

Usage

Installation

Using packer:

use "Myzel394/easytables.nvim"

Tutorial

Inserting a new table

Go to the place where you want to insert your table and either call:

  • :EasyTablesCreateNew <width>x<height> - Creates a new table with <width> columns and <height> rows
  • :EasyTablesCreateNew <width> - Creates a square table with the size of <width> (eg. :EasyTablesCreateNew 5 -> Creates a 5x5 table)
  • :EasyTablesCreateNew <width>x - Creates a table with <width> columns and one row
  • :EasyTablesCreateNew x<height> - Creates a table with one column and <height> rows

Editing an existing table

Go to your table (doesn't matter where, can be at a border or inside a cell) and type:

:EasyTablesImportThisTable

Custom Setup

Make sure to call the setup function!

after/plugin/easytables.lua

require("easytables").setup {
  -- Your configuration comes here
}

Default configuration

By default, easytables configures default characters for the table and registers the following keymaps:

  • <Left>: Move cell left (in normal mode, applies to all other directions)
  • <S-Left>: Swaps cell with cell to the left (in normal mode, applies to all other directions)
  • <C-Left>: Swaps column with column to the left (in normal mode, applies to all other directions)
  • <Tab>: Move cell to the next cell (in normal mode, either to the right or to the beginning of the next line)
  • <S-Tab>: Move cell to the previous cell (in normal mode, either to the left or to the end of the previous line)

This is the default configuration:

{
    table = {
        -- Whether to enable the header by default
        header_enabled_by_default = true,
        window = {
            preview_title = "Table Preview",
            prompt_title = "Cell content",
            -- Either "auto" to automatically size the window, or a string
            -- in the format of "<width>x<height>" (e.g. "20x10")
            size = "auto"
        },
        cell = {
            -- Min width of a cell (excluding padding)
            min_width = 3,
            -- Filler character for empty cells
            filler = " ",
            align = "left",
        },
        -- Characters used to draw the table
        -- Do not worry about multibyte characters, they are handled correctly
        border = {
            top_left = "",
            top_right = "",
            bottom_left = "",
            bottom_right = "",
            horizontal = "",
            vertical = "",
            left_t = "",
            right_t = "",
            top_t = "",
            bottom_t = "",
            cross = "",
            header_left_t = "",
            header_right_t = "",
            header_bottom_t = "",
            header_cross = "",
            header_horizontal = "",
        }
    },
    export = {
        markdown = {
            -- Padding around the cell content, applied BOTH left AND right
            -- E.g: padding = 1, content = "foo" -> " foo "
            padding = 1,
            -- What markdown characters are used for the export, you probably
            -- don't want to change these
            characters = {
                horizontal = "-",
                vertical = "|",
                -- Filler for padding
                filler = " "
            }
        }
    },
    set_mappings = function(buf)
        vim.api.nvim_buf_set_keymap(
            buf,
            "n",
            "<Left>",
            ":JumpLeft<CR>",
            {}
        )
        vim.api.nvim_buf_set_keymap(
            buf,
            "n",
            "<S-Left>",
            ":SwapWithLeftCell<CR>",
            {}
        )

        vim.api.nvim_buf_set_keymap(
            buf,
            "n",
            "<Right>",
            ":JumpRight<CR>",
            {}
        )
        vim.api.nvim_buf_set_keymap(
            buf,
            "n",
            "<S-Right>",
            ":SwapWithRightCell<CR>",
            {}
        )

        vim.api.nvim_buf_set_keymap(
            buf,
            "n",
            "<Up>",
            ":JumpUp<CR>",
            {}
        )
        vim.api.nvim_buf_set_keymap(
            buf,
            "n",
            "<S-Up>",
            ":SwapWithUpperCell<CR>",
            {}
        )

        vim.api.nvim_buf_set_keymap(
            buf,
            "n",
            "<Down>",
            ":JumpDown<CR>",
            {}
        )
        vim.api.nvim_buf_set_keymap(
            buf,
            "n",
            "<S-Down>",
            ":SwapWithLowerCell<CR>",
            {}
        )

        vim.api.nvim_buf_set_keymap(
            buf,
            "n",
            "<Tab>",
            ":JumpToNextCell<CR>",
            {}
        )
        vim.api.nvim_buf_set_keymap(
            buf,
            "n",
            "<S-Tab>",
            ":JumpToPreviousCell<CR>",
            {}
        )

        vim.api.nvim_buf_set_keymap(
            buf,
            "n",
            "<C-Left>",
            ":SwapWithLeftColumn<CR>",
            {}
        )
        vim.api.nvim_buf_set_keymap(
            buf,
            "n",
            "<C-Right>",
            ":SwapWithRightColumn<CR>",
            {}
        )
        vim.api.nvim_buf_set_keymap(
            buf,
            "n",
            "<C-Up>",
            ":SwapWithUpperRow<CR>",
            {}
        )
        vim.api.nvim_buf_set_keymap(
            buf,
            "n",
            "<C-Down>",
            ":SwapWithLowerRow<CR>",
            {}
        )
    end

}

Limitations

  • This plugin currently does not work well with big tables

This project is stupid, the code is awful, go away

I know that the code is probably not the best, it's my first ever written neovim plugin. You are more than welcome to contribute to this project, I will gladly accept any help.

Donate

It might sound crazy, but if you would just donate 1$, it would totally mean to world to me, since it's a really small amount and if everyone did that, I can totally focus on easytables and my other open source projects. :)

You can donate via:

  • GitHub Sponsors
  • Bitcoin: bc1qw054829yj8e2u8glxnfcg3w22dkek577mjt5x6
  • Monero: 83dm5wyuckG4aPbuMREHCEgLNwVn5i7963SKBhECaA7Ueb7DKBTy639R3QfMtb3DsFHMp8u6WGiCFgbdRDBBcz5sLduUtm8

About

Easily insert and edit markdown tables using Neovim with a live preview and useful helpers


Languages

Language:Lua 100.0%