{"id":50814701,"url":"https://github.com/hc-nolan/tablature.nvim","last_synced_at":"2026-06-13T08:31:07.969Z","repository":{"id":354559950,"uuid":"1219583839","full_name":"hc-nolan/tablature.nvim","owner":"hc-nolan","description":"A plugin for writing guitar tabs in Neovim.","archived":false,"fork":false,"pushed_at":"2026-05-07T23:50:07.000Z","size":162,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-08T01:34:04.665Z","etag":null,"topics":["guitar","guitar-tabs","lua","neovim","neovim-plugin","tablature"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hc-nolan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-24T02:49:03.000Z","updated_at":"2026-05-07T23:49:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/hc-nolan/tablature.nvim","commit_stats":null,"previous_names":["hc-nolan/tablature.nvim"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hc-nolan/tablature.nvim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hc-nolan%2Ftablature.nvim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hc-nolan%2Ftablature.nvim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hc-nolan%2Ftablature.nvim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hc-nolan%2Ftablature.nvim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hc-nolan","download_url":"https://codeload.github.com/hc-nolan/tablature.nvim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hc-nolan%2Ftablature.nvim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34278153,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["guitar","guitar-tabs","lua","neovim","neovim-plugin","tablature"],"created_at":"2026-06-13T08:31:07.398Z","updated_at":"2026-06-13T08:31:07.941Z","avatar_url":"https://github.com/hc-nolan.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tablature.nvim\n\nA guitar tablature editor for Neovim. Insert tab staff blocks into any buffer and edit them with a dedicated tab mode.\n\n## Requirements\n\nNeovim 0.12+\n\n## Installation\n\n```lua\nvim.pack.add(\"https://github.com/hc-nolan/tablature.nvim\")\nrequire('tablature').setup()\n```\n\nSee below for changing the default configuration.\n\n\n## Usage\n\n| Key          | Action                                    |\n|--------------|-------------------------------------------|\n| `\u003cleader\u003eti` | Insert a new tab staff block below cursor |\n| `\u003cleader\u003ete` | Enter tab editing mode                    |\n\nBoth are `\u003cPlug\u003e` mappings and can be remapped:\n\n```lua\nvim.keymap.set(\"n\", \"\u003cleader\u003egi\", \"\u003cPlug\u003e(tablature-insert)\")\nvim.keymap.set(\"n\", \"\u003cleader\u003ege\", \"\u003cPlug\u003e(tablature-edit)\")\n```\n\n### Tab mode\n\nTab mode activates when your cursor is on a staff line. A legend showing all active keybinds is displayed below the staff. The mode indicator above the staff shows `m:\u003cmeasure\u003e b:\u003cbeat\u003e/\u003ctotal\u003e`.\n\n- `h`/`l` — move left/right one beat slot\n- `H`/`L`, `{`/`}` — jump to previous/next measure\n- `j`/`k` — move to lower/higher string\n- `0`–`9` — write fret; type a second digit immediately for double-digit frets\n- `\u003cSpace\u003e` — clear cell\n- `\u003cBS\u003e` — clear cell and move left\n- `T` — change tuning (relabels the staff in place)\n- `B` — set beat count for the current measure\n- `C` — enter chord mode\n- `\u003cEsc\u003e`/`q` — exit\n\nTab mode exits automatically when you leave the buffer or window.\n\n### Chord mode\n\nPress `C` to open a shape picker. Once a shape is selected:\n\n- `\u003cTab\u003e`/`\u003cS-Tab\u003e` — cycle shapes\n- `+`/`=`/`-` — slide root fret up/down\n- `\u003cCR\u003e` — insert chord at cursor (stays in chord mode)\n- `C` — re-open the shape picker\n- `\u003cEsc\u003e`/`q` — return to tab mode\n\nA preview overlay shows the voicing at the cursor position. A legend below the staff shows the active shape, current root fret, and available keys.\n\n## Configuration\n\n```lua\nrequire(\"tablature\").setup({\n  -- Register \u003cleader\u003eti / \u003cleader\u003ete\n  default_mappings = true,\n\n  -- Beat slots per measure (4 = quarter notes, 8 = eighth notes, etc.)\n  beats = 4,\n\n  -- Measures inserted by \u003cleader\u003eti\n  default_measures = 8,\n\n  -- Fill character and measure separator\n  filler = \"-\",\n  measure_sep = \"|\",\n\n  -- Tunings available in the picker (strings listed low → high)\n  tunings = {\n    { name = \"Standard\", strings = { \"E\", \"A\", \"D\", \"G\", \"B\", \"e\" } },\n    { name = \"Drop D\",   strings = { \"D\", \"A\", \"D\", \"G\", \"B\", \"e\" } },\n  },\n\n  -- Chord shape library.\n  -- \"default\" shapes appear for all tunings; shapes under a tuning name\n  -- appear only when that tuning is active (and override default on collision).\n  -- Each shape is a low→high list of fret offsets from a root fret.\n  -- \"x\" = muted string; numeric values shift together as the root fret changes.\n  chords = {\n    default = {\n      [\"Power 5th (E root)\"] = { \"0\", \"2\", \"2\", \"x\", \"x\", \"x\" },\n    },\n    Standard = {\n      [\"Major (E shape)\"] = { \"0\", \"2\", \"2\", \"1\", \"0\", \"0\" },\n      -- ...\n    },\n    [\"Drop D\"] = {\n      [\"Power (Drop D)\"] = { \"0\", \"0\", \"0\", \"x\", \"x\", \"x\" },\n      -- ...\n    },\n  },\n\n  -- Tab mode keybindings. Each entry needs key, func, and desc.\n  -- Set legend = false to hide an entry from the in-buffer legend.\n  -- Replacing this table entirely removes all defaults — include any you want to keep.\n  tabmode_keys = {\n    { key = \"h\",       func = function() require(\"tablature.mode\").move_left()             end, desc = \"Tab mode: move left\",               legend = false },\n    { key = \"\u003cLeft\u003e\",  func = function() require(\"tablature.mode\").move_left()             end, desc = \"Tab mode: move left\",               legend = false },\n    { key = \"l\",       func = function() require(\"tablature.mode\").move_right()            end, desc = \"Tab mode: move right\",              legend = false },\n    { key = \"\u003cRight\u003e\", func = function() require(\"tablature.mode\").move_right()            end, desc = \"Tab mode: move right\",              legend = false },\n    { key = \"H\",       func = function() require(\"tablature.mode\").move_previous_measure() end, desc = \"Tab mode: move to previous measure\", legend = false },\n    { key = \"L\",       func = function() require(\"tablature.mode\").move_next_measure()     end, desc = \"Tab mode: move to next measure\",    legend = false },\n    { key = \"{\",       func = function() require(\"tablature.mode\").move_previous_measure() end, desc = \"Tab mode: move to previous measure\", legend = false },\n    { key = \"}\",       func = function() require(\"tablature.mode\").move_next_measure()     end, desc = \"Tab mode: move to next measure\",    legend = false },\n    { key = \"j\",       func = function() require(\"tablature.mode\").move_next_string()      end, desc = \"Tab mode: move to next string\",     legend = false },\n    { key = \"k\",       func = function() require(\"tablature.mode\").move_previous_string()  end, desc = \"Tab mode: move to previous string\", legend = false },\n    { key = \"\u003cSpace\u003e\", func = function() require(\"tablature.mode\").clear_cell()            end, desc = \"Tab mode: clear cell\" },\n    { key = \"\u003cBS\u003e\",    func = function() require(\"tablature.mode\").clear_cell_and_move_left() end, desc = \"Tab mode: clear cell\",           legend = false },\n    { key = \"\u003cEsc\u003e\",   func = function() require(\"tablature.mode\").exit()                  end, desc = \"Tab mode: exit tab mode\" },\n    { key = \"q\",       func = function() require(\"tablature.mode\").exit()                  end, desc = \"Tab mode: exit tab mode\",           legend = false },\n    { key = \"T\",       func = function() require(\"tablature.mode\").pick_tuning()           end, desc = \"Tab mode: change tuning\" },\n    { key = \"C\",       func = function() require(\"tablature.mode\").insert_chord()          end, desc = \"Tab mode: insert chord\" },\n    { key = \"B\",       func = function() require(\"tablature.mode\").set_beats()             end, desc = \"Tab mode: set measure beats\" },\n    { key = \"N\",       func = function() require(\"tablature.staff\").insert_below_cursor(vim.api.nvim_get_current_buf()) end, desc = \"Tab mode: insert new staff line\" },\n  },\n})\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhc-nolan%2Ftablature.nvim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhc-nolan%2Ftablature.nvim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhc-nolan%2Ftablature.nvim/lists"}