Easily insert and edit markdown tables using Neovim with a live preview and useful helpers
Easytables
Make Markdown tables great again!
Preview of usage of easytables
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 a5x5table):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)
{
table = {
-- Whether to enable the header by default
headerenabledby_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 = "โผ",
headerleftt = "โ",
headerrightt = "โก",
headerbottomt = "โง",
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.nvimbufset_keymap(
buf,
"n",
"<Left>",
":JumpLeft<CR>",
{}
)
vim.api.nvimbufset_keymap(
buf,
"n",
"<S-Left>",
":SwapWithLeftCell<CR>",
{}
)
vim.api.nvimbufset_keymap( buf, "n", "<Right>", ":JumpRight<CR>", {} ) vim.api.nvimbufset_keymap( buf, "n", "<S-Right>", ":SwapWithRightCell<CR>", {} )
vim.api.nvimbufset_keymap( buf, "n", "<Up>", ":JumpUp<CR>", {} ) vim.api.nvimbufset_keymap( buf, "n", "<S-Up>", ":SwapWithUpperCell<CR>", {} )
vim.api.nvimbufset_keymap( buf, "n", "<Down>", ":JumpDown<CR>", {} ) vim.api.nvimbufset_keymap( buf, "n", "<S-Down>", ":SwapWithLowerCell<CR>", {} )
vim.api.nvimbufset_keymap( buf, "n", "<Tab>", ":JumpToNextCell<CR>", {} ) vim.api.nvimbufset_keymap( buf, "n", "<S-Tab>", ":JumpToPreviousCell<CR>", {} )
vim.api.nvimbufset_keymap( buf, "n", "<C-Left>", ":SwapWithLeftColumn<CR>", {} ) vim.api.nvimbufset_keymap( buf, "n", "<C-Right>", ":SwapWithRightColumn<CR>", {} ) vim.api.nvimbufset_keymap( buf, "n", "<C-Up>", ":SwapWithUpperRow<CR>", {} ) vim.api.nvimbufset_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