Skip to content

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

Notifications You must be signed in to change notification settings

Myzel394/easytables.nvim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 

Repository files navigation

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

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages