{"id":16548762,"url":"https://github.com/sidofc/mkdx","last_synced_at":"2025-04-05T03:10:51.095Z","repository":{"id":26726302,"uuid":"109629841","full_name":"SidOfc/mkdx","owner":"SidOfc","description":"A vim plugin that adds some nice extra's for working with markdown documents","archived":false,"fork":false,"pushed_at":"2023-10-16T10:42:39.000Z","size":27186,"stargazers_count":485,"open_issues_count":3,"forks_count":13,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-03-29T11:42:39.773Z","etag":null,"topics":["nvim","vim","vim-plugin","vimscript"],"latest_commit_sha":null,"homepage":"https://www.vim.org/scripts/script.php?script_id=5620","language":"Vim Script","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SidOfc.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-11-06T00:48:46.000Z","updated_at":"2025-01-24T00:32:52.000Z","dependencies_parsed_at":"2024-01-10T20:11:10.594Z","dependency_job_id":"31f9a801-27fa-49d6-b76c-21ecab5fa71b","html_url":"https://github.com/SidOfc/mkdx","commit_stats":null,"previous_names":[],"tags_count":41,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SidOfc%2Fmkdx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SidOfc%2Fmkdx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SidOfc%2Fmkdx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SidOfc%2Fmkdx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SidOfc","download_url":"https://codeload.github.com/SidOfc/mkdx/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247280272,"owners_count":20912967,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["nvim","vim","vim-plugin","vimscript"],"created_at":"2024-10-11T19:26:59.906Z","updated_at":"2025-04-05T03:10:51.066Z","avatar_url":"https://github.com/SidOfc.png","language":"Vim Script","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mkdx.vim [![GitHub tag](https://img.shields.io/github/tag/SidOfc/mkdx.svg?label=version)](https://github.com/SidOfc/mkdx/releases) [![GitHub issues](https://img.shields.io/github/issues/SidOfc/mkdx.svg)](https://github.com/SidOfc/mkdx/issues)\n\n```mkdx\n        888b     d888 888    d8P  8888888b. Y88b   d88P    888     888 8888888 888b     d888\n        8888b   d8888 888   d8P   888  \"Y88b Y88b d88P     888     888   888   8888b   d8888\n        88888b.d88888 888  d8P    888    888  Y88o88P      888     888   888   88888b.d88888\n        888Y88888P888 888d88K     888    888   Y888P       Y88b   d88P   888   888Y88888P888\n        888 Y888P 888 8888888b    888    888   d888b        Y88b d88P    888   888 Y888P 888\n        888  Y8P  888 888  Y88b   888    888  d88888b        Y88o88P     888   888  Y8P  888\n        888   \"   888 888   Y88b  888  .d88P d88P Y88b  d8b   Y888P      888   888   \"   888\n        888       888 888    Y88b 8888888P\" d88P   Y88b Y8P    Y8P     8888888 888       888\n```\n\nmkdx.vim is a `markdown` plugin that aims to reduce the time you spend formatting your\nmarkdown documents. It does this by adding some configurable mappings for files with a\nmarkdown **filetype**. Functions are included to handle lists, checkboxes (even lists of checkboxes!), fenced code blocks,\nshortcuts, headers and links. In addition to that, this plugin provides a mapping to convert a selection\nof CSV data to a markdown table. And there's a lot more :D\nVisit `:h mkdx` or `:h mkdx-helptags` for more information.\n\nA copy can be found on [vim.org](https://www.vim.org/scripts/script.php?script_id=5620).\nThis plugin is also compatible with [repeat.vim](https://github.com/tpope/vim-repeat) by Tim Pope.\nEvery _normal_ mode mapping can be repeated with the `.` command. Below you will find configurable\nsettings and examples with default mappings.\n\n# Honorable mentions\n\nBefore we dive in I'd like to give a special thanks to the following contributors for posting issues and PRs:\n\n- [@Ginner](https://github.com/Ginner)\n    - Fixing a confusing typo in the README\n    - idea to conceal markdown links (inspired by vim-pandoc-syntax functionality)\n- [@victorkristof](https://github.com/victorkristof)\n    - idea to make text wrap mappings \"toggleable\"\n    - idea to allow text wrap mappings to be preceded with a _count_\n    - idea to enhance \u003ckbd\u003eg\u003c/kbd\u003e\u003ckbd\u003ef\u003c/kbd\u003e and \u003ckbd\u003eg\u003c/kbd\u003e\u003ckbd\u003ex\u003c/kbd\u003e\n- [@samarulmeu](https://github.com/samarulmeu)\n    - idea to mark every line with a quote mark\n    - idea to allow middle-of-list-item \u003ckbd\u003eenter\u003c/kbd\u003e to create a new list item\n    - discovering an edge case when wrapping near end of line would not work correctly\n    - discovering a bug with double insertion of quote marks\n    - finding duplicate helptag\n    - his critical thinking on enhancing \u003ckbd\u003eg\u003c/kbd\u003e\u003ckbd\u003ef\u003c/kbd\u003e and \u003ckbd\u003eg\u003c/kbd\u003e\u003ckbd\u003ex\u003c/kbd\u003e\n- [@yous](https://github.com/yous)\n    - discovering a bug when using unicode characters in list items\n- [@marcdeop](https://github.com/marcdeop) ([Erasys](https://www.erasys.de/))\n    - discovering and fixing a bug when using `\u0026sw` with a value of `0`\n- [@totpet](https://github.com/totpet)\n    - idea to compress GIFs to greatly reduce repository size\n    - idea for \u003cstrike\u003estrikethrough\u003c/strike\u003e highlighting\n    - Allowing header titles to contain non-ascii characters for various checks and TOC generation\n- [@toffalori](https://github.com/toffalori)\n    - discovering an indent bug in Vim due to `autoindent` different default value\n- [@paxtemper](https://github.com/paxtemper)\n    - idea for list / checklist / checkbox toggles and checkbox highlight states\n    - discovering two bugs\n\nThank you for making this plugin better!\n\n# Table of Contents\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand Table of Contents\u003c/summary\u003e\n\u003cul\u003e\n    \u003cli\u003e\u003ca href=\"#mkdxvim--\"\u003emkdx.vim\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#honorable-mentions\"\u003eHonorable mentions\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#table-of-contents\"\u003eTable of Contents\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#install\"\u003eInstall\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#quick-start\"\u003eQuick start\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#examples\"\u003eExamples\u003c/a\u003e\u003cdetails\u003e\u003csummary\u003eshow 24 items\u003c/summary\u003e\u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#folds\"\u003eFolds\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#insert-mode-fragment-completion\"\u003eInsert mode fragment completion\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#dead-link-detection\"\u003eDead link detection\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#insert-fenced-code-block\"\u003eInsert fenced code block\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#insert-kbdkbd-shortcut\"\u003eInsert \u003ccode\u003e\u0026lt;kbd\u0026gt;\u0026lt;/kbd\u0026gt;\u003c/code\u003e shortcut\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#inserting-list-items\"\u003eInserting list items\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#indenting--unindenting-numbered-list-items\"\u003eIndenting / unindenting numbered list items\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#toggling-lines-from--to-task-items\"\u003eToggling lines from / to task items\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#toggling-lines-from--to-list-items\"\u003eToggling lines from / to list items\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#toggling-lines-from--to-checklist-items\"\u003eToggling lines from / to checklist items\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#completing-checkboxes--checklists\"\u003eCompleting Checkboxes / Checklists\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#toggling-and-promoting--demoting-headers\"\u003eToggling and promoting / demoting Headers\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#toggling-kbd--shortcuts\"\u003eToggling \u0026lt;kbd /\u0026gt; shortcuts\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#toggling-quotes\"\u003eToggling Quotes\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#toggle-links\"\u003eToggle links\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#toggle-as-bold--italic--inline-code--strikethrough\"\u003eToggle as bold / italic / inline-code / strikethrough\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#convert-csv-to-table-and-back\"\u003eConvert CSV to table (and back)\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#jump-to-header\"\u003eJump to header\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#jump-to-next--previous-header\"\u003eJump to next / previous header\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#generate-or-update-toc\"\u003eGenerate or update TOC\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#generate-or-update-toc-as-details\"\u003eGenerate or update TOC as \u003ccode\u003e\u0026lt;details\u0026gt;\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#open-toc-in-quickfix-window\"\u003eOpen TOC in quickfix window\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#open-toc-using-fzf-instead-of-quickfix-window\"\u003eOpen TOC using fzf instead of quickfix window\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#using-the-menu\"\u003eUsing the menu\u003c/a\u003e\u003c/li\u003e\n    \u003c/ul\u003e\u003c/details\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#gmkdxsettings\"\u003e\u003ccode\u003eg:mkdx#settings\u003c/code\u003e\u003c/a\u003e\u003cdetails\u003e\u003csummary\u003eshow 54 items\u003c/summary\u003e\u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingsinsert_indent_mappings\"\u003e\u003ccode\u003eg:mkdx#settings.insert_indent_mappings\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingsgf_on_steroids\"\u003e\u003ccode\u003eg:mkdx#settings.gf_on_steroids\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingslinksexternalenable\"\u003e\u003ccode\u003eg:mkdx#settings.links.external.enable\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingslinksexternaltimeout\"\u003e\u003ccode\u003eg:mkdx#settings.links.external.timeout\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingslinksexternalhost\"\u003e\u003ccode\u003eg:mkdx#settings.links.external.host\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingslinksexternalrelative\"\u003e\u003ccode\u003eg:mkdx#settings.links.external.relative\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingslinksexternaluser_agent\"\u003e\u003ccode\u003eg:mkdx#settings.links.external.user_agent\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingslinksconceal\"\u003e\u003ccode\u003eg:mkdx#settings.links.conceal\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingslinksfragmentjumplist\"\u003e\u003ccode\u003eg:mkdx#settings.links.fragment.jumplist\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingslinksfragmentcomplete\"\u003e\u003ccode\u003eg:mkdx#settings.links.fragment.complete\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingslinksfragmentpumheight\"\u003e\u003ccode\u003eg:mkdx#settings.links.fragment.pumheight\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingslinksfragmentcompleteopt\"\u003e\u003ccode\u003eg:mkdx#settings.links.fragment.completeopt\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingsimage_extension_pattern\"\u003e\u003ccode\u003eg:mkdx#settings.image_extension_pattern\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingsrestore_visual\"\u003e\u003ccode\u003eg:mkdx#settings.restore_visual\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingsmapprefix\"\u003e\u003ccode\u003eg:mkdx#settings.map.prefix\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingsmapenable\"\u003e\u003ccode\u003eg:mkdx#settings.map.enable\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingscheckboxtoggles\"\u003e\u003ccode\u003eg:mkdx#settings.checkbox.toggles\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingscheckboxupdate_tree\"\u003e\u003ccode\u003eg:mkdx#settings.checkbox.update_tree\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingscheckboxinitial_state\"\u003e\u003ccode\u003eg:mkdx#settings.checkbox.initial_state\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingscheckboxmatch_attrs\"\u003e\u003ccode\u003eg:mkdx#settings.checkbox.match_attrs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstokensheader\"\u003e\u003ccode\u003eg:mkdx#settings.tokens.header\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstokensenter\"\u003e\u003ccode\u003eg:mkdx#settings.tokens.enter\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstokensfence\"\u003e\u003ccode\u003eg:mkdx#settings.tokens.fence\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstokensitalic\"\u003e\u003ccode\u003eg:mkdx#settings.tokens.italic\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstokensbold\"\u003e\u003ccode\u003eg:mkdx#settings.tokens.bold\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstokensstrike\"\u003e\u003ccode\u003eg:mkdx#settings.tokens.strike\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstokenslist\"\u003e\u003ccode\u003eg:mkdx#settings.tokens.list\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstableheader_divider\"\u003e\u003ccode\u003eg:mkdx#settings.table.header_divider\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstabledivider\"\u003e\u003ccode\u003eg:mkdx#settings.table.divider\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstablealign\"\u003e\u003ccode\u003eg:mkdx#settings.table.align\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstabenable\"\u003e\u003ccode\u003eg:mkdx#settings.tab.enable\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingsenterenable\"\u003e\u003ccode\u003eg:mkdx#settings.enter.enable\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingsenterclose_pum\"\u003e\u003ccode\u003eg:mkdx#settings.enter.close_pum\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingsenterincrement\"\u003e\u003ccode\u003eg:mkdx#settings.enter.increment\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingsentershift\"\u003e\u003ccode\u003eg:mkdx#settings.enter.shift\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingsentero\"\u003e\u003ccode\u003eg:mkdx#settings.enter.o\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingsentershifto\"\u003e\u003ccode\u003eg:mkdx#settings.enter.shifto\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingsentermalformed\"\u003e\u003ccode\u003eg:mkdx#settings.enter.malformed\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstoctext\"\u003e\u003ccode\u003eg:mkdx#settings.toc.text\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstoclist_token\"\u003e\u003ccode\u003eg:mkdx#settings.toc.list_token\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstocupdate_on_write\"\u003e\u003ccode\u003eg:mkdx#settings.toc.update_on_write\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstocposition\"\u003e\u003ccode\u003eg:mkdx#settings.toc.position\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstocdetailsenable\"\u003e\u003ccode\u003eg:mkdx#settings.toc.details.enable\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstocdetailssummary\"\u003e\u003ccode\u003eg:mkdx#settings.toc.details.summary\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstocdetailsnesting_level\"\u003e\u003ccode\u003eg:mkdx#settings.toc.details.nesting_level\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstocdetailschild_count\"\u003e\u003ccode\u003eg:mkdx#settings.toc.details.child_count\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingstocdetailschild_summary\"\u003e\u003ccode\u003eg:mkdx#settings.toc.details.child_summary\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingshighlightenable\"\u003e\u003ccode\u003eg:mkdx#settings.highlight.enable\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingshighlightfrontmatteryaml\"\u003e\u003ccode\u003eg:mkdx#settings.highlight.frontmatter.yaml\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingshighlightfrontmattertoml\"\u003e\u003ccode\u003eg:mkdx#settings.highlight.frontmatter.toml\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingshighlightfrontmatterjson\"\u003e\u003ccode\u003eg:mkdx#settings.highlight.frontmatter.json\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingsauto_updateenable\"\u003e\u003ccode\u003eg:mkdx#settings.auto_update.enable\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingsfoldenable\"\u003e\u003ccode\u003eg:mkdx#settings.fold.enable\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#gmkdxsettingsfoldcomponents\"\u003e\u003ccode\u003eg:mkdx#settings.fold.components\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n    \u003c/ul\u003e\u003c/details\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#mappings\"\u003eMappings\u003c/a\u003e\u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#remapping-functionality\"\u003eRemapping functionality\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#unmapping-functionality-using-nop\"\u003eUnmapping functionality using \u003ccode\u003e\u0026lt;Nop\u0026gt;\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#unmapping-functionality-using-plug\"\u003eUnmapping functionality using \u003ccode\u003e\u0026lt;Plug\u0026gt;\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n    \u003c/ul\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#supported-grep-programs\"\u003eSupported \u003ccode\u003egrep\u003c/code\u003e programs\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#roadmap\"\u003eRoadmap\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#changelog\"\u003eChangelog\u003c/a\u003e\u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#edge-not-yet-on-vimorg\"\u003eEdge (not yet on vim.org)\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#11-09-2020-version-1100\"\u003e11-09-2020 VERSION 1.10.0\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#22-05-2020-version-194\"\u003e22-05-2020 VERSION 1.9.4\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#18-05-2020-version-193\"\u003e18-05-2020 VERSION 1.9.3\u003c/a\u003e\u003c/li\u003e\n    \u003c/ul\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#faq\"\u003eFAQ\u003c/a\u003e\u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#e121-undefined-variable-gmkdxsettings\"\u003eE121 Undefined variable: g:mkdx#settings\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#e716-errors-if-vimrc-has-been-reloaded\"\u003eE716 errors if vimrc has been reloaded\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#there-is-no-help-for-mkdx\"\u003eThere is no help for mkdx\u003c/a\u003e\u003c/li\u003e\n    \u003c/ul\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\n# Install\n\nThis plugin is tested using [Vader.vim](https://github.com/junegunn/vader.vim) in _vim_, _nvim_ and _mvim_.\n\nTo install, use a plugin manager of choice like\n[Vundle](https://github.com/VundleVim/Vundle.vim) or [Pathogen](https://github.com/tpope/vim-pathogen).\n\n[Vundle](https://github.com/VundleVim/Vundle.vim)\n```viml\nPlugin 'SidOfc/mkdx'\n\n:so $MYVIMRC\n:PluginInstall\n```\n\n[NeoBundle](https://github.com/Shougo/neobundle.vim)\n```viml\nNeoBundle 'SidOfc/mkdx'\n\n:so $MYVIMRC\n:NeoBundleInstall\n```\n\n[vim-plug](https://github.com/junegunn/vim-plug)\n```viml\nPlug 'SidOfc/mkdx'\n\n:so $MYVIMRC\n:PlugInstall\n```\n\n[Pathogen](https://github.com/tpope/vim-pathogen)\n```sh\ncd ~/.vim/bundle\ngit clone https://github.com/SidOfc/mkdx\n```\n\n[packer.nvim](https://github.com/wbthomason/packer.nvim)\n```sh\nuse 'SidOfc/mkdx'\n```\n\nPack (Vim's native plugin system).\n\n**vim:**\n```sh\nmkdir -p ~/.vim/pack/plugins/start\ncd ~/.vim/pack/plugins/start\ngit clone https://github.com/SidOfc/mkdx.git\n```\n\nand then in your vimrc, add the following to the bottom:\n\n```viml\nif !has('nvim')\n  augroup MKDX\n    au!\n    au FileType markdown so $HOME/.vim/pack/plugins/start/mkdx/ftplugin/markdown.vim\n  augroup END\nendif\n```\n\nThis is required only for regular Vim, since it does not seem to load the `ftplugin/markdown.vim`\nfile when needed automatically.\n\n**neovim:**\n```sh\nmkdir -p ~/.local/config/nvim/site/pack/plugins/start\ncd ~/.local/config/nvim/site/pack/plugins/start\ngit clone https://github.com/SidOfc/mkdx.git\n```\n\n# Quick start\n\nThis plugin is extremely customizable, there are __a lot__ of [settings](#gmkdxsettings) and [examples](#examples) to go through. Some of the best settings are disabled because they might not perform on some specific setup or the functionality may interfere with other plugins who are better suited for specific tasks (e.g. highlighting is only a minor 'enhancement' in this plugin).\n\n**quick setup**\n```viml\nlet g:mkdx#settings     = { 'highlight': { 'enable': 1 },\n                        \\ 'enter': { 'shift': 1 },\n                        \\ 'links': { 'external': { 'enable': 1 } },\n                        \\ 'toc': { 'text': 'Table of Contents', 'update_on_write': 1 },\n                        \\ 'fold': { 'enable': 1 } }\nlet g:polyglot_disabled = ['markdown'] \" for vim-polyglot users, it loads Plasticboy's markdown\n                                       \" plugin which unfortunately interferes with mkdx list indentation.\n```\n\nThe above snippet enables:\n\n- Folding of inline code blocks and the table of contents\n- Makes dead link detection also check for external links instead of only checking `#` links\n- Enables \u003ckbd\u003eshift\u003c/kbd\u003e+\u003ckbd\u003eenter\u003c/kbd\u003e support for multi line list items (__please ensure__ that it works [correctly](#gmkdxsettingsentershift)).\n- Changes the default table of contents text from `TOC` to `Table of Contents`\n- Updates the table of contents automatically before saving the file\n- Enables better syntax highlighting for tables, list items, check boxes with certain states, \u003ckbd\u003ekbd\u003c/kbd\u003e tags and bold+italic markers\n\nThere is much more that can be configured, [go here](#gmkdxsettings) for an overview of the defaults or check out the examples below :)\n\n# Examples\n\n## Folds\n\n![mkdx fold table of contents and fenced code-blocks](doc/gifs/vim-mkdx-folds.gif)\n\nFolding in mkdx can be enabled by setting [`g:mkdx#settings.fold.enable`](#gmkdxsettingsfoldenable) to `1`.\nBoth the table of contents and fenced code blocks can be folded independently as well, see [`g:mkdx#settings.fold.components`](#gmkdxsettingsfoldcomponents) for more information.\nWe also see a tiny bit of [auto update](#gmkdxsettingsauto_updateenable) in this example, that shows that the new value gets applied instantly.\n\n**NOTE:** this functionality conflicts with [tpope's vim-markdown plugin](https://github.com/tpope/vim-markdown).\nWhen `g:markdown_folding = 1`, mkdx will do nothing with `foldmethod` and `foldexpr` and leave them intact for vim-markdown.\n\n## Insert mode fragment completion\n\n![mkdx insert mode fragment completion](doc/gifs/vim-mkdx-insert-completions.gif)\n\nWhen inside a link, typing a url that starts with a `#` will show a list of autocompletions based on the links of all the headers in the document.\nThis functionality uses Vim's builtin `complete` (`:h complete()`) and `completefunc` (`:h completefunc`) for autocompletions.\nUse \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003en\u003c/kbd\u003e to select the next entry and \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003ep\u003c/kbd\u003e to select the previous entry.\n\nWhen not inside a link, fragment autocompletions will not be triggered and default autocompletion is used instead.\nTo complete a fragment outside of a link, type a `#` followed by \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003en\u003c/kbd\u003e or \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003ep\u003c/kbd\u003e.\n\nInsert mode autocompletions can be disabled by setting the value of [`g:mkdx#settings.links.fragment.complete`](#gmkdxsettingslinksfragmentcomplete) to `0`.\n**note:** [`g:mkdx#settings.map.enable`](#gmkdxsettingsmapenable) must be enabled for \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003en\u003c/kbd\u003e and \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003ep\u003c/kbd\u003e mappings to be bound.\n\n```viml\n\" :h mkdx-mapping-insert-completions\n\" :h mkdx-function-insert-ctrl-n-handler\n\" :h mkdx-function-insert-ctrl-p-handler\n\" :h mkdx-function-complete-link\n\" :h mkdx-function-complete\n\" :h mkdx-plug-ctrl-n-compl\n\" :h mkdx-plug-ctrl-p-compl\n\" :h mkdx-plug-link-compl\n```\n\n## Dead link detection\n\n![mkdx dead detection](doc/gifs/vim-mkdx-find-dead-fragment-links.gif)\n\nOften when writing documentation, you'll find the need to point to some other location on the same page.\nSo you go ahead and write that fragment URL and forget about it. Later you come back to this file and you change the header (thus changing the output fragment for that header),\nbut you **forgot** you even had a link to it in the first place! A new broken link is born :/\n\nWell, no more -- Press \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003eL\u003c/kbd\u003e and Vim's `quickfix` window\nwill come to your rescue. It will compare all fragment links in the document to those of the headers and show you which ones don't match.\nNow you can safely change a header, if you want to know if you broke anything you know the mapping :)\n\nExternal links will also be checked, your (n/m/g)vim must support either Vim's `job` or Neovim's `job-control` in order for this to be enabled.\n`curl` and `git` will also be used to send requests or create an absolute path for relative links.\nSee [`g:mkdx#settings.links.external.enable`](#gmkdxsettingslinksexternalenable) for more information and other settings.\n\n```viml\n\" :h mkdx-mapping-quickfix-dead-links\n\" :h mkdx-function-quickfix-dead-links\n\" :h mkdx-plug-quickfix-links\n```\n\n## Insert fenced code block\n\n|Backtick|Tilde|\n|--------|-----|\n|![mkdx fenced codeblock backticks](doc/gifs/vim-mkdx-fenced-backtick.gif)|![mkdx fenced codeblock tilde](doc/gifs/vim-mkdx-fenced-squiggly.gif)|\n\nAs seen in the gifs, entering either 3 consecutive `` ` `` or `~` characters in _insert_ mode will complete the block\nand put the cursor at the end of the opening fence to allow adding a language. The behaviour is controlled\nby [`g:mkdx#settings.map.enable`](#gmkdxsettingsmapenable) and like other mappings, it is only mapped if no mapping exists.\n\nFence style can be controlled using [`g:mkdx#settings.tokens.fence`](#gmkdxsettingstokensfence). This allows you to use one style\nfor both `` ` `` and `~` blocks.\n\n**Note** that if you want to copy the _{rhs}_ of this mapping in a mapping in your vimrc, you will need to replace\n`\u003cC-o\u003e` with a literal `^o` character. In vim, this can be achieved by pressing \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003ev\u003c/kbd\u003e followed\nby \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003eo\u003c/kbd\u003e.\n\n```viml\n\" :h mkdx-mapping-insert-fenced-code-block\n  inoremap \u003cbuffer\u003e\u003csilent\u003e\u003cunique\u003e ~~~ ~~~\u003cEnter\u003e~~~\u003cC-o\u003ek\u003cC-o\u003eA\n  inoremap \u003cbuffer\u003e\u003csilent\u003e\u003cunique\u003e ``` ```\u003cEnter\u003e```\u003cC-o\u003ek\u003cC-o\u003eA\n```\n\n## Insert `\u003ckbd\u003e\u003c/kbd\u003e` shortcut\n\n![mkdx insert keyboard shortcut](doc/gifs/vim-mkdx-insert-kbd.gif)\n\nThis mapping works in _insert_ mode by pressing \u003ckbd\u003e\\\u003c\u003c/kbd\u003e+\u003ckbd\u003etab\u003c/kbd\u003e.\nThis mapping is just a regular `imap` that inserts `\u003ckbd\u003e\u003c/kbd\u003e` and puts your cursor in the tag afterwards.\nThe behaviour is controlled by [`g:mkdx#settings.map.enable`](#gmkdxsettingsmapenable) and like other mappings,\nit is only mapped if no mapping exists.\n\n**Note** that if you want to copy the _{rhs}_ of this mapping in a mapping in your vimrc, you will need to replace\n`\u003cC-o\u003e` with a literal `^o` character. In vim, this can be achieved by pressing \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003ev\u003c/kbd\u003e followed\nby \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003eo\u003c/kbd\u003e.\n\n```viml\n\" :h mkdx-mapping-insert-kbd-shortcut\nimap \u003cbuffer\u003e\u003csilent\u003e\u003cunique\u003e \u003c\u003cTab\u003e \u003ckbd\u003e\u003c/kbd\u003e\u003cC-o\u003e2h\u003cC-o\u003ecit\n```\n\n## Inserting list items\n\n|Unordered|Numbered|\n|---------|--------|\n|![mkdx unordered list](doc/gifs/vim-mkdx-unordered-list.gif)|![mkdx numbered list](doc/gifs/vim-mkdx-numbered-list.gif)|\n\nWhen [`g:mkdx#settings.enter.enable`](#gmkdxsettingsenterenable) is set (default on), new list tokens will be inserted when\nediting a markdown list. This happens on any \u003ckbd\u003eenter\u003c/kbd\u003e in _insert_ mode or \u003ckbd\u003eo\u003c/kbd\u003e and \u003ckbd\u003eO\u003c/kbd\u003e in normal mode by default.\nAdditionally, if the list item contains a checkbox (`[ ]` - any state possible) that will also be appended to\nthe newly inserted item.\n\nSometimes, you might need to write a multi-line list item, this can be achieved by enabling [`g:mkdx#settings.enter.shift`](#gmkdxsettingsentershift).\nOnce enabled, pressing \u003ckbd\u003eshift\u003c/kbd\u003e+\u003ckbd\u003eenter\u003c/kbd\u003e will place the cursor on a new line, indented to where the text started on the previous line.\nPress \u003ckbd\u003eshift\u003c/kbd\u003e+\u003ckbd\u003eenter\u003c/kbd\u003e while you want to add lines to the current item, a regular \u003ckbd\u003eenter\u003c/kbd\u003e will create a new list item at the\nprevious indentation level.\n\n```viml\n\" :h mkdx-mapping-list-items\n\" :h mkdx-setting-enter-enable\n\" :h mkdx-setting-enter-shift\n\" :h mkdx-setting-tokens-list\n\" :h mkdx-function-enter-handler\n\" :h mkdx-function-shift-enter-handler\n```\n\n## Indenting / unindenting numbered list items\n\n![mkdx indent/unindent list items](doc/gifs/indent-unindent-list-items.gif)\n\nNumbered list items will be renumbered upon indenting / unindenting. The algorithm for this is still pretty basic\nbut attempts to ensure correct nesting. This feature uses \u003ckbd\u003etab\u003c/kbd\u003e and \u003ckbd\u003eshift\u003c/kbd\u003e+\u003ckbd\u003etab\u003c/kbd\u003e\nto indent and unindent respectively.\n\nWhen [`g:mkdx#settings.insert_indent_mappings`](#gmkdxsettingsinsert_indent_mappings) is enabled insert mode\nindent and unindent using \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003et\u003c/kbd\u003e and \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003ed\u003c/kbd\u003e will\nalso renumber numbered markdown lists.\n\n```viml\n\" :h mkdx-mapping-list-items\n\" :h mkdx-function-indent-handler\n\" :h mkdx-function-insert-indent-handler\n```\n\n## Toggling lines from / to task items\n\n![mkdx toggle checkbox line](doc/gifs/vim-mkdx-toggle-checkbox-line.gif)\n\nCheckboxes can be toggled using \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003et\u003c/kbd\u003e.\nThis will cause a checkbox to be prepended before the line if it doesn't exist.\nThe checkbox will be removed instead, if it exists. The initial state can be defined using [`g:mkdx#settings.checkbox.initial_state`](#gmkdxsettingscheckboxinitial_state).\n\nWhen toggling a checkbox in a list or checklist, the checkbox will be added / removed accordingly:\n\n```\n- list item           =\u003e - [ ] list item\n- [ ] checklist item  =\u003e - checklist item\n* [ ] checklist item  =\u003e * checklist item\n1. [ ] checklist item =\u003e 1. checklist item\n```\n\n**Note:** the list / checklist support has been added in version *0.4.1*. Prior to that,\nthe checkbox would be inserted at the start of the line instead of after the list token.\n\n```viml\n\" :h mkdx-mapping-toggle-checkbox\n\" :h mkdx-function-toggle-checkbox-task\n```\n\n## Toggling lines from / to list items\n\n![mkdx toggle list line](doc/gifs/vim-mkdx-toggle-list-line.gif)\n\nLists can be toggled using \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003el\u003c/kbd\u003e\u003ckbd\u003el\u003c/kbd\u003e.\nThis will cause a [list token](#gmkdxsettingstokenslist) to be inserted. When present, it will be removed.\n\nWhen toggling a checkbox or a checklist item, the list token will be added / removed accordingly:\n\n```\n[ ] checkbox item     =\u003e - [ ] checkbox item\n- [ ] checklist item  =\u003e - checklist item\n* [ ] checklist item  =\u003e * checklist item\n1. [ ] checklist item =\u003e 1. checklist item\n```\n\n**Note:** the checklist support has been added in version *0.4.1*. Prior to that,\ntokens other than [`g:mkdx#settings.tokens.list`](#gmkdxsettingstokenslist) weren't toggled.\n\n```viml\n\" :h mkdx-mapping-toggle-list\n\" :h mkdx-function-toggle-list\n```\n\n## Toggling lines from / to checklist items\n\n![mkdx toggle checklist line](doc/gifs/vim-mkdx-toggle-checklist-line.gif)\n\nChecklists can be toggled using \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003el\u003c/kbd\u003e\u003ckbd\u003et\u003c/kbd\u003e.\nThis will cause a [list token](#gmkdxsettingstokenslist) followed by a checkbox to be prepended before the line if it doesn't exist.\nIf it is already present, it will be removed. Like [Checkboxes](#completing-checkboxes--checklists), the initial state of the checkbox can be defined using: [`g:mkdx#settings.checkbox.initial_state`](#gmkdxsettingscheckboxinitial_state).\n\nIf the current line or selection is one or multiple list items, a checkbox with state of [`g:mkdx#settings.checkbox.initial_state`](#gmkdxsettingscheckboxinitial_state) will be added:\n\n```\n- list item  =\u003e - [ ] list item\n* list item  =\u003e * [ ] list item\n1. list item =\u003e 1. [ ] list item\n```\n\nIf the current line or selection is one or multiple checkboxes, a [`g:mkdx#settings.tokens.list`](#gmkdxsettingstokenslist) will be added.\nAny state the checkbox is in will be preserved:\n\n```\n[ ] list item  =\u003e - [ ] list item\n[x] list item  =\u003e - [x] list item\n```\n\n**note:** the list item / checkbox support has been added in version *0.4.1*. Prior to that,\ntoggling checklists only performed a check to see if a checklist item was present or not.\n\n```viml\n\" :h mkdx-mapping-toggle-checklist\n\" :h mkdx-function-toggle-checklist\n```\n\n## Completing Checkboxes / Checklists\n\n**Single checkbox:**\n![mkdx toggle checkbox](doc/gifs/vim-mkdx-toggle-checkbox-colors.gif)\n\n**Checkbox in checklist:**\n![mkdx update checklist](doc/gifs/vim-mkdx-checklist-updater-colors.gif)\n\nCheckboxes can be checked using \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e=\u003c/kbd\u003e and \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e-\u003c/kbd\u003e.\nchecking a checkbox means going to the previous or next mark in the list of [`g:mkdx#settings.checkbox.toggles`](#gmkdxsettingscheckboxtoggles).\nWhen checking an item which is nested in a list, the parent and child list items will be updated as well.\nAutomatic updating of checkboxes can be disabled by setting [`g:mkdx#settings.checkbox.update_tree`](#gmkdxsettingscheckboxupdate_tree).\nAll manipulations work fine in visual as well as normal mode.\n\nYou can also see that the checkboxes are highlighted differently depending on state. This is an _opt-in_ setting which you must enable explicitly in your vimrc.\nSee [`g:mkdx#settings.highlight.enable`](#gmkdxsettingshighlightenable) for more information.\n\nA file might not always be indented correctly, the solution to this is [`g:mkdx#settings.enter.malformed`](#gmkdxsettingsentermalformed).\nThis setting is enabled by default, it rounds invalid (indentation not divisible by `:h shiftwidth`) either up or down\nto the nearest indentation level. In the examples below, the `shiftwidth` is set to `4`. The second item is indented by `3` spaces and the\nthird item is indented by `5` spaces. since `3` is closer to `4` than `0`, it will become `4`. In the case of `5`, it's closer to `4` than `8`\nand will also become `4`.\n\n| off | on |\n|:---:|:--:|\n|![mkdx toggle checkbox malformed off](doc/gifs/vim-mkdx-checklist-malformed-off-colors.gif)|![mkdx toggle checkbox malformed on](doc/gifs/vim-mkdx-checklist-malformed-on-colors.gif)|\n\n```viml\n\" :h mkdx-mapping-toggle-checkbox-forward\n\" :h mkdx-mapping-toggle-checkbox-backward\n\" :h mkdx-function-toggle-checkbox\n```\n\n## Toggling and promoting / demoting Headers\n\n![mkdx toggle header](doc/gifs/vim-mkdx-toggle-heading.gif)\n\nIncrement or decrement a heading with \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e\\[\u003c/kbd\u003e and \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e\\]\u003c/kbd\u003e.\nAs can be seen in the gif, headings can be toggled as well as promoted / demoted with these mappings.\nThe header character can be changed using [`g:mkdx#settings.tokens.header`](#gmkdxsettingstokensheader).\n\n```viml\n\" :h mkdx-mapping-increment-header-level\n\" :h mkdx-mapping-decrement-header-level\n\" :h mkdx-function-toggle-header\n```\n\n## Toggling \\\u003ckbd /\u003e shortcuts\n\n![mkdx toggle kbd shortcuts](doc/gifs/vim-mkdx-toggle-kbd.gif)\n\n**Note:** *does not work with multiline selection*\n\nQuickly toggle plain text shortcuts to markdown shortcuts and back with \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e'\u003c/kbd\u003e.\n\n```viml\n\" :h mkdx-mapping-toggle-kbd-shortcut\n\" :h mkdx-function-toggle-to-kbd\n```\n\n## Toggling Quotes\n\n![mkdx toggle quotes](doc/gifs/vim-mkdx-toggle-quote.gif)\n\nToggle quotes on the current line or a visual selection with \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e'\u003c/kbd\u003e.\n\n```viml\n\" :h mkdx-mapping-toggle-quote\n\" :h mkdx-function-toggle-quote\n```\n\n**Typing a multi-paragraph quote**\n\nIn some cases you may want to quote more than one line or block of text.\nTo cover this case, typing an additional space followed by an enter after\nan empty quote line will keep the symbol and create a new empty quote line below it:\n\n```markdown\n\u003e this is some text in a quote\n\u003e  \n\u003e \n```\n\n## Toggle links\n\n![mkdx wrap text in link](doc/gifs/vim-mkdx-wrap-link.gif)\n\nWrap the word under the cursor or a visual selection in an empty markdown link\nwith \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003el\u003c/kbd\u003e\u003ckbd\u003en\u003c/kbd\u003e. You'll end up in **insert** mode with your\ncursor between the parens, e.g. `(|)` where the pipe (`|`) character is the cursor.\n\nThis mapping also takes a count, like the other wrap mappings [bold / italic / inline-code / strikethrough](#toggle-as-bold--italic--inline-code--strikethrough).\nDoing this will wrap _count_ words [from](https://link.com) cursor position in a link.\n\nAdditionally, as of version **1.9.2, regular** markdown links (not images!) can also be removed using \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003el\u003c/kbd\u003e\u003ckbd\u003en\u003c/kbd\u003e.\n_count_ will be ignored when removing a link.\n\nIf what you're wrapping is an image (only works with visual selections at the moment), an image link will be created\ninstead. To disable this behaviour, see: [`g:mkdx#settings.image_extension_pattern`](#gmkdxsettingsimage_extension_pattern).\n\n```viml\n\" :h mkdx-mapping-wrap-text-in-link\n\" :h mkdx-function-wrap-link\n```\n\n## Toggle as bold / italic / inline-code / strikethrough\n\n**Normal mode**\n![mkdx wrap text in bold / italic / inline-code / strikethrough normal](doc/gifs/vim-mkdx-wrap-text-normal.gif)\n\n**Visual mode**\n![mkdx wrap text in bold / italic / inline-code / strikethrough visual](doc/gifs/vim-mkdx-wrap-text-visual.gif)\n\nToggle the word (anywhere) under the cursor or a visual selection using the following mappings:\n\n- \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e/\u003c/kbd\u003e =\u003e *italic*\n- \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003eb\u003c/kbd\u003e =\u003e **bold**\n- \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e\\`\u003c/kbd\u003e =\u003e `inline code`\n- \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003es\u003c/kbd\u003e =\u003e \u003cstrike\u003estrikethrough\u003c/strike\u003e\n\nAs with all other mappings, all the *normal* mode mappings are repeatable.\nmkdx also supports supplying an optional _count_ to these mappings, e.g.\n\nGiven text `Hello world` where the cursor can be anywhere inside the first word\n\u003ckbd\u003e2\u003c/kbd\u003e+\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003eb\u003c/kbd\u003e will\nwrap both `Hello` and `world`: `**Hello world**`. This works for all the mappings above.\n\nAs of version **1.9.2** mkdx also supports unwrapping of wrapped text in italic / bold / inline-code / strikethrough styles.\nWhen unwrapping, mkdx ignores any supplied _count_ arguments.\n\n**NOTE:** mkdx wraps using Vim's 'word' (`:h word`), sometimes 'word' will not include command\ncharacters such as `-` which means mkdx may fail to wrap `hello-world` as one word.\nTo fix this the `iskeyword` option can be overridden to include `-` or any other character:\n\n```viml\naugroup markdown\n    autocmd!\n    \" Include dash in 'word'\n    autocmd FileType markdown setlocal iskeyword+=-\naugroup END\n```\n\n## Convert CSV to table (and back)\n\n![mkdx convert csv to table](doc/gifs/vim-mkdx-tableize.gif)\n\nConvert visually selected CSV rows to a markdown table with \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e,\u003c/kbd\u003e.\nThe first row will be used as a header. A separator will be inserted below the header. Default and specific column alignment options are also available, see: [`g:mkdx#settings.table.align`](#gmkdxsettingstablealign) for more.\nThe divider (`|`) as well as the header divider (`-`) can be changed with [`g:mkdx#settings.table.divider`](#gmkdxsettingstabledivider)\nand [`g:mkdx#settings.table.header_divider`](#gmkdxsettingstableheader_divider). The above example contains a simple unqouted example but as of version _1.4.2_, quoted CSV is also supported.\n\n```viml\n\" :h mkdx-mapping-csv-to-markdown-table\n\" :h mkdx-setting-table-align\n\" :h mkdx-setting-table-divider\n\" :h mkdx-setting-table-header-divider\n\" :h mkdx-function-tableize\n```\n\n## Jump to header\n\n\n![mkdx jump to header](doc/gifs/vim-mkdx-jump-to-header.gif)\n\nPress \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003ej\u003c/kbd\u003e to jump to a fragment identifier within the document.\nEvery link starting with a `#` symbol is considered a fragment identifier. **Markdown**, **wiki links**, and **HTML** formats are supported.\nBefore performing a jump, the current cursor position will be added to the jumplist (`:h jumplist`).\nThis allows you to jump back and forth between that header and the selected link using \u003ckbd\u003e\\`\u003c/kbd\u003e\u003ckbd\u003e\\`\u003c/kbd\u003e.\nThis behaviour can be disabled by overriding [`g:mkdx#settings.links.fragment.jumplist`](#gmkdxsettingslinksfragmentjumplist).\n\n```viml\n\" :h mkdx-setting-links-fragment-jumplist\n\" :h mkdx-plug-jump-to-header\n\" :h mkdx-function-jump-to-header\n\" :h mkdx-mapping-jump-to-header\n```\n\n## Jump to next / previous header\n\nUse \u003ckbd\u003e]\u003c/kbd\u003e\u003ckbd\u003e]\u003c/kbd\u003e to jump to the next header and \u003ckbd\u003e[\u003c/kbd\u003e\u003ckbd\u003e[\u003c/kbd\u003e to\njump to the previous header. Both mappings support counts and do not wrap around.\n\n## Generate or update TOC\n\n![mkdx generate or update table of contents](doc/gifs/vim-mkdx-gen-or-upd-toc.gif)\n\nPress \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003ei\u003c/kbd\u003e to insert a table of contents\nat cursor position if one does not exist, otherwise updates the existing TOC.\nthe text used in the heading can be changed using [`g:mkdx#settings.toc.text`](#gmkdxsettingstoctext) and the\nlist style can be changed using [`g:mkdx#settings.toc.list_token`](#gmkdxsettingstoclist_token).\nStuff inside fenced code blocks is excluded too.\n\nIf you want to place the TOC always as the _[N]th_ header, see [`g:mkdx#settings.toc.position`](#gmkdxsettingstocposition).\n\n```viml\n\" :h mkdx-mapping-generate-or-update-toc\n\" :h mkdx-function-generate-toc\n\" :h mkdx-function-update-toc\n\" :h mkdx-function-generate-or-update-toc\n```\n\n## Generate or update TOC as `\u003cdetails\u003e`\n\n![mkdx generate or update table of contents as details](doc/gifs/vim-mkdx-gen-or-upd-toc-details.gif)\n\nGithub supports the `\u003cdetails\u003e` and `\u003csummary\u003e` tags! With these, we can make an expandable table of contents (like this README).\nUnfortunately though, markdown isn't supported inside the `\u003cdetails\u003e` tag, not even with `markdown=1` (not from what I've tried anyway, let me know if you do!).\nSo instead the TOC itself will be rendered as HTML nested `\u003cul\u003e` tags with `\u003cli\u003e\u003ca\u003e\u003c/a\u003e\u003c/li\u003e` tags.\n\n**NOTE:** This requires you to enable [`g:mkdx#settings.toc.details.enable`](#gmkdxsettingstocdetailsenable)!\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand example\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"\"\u003emkdx.vim\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"\"\u003eTOC\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"\"\u003eInstall\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"\"\u003eExamples\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"\"\u003eChangelog\u003c/a\u003e\u003cul\u003e\n\u003cli\u003e\u003ca href=\"\"\u003e31-03-2018 VERSION 1.1.0\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"\"\u003e25-03-2018 VERSION 1.0.2\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"\"\u003e24-03-2018 VERSION 1.0.1\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n**Note:** When wrapping the TOC inside a details tag, you can optionally wrap nested items with a lot of children by using [g:mkdx#settings.toc.details.nesting_level](#gmkdxsettingstocdetailsnesting_level) and [g:mkdx#settings.toc.details.child_count](#gmkdxsettingstocdetailschild_count).\nCheck the [Table of Contents](#table-of-contents) for an example :)\n\n## Open TOC in quickfix window\n\n![mkdx open toc in quickfix](doc/gifs/vim-mkdx-toggle-qf.gif)\n\nPress \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003eI\u003c/kbd\u003e to load all the markdown headers in a quickfix window.\nYou can jump around using regular quickfix commands afterwards, as shown in the gif using `:cn` for example.\n\n```viml\n\" :h mkdx-mapping-quickfix-table-of-contents\n\" :h mkdx-function-quickfix-headers\n```\n\n## Open TOC using [fzf](https://github.com/junegunn/fzf.vim) instead of quickfix window\n\n![mkdx open toc using fzf](doc/gifs/vim-mkdx-fzf-goto-header.gif)\n\nThis is not built-in to the plugin but I just thought \"why not, I'd use that\".\nSo I started working on a little snippet in my [vimrc](https://github.com/SidOfc/dotfiles/blob/76393e2881c5577a316698eafb73c7dae36984bd/.vimrc#L340-L359) (included some comments here):\n\n```viml\nfun! s:MkdxGoToHeader(header)\n    \" given a line: '  84: # Header'\n    \" this will match the number 84 and move the cursor to the start of that line\n    call cursor(str2nr(get(matchlist(a:header, ' *\\([0-9]\\+\\)'), 1, '')), 1)\nendfun\n\nfun! s:MkdxFormatHeader(key, val)\n    let text = get(a:val, 'text', '')\n    let lnum = get(a:val, 'lnum', '')\n\n    \" if the text is empty or no lnum is present, return the empty string\n    if (empty(text) || empty(lnum)) | return text | endif\n\n    \" We can't jump to it if we dont know the line number so that must be present in the outpt line.\n    \" We also add extra padding up to 4 digits, so I hope your markdown files don't grow beyond 99.9k lines ;)\n    return repeat(' ', 4 - strlen(lnum)) . lnum . ': ' . text\nendfun\n\nfun! s:MkdxFzfQuickfixHeaders()\n    \" passing 0 to mkdx#QuickfixHeaders causes it to return the list instead of opening the quickfix list\n    \" this allows you to create a 'source' for fzf.\n    \" first we map each item (formatted for quickfix use) using the function MkdxFormatHeader()\n    \" then, we strip out any remaining empty headers.\n    let headers = filter(map(mkdx#QuickfixHeaders(0), function('\u003cSID\u003eMkdxFormatHeader')), 'v:val != \"\"')\n\n    \" run the fzf function with the formatted data and as a 'sink' (action to execute on selected entry)\n    \" supply the MkdxGoToHeader() function which will parse the line, extract the line number and move the cursor to it.\n    call fzf#run(fzf#wrap(\n            \\ {'source': headers, 'sink': function('\u003cSID\u003eMkdxGoToHeader') }\n          \\ ))\nendfun\n\n\" finally, map it -- in this case, I mapped it to overwrite the default action for toggling quickfix (\u003cPREFIX\u003eI)\nnnoremap \u003csilent\u003e \u003cLeader\u003eI :call \u003cSID\u003eMkdxFzfQuickfixHeaders()\u003cCr\u003e\n```\n\n## Using the menu\n\nThe plugin comes with builtin `menu` support if your vim `has('menu')`.\nThe menu will become available _after_ you've opened a file with a **filetype** of `markdown`.\nActions can be executed from the menu in MacVim. More information about each mapping can be found in the Vim / Neovim versions.\n\n|MacVim|NeoVim / Vim|\n|------|------------|\n|![mkdx macvim menu](https://user-images.githubusercontent.com/3225058/34798278-b36d8be0-f65b-11e7-90c0-10904ea76820.png)|![mkdx neovim / vim menu](https://user-images.githubusercontent.com/3225058/34798254-9f685ff8-f65b-11e7-97ee-135d438b5a91.png)|\n\nTo view the menu in NeoVim / Vim, run (_after_ opening a markdown file):\n\n```viml\n\" :h mkdx-menu\n:menu Plugin.mkdx\n```\n\n# `g:mkdx#settings`\n\n**IMPORTANT**: _within your .vimrc / config/nvim/init.vim files you will not be able to use the 'short' `g:mkdx#settings.setting.name` style. these are only intended to be used in EX mode (when typing a `:` command)_.\n\nAll the settings used in mkdx are defined in a `g:mkdx#settings` hash.\nIf you still have other `g:mkdx#` variables in your _.vimrc_, they should be replaced with an entry in `g:mkdx#settings` instead.\nGoing forward, no new `g:mkdx#` variables will be added, **only** `g:mkdx#settings` will be extended.\nTo see a mapping of new settings from old variables, see [this README](https://github.com/SidOfc/mkdx/blob/1a80ab700e6a02459879a8fd1e9e26ceca4f52c4/README.md#gmkdxsettings).\nFor a full list of defaults, visit `:h mkdx-settings`, for an overview of all settings visit `:h mkdx-toc-settings`\nTo overwrite a setting, write it as seen in `:h mkdx-settings` in your _.vimrc_:\n\n```viml\n\" :h mkdx-settings\nlet g:mkdx#settings = { 'enter': { 'enable': 0 } }\n```\n\n**NOTE:** The method used above somewhat relies on `exists('*dictwatcheradd')` which is Neovim only.\nIf you intend to `:so %` your `.vimrc` file, please use the following instead:\n\n```viml\n\" :h mkdx-settings\ncall mkdx#configure({ 'enter': { 'enable': 0 } })\n```\n\nThe above will disable the [`g:mkdx#settings.enter.enable`](#gmkdxsettingsenterenable) setting.\nFor backwards compatibility, `g:mkdx#` variables are merged into the defaults.\nThis happens before any `g:mkdx#settings` hash defined in _.vimrc_ is merged with the defaults.\nSo while `g:mkdx#` variables still work, they are overwritten when you explicitly define them in\na `g:mkdx#settings` variable.\n\nSettings defined in _.vimrc_ are merged with the defaults during initial loading of the plugin.\nTo overwrite a setting while editing:\n\n```viml\n\" :h mkdx-settings\n:let g:mkdx#settings.enter.enable = 0\n```\n\n## `g:mkdx#settings.insert_indent_mappings`\n\nThis setting is off by default. When enabled, this will allow \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003et\u003c/kbd\u003e and \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003ed\u003c/kbd\u003e\nto renumber numbered markdown lists.\n\n```viml\n\" :h mkdx-setting-insert-indent-mappings\n:let g:mkdx#settings.insert_indent_mappings = 0\n```\n\n## `g:mkdx#settings.gf_on_steroids`\n\nmkdx enhances \u003ckbd\u003eg\u003c/kbd\u003e\u003ckbd\u003ef\u003c/kbd\u003e and \u003ckbd\u003eg\u003c/kbd\u003e\u003ckbd\u003ex\u003c/kbd\u003e within markdown buffers.\nThe main difference is that you can open files / urls / images with the cursor positioned anywhere\nin a markdown link. Additionally, these mappings can also be used in visual mode and\nwill be applied to the current selection in that case. Otherwise they will work normally.\n\nBy enabling this setting, these two mappings are merged into one, so both \u003ckbd\u003eg\u003c/kbd\u003e\u003ckbd\u003ef\u003c/kbd\u003e and \u003ckbd\u003eg\u003c/kbd\u003e\u003ckbd\u003ex\u003c/kbd\u003e\nwill work exactly the same. Functionalities from both will work for each mapping, so you can now\nuse \u003ckbd\u003eg\u003c/kbd\u003e\u003ckbd\u003ef\u003c/kbd\u003e OR \u003ckbd\u003eg\u003c/kbd\u003e\u003ckbd\u003ex\u003c/kbd\u003e to open local files as well as urls / images externally.\n\nmkdx uses [g:mkdx#settings.image_extension_pattern](#gmkdxsettingsimage_extension_pattern) to determine\nwether or not a file is an image and should be opened by an external application.\n\nFor other files such as `doc` or `pdf` mkdx relies on the [`file`](https://man7.org/linux/man-pages/man1/file.1.html)\ncommand to determine if a file should be opened inside (n)vim or using for example libreoffice.\n\nmkdx uses `open` / `xdg-open` behind the scenes, on macOS this will work out of the box,\non linux make sure the [`xdg-utils`](https://www.freedesktop.org/wiki/Software/xdg-utils/) package\nis installed and that you can run `open https://github.com`.\n`xdg-utils` can be installed by running `sudo apt install xdg-utils` in your terminal.\n\n```viml\n\" :h mkdx-setting-gf-on-steroids\n\" :h mkdx-mapping-jump-to-file\n\" :h mkdx-mapping-open-external-file\n:let g:mkdx#settings.gf_on_steroids = 0\n```\n\n## `g:mkdx#settings.links.external.enable`\n\nCheck external links in the background is disabled by default.\nHTTP requests will be sent using a `curl` command with the following layout:\n\n```sh\ncurl -L -I -s --no-keepalive -o /dev/null -A [g:mkdx#settings.links.external.user_agent] -m [g:mkdx#settings.links.external.timeout] -w \"%{http_code}\" [URL]'\n```\n\nAs can be seen from the example two additional settings are used in this request:\n\n- `-m` gets set to [`g:mkdx#settings.links.external.timeout`](#gmkdxsettingslinksexternaltimeout)\n- `-A` gets set to [`g:mkdx#settings.links.external.user_agent`](#gmkdxsettingslinksexternaluser_agent)\n\nWhen a relative URL is encountered, mkdx attempts to convert it to an absolute path.\nThis only works inside a `git` repository at the moment, `git ls-remote` output will be used to do the conversion.\nYou can override this behaviour by setting a custom host with [`g:mkdx#settings.links.external.host`](#gmkdxsettingslinksexternalhost).\nRelative link checking can be disabled all together by setting [`g:mkdx#settings.links.external.relative`](#gmkdxsettingslinksexternalrelative) to `0`;\n\n```viml\n\" :h mkdx-setting-links-external-enable\nlet g:mkdx#settings = { 'links': { 'external': { 'enable': 0 } } }\n```\n\n## `g:mkdx#settings.links.external.timeout`\n\nThis is the maximum time in seconds a request may take. By default it is set to `3`. After this time, the request is cancelled and added to the quickfix list.\n\n```viml\n\" :h mkdx-setting-links-external-timeout\nlet g:mkdx#settings = { 'links': { 'external': { 'timeout': 3 } } }\n```\n\n## `g:mkdx#settings.links.external.host`\n\nWhen a host is supplied, mkdx will not attempt to do `git ls-remote` detection and instead, prepends host string provided to any absolute or relative link url.\nSince these links can either be _relative_ (url) or _absolute_ (/url) some additional checks are executed to prevent double slashes e.g: `localhost:3000//url`.\nTherefore you can safely append or remove a trailing `/` from your host.\n\nAs an example, say you have the following markdown link in your README.md file:\n\n```markdown\nSee [CONTRIBUTING](/CONTRIBUTING.md)\n```\n\nThe `git ls-remote` command will be executed to construct a base for the relative link. both SSH and HTTP hosts are parsed to a base URL.\nAdditionally, when constructing the base, we need to know the current branch since for example, github appends `blob/[BRANCHNAME]` to every URL as well.\nTo extract this information, a `git branch` command is run.\nThe output link will look like this:\n\n```html\nSee \u003ca href=\"https://github.com/sidofc/mkdx/blob/master/CONTRIBUTING.md\"\u003eCONTRIBUTING\u003c/a\u003e\n```\n\nIf you're running a static site generator and would like to know if every link works, you can set it like so:\n\n```viml\n:let g:mkdx#settings.links.external.host = 'localhost:5000'\n```\n\nUsing the same link as an example, the output link will instead, look like this:\n\n```html\nSee \u003ca href=\"http://localhost:5000/CONTRIBUTING.md\"\u003eCONTRIBUTING\u003c/a\u003e\n```\n\nThe host can be changed at any given time during runtime, the next time a dead link check is run, the new host will be used instead.\n\n```viml\n\" :h mkdx-setting-links-external-host\nlet g:mkdx#settings = { 'links': { 'external': { 'host': '' } } }\n```\n\n## `g:mkdx#settings.links.external.relative`\n\nWhen set to `0`, relative links will be ignored while checking the document for dead links.\nRelative URL's are defined as link paths that do not start with a `#` (fragment URL) or `http` (protocol).\nTherefore both _relative_ (url) and _absolute_ (/url) URL's are \"relative\" in this context, as no host is provided.\nWhen [`g:mkdx#settings.links.external.host`](#gmkdxsettingslinksexternalhost) is empty, mkdx attempts to construct an absolute path using `git ls-remote` output.\n\n```viml\n\" :h mkdx-setting-links-external-relative\nlet g:mkdx#settings = { 'links': { 'external': { 'relative': 1 } } }\n```\n\n## `g:mkdx#settings.links.external.user_agent`\n\nSpecify an actual user agent to prevent being blocked from a website.\nIf you don't like being `Chrome/9001` then feel free to change it into anything you like :)\n\n```viml\n\" :h mkdx-setting-links-external-ua\nlet g:mkdx#settings = { 'links': { 'external': { 'user_agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/9001.0.0000.000 vim-mkdx/1.10.0' } } }\n```\n\n## `g:mkdx#settings.links.conceal`\n\nWhen `conceallevel=2` mkdx hides link URLs by default. This can be disabled by setting\n`g:mkdx#settings.links.conceal` to `0`.\n\n```viml\n\" :h mkdx-setting-links-conceal\nlet g:mkdx#settings = { 'links': { 'conceal': 1 } }\n```\n\n## `g:mkdx#settings.links.fragment.jumplist`\n\nSpecify wether or not to add the cursor position _before jumping_ to the jumplist (`:h jumplist`).\nThis setting is enabled by default, set it to `0` to disable.\n\n```viml\n\" :h mkdx-setting-links-fragment-jumplist\n\" :h mkdx-function-jump-to-header\n\" :h mkdx-plug-jump-to-header\nlet g:mkdx#settings = { 'links': { 'fragment': { 'jumplist': 1 } } }\n```\n\n## `g:mkdx#settings.links.fragment.complete`\n\nAutocomplete fragment links in [_insert_ mode](#insert-mode-fragment-completion).\nSet to `0` to disable, [`g:mkdx#settings.map.enable`](#gmkdxsettingsmapenable) must be enabled for \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003en\u003c/kbd\u003e and \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003ep\u003c/kbd\u003e to be mapped.\n\nThis setting is [auto updated](#gmkdxsettingsauto_updateenable) when available.\n\n```viml\n\" :h mkdx-setting-links-fragment-complete\nlet g:mkdx#settings = { 'links': { 'fragment': { 'complete': 1 } } }\n```\n\n## `g:mkdx#settings.links.fragment.pumheight`\n\nConfigure the `pumheight`. Default `15`. Set to `0` to prevent `pumheight` from being modified.\n\n```viml\n\" :h mkdx-setting-links-fragment-pumheight\nlet g:mkdx#settings = { 'links': { 'fragment': { 'pumheight': 15 } } }\n```\n\n## `g:mkdx#settings.links.fragment.completeopt`\n\nConfigure the `completeopt` used for fragment completion. Default `noinsert,menuone`.\nSet to `0` to prevent `completeopt` from being modified.\n\nIf you have set `completeopt` in your vimrc you may want to set this to `0` to\npersist your own preferences while editing markdown files.\n\n```viml\n\" :h mkdx-setting-links-fragment-completeopt\nlet g:mkdx#settings = { 'links': { 'fragment': { 'completeopt': 'noinsert,menuone' } } }\n```\n\n## `g:mkdx#settings.image_extension_pattern`\n\nDefines the extensions to search for when identifying the type of link that\nwill be generated when [wrapping text in a link](#toggle-links). Setting it to an empty string\ndisables image wrapping and a regular empty markdown link will be used instead.\n\n```viml\n\" :h mkdx-setting-image-extension-pattern\nlet g:mkdx#settings = { 'image_extension_pattern': 'a\\?png\\|jpe\\?g\\|gif' }\n```\n\n## `g:mkdx#settings.restore_visual`\n\nThis setting enables the restoration of the last visual selection after performing an action in visual mode:\n\n```viml\n\" :h mkdx-setting-restore-visual\nlet g:mkdx#settings = { 'restore_visual': 1 }\n```\n\n## `g:mkdx#settings.map.prefix`\n\nAll mappings are prefixed with a single prefix key.\nIf a mapping contains \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e key, it is the value of this variable.\nIf you do not like the default (`\u003cleader\u003e`) you can override it:\n\n```viml\n\" :h mkdx-setting-map-prefix\nlet g:mkdx#settings = { 'map': { 'prefix': '\u003cleader\u003e' } }\n```\n\n## `g:mkdx#settings.map.enable`\n\nIf you'd rather full control over what is mapped, you can opt-out all together by setting it to `0`.\nNote: that the plugin checks if a keybind exists before creating it. Mappings defined in your _.vimrc_ will not be overwritten.\n\n```viml\n\" :h mkdx-setting-map-enable\nlet g:mkdx#settings = { 'map': { 'enable': 1 } }\n```\n\n## `g:mkdx#settings.checkbox.toggles`\n\nDefines the list of states to use when toggling a checkbox.\nIt can be set to a list of your choosing. Special characters must be escaped!\nAlso, the list of toggles **must** contain at the very least, 2 items!\n\n```viml\n\" :h mkdx-setting-checkbox-toggles\nlet g:mkdx#settings = { 'checkbox': { 'toggles': [' ', '-', 'x'] } }\n\n\" GFM supported list (e.g. on GitHub)\nlet g:mkdx#settings = { 'checkbox': { 'toggles': [' ', 'x'] } }\n```\n\n## `g:mkdx#settings.checkbox.update_tree`\n\nWith this setting on, checkboxes that are toggled within checklists (lists of checkboxes) cause parent and child list items\nto be updated automatically. The states from [`g:mkdx#settings.checkbox.toggles`](#gmkdxsettingscheckboxtoggles) are used to check and\nupdate the statusses of any parents. Children are force updated to the same token of their parent. To disable this behaviour\nentirely, set this value to `0`. If you do not want children to be updated, set this value to `1` instead.\n\n```viml\n\" :h mkdx-setting-checkbox-update-tree\nlet g:mkdx#settings = { 'checkbox': { 'update_tree': 2 } }\n```\n\n## `g:mkdx#settings.checkbox.initial_state`\n\nWhen toggling between checkbox/checklist lines, this defines\nwhat the default value of each inserted checkbox should be.\n\n```viml\n\" :h mkdx-setting-checkbox-initial-state\nlet g:mkdx#settings = { 'checkbox': { 'initial_state': ' ' } }\n```\n\n## `g:mkdx#settings.checkbox.match_attrs`\n\nAdd custom attributes to the `syn match` statements of the following highlight groups:\n\n- `mkdxCheckboxEmpty`\n- `mkdxCheckboxPending`\n- `mkdxCheckboxComplete`\n\n```viml\n\" :h mkdx-setting-checkbox-match-attrs\nlet g:mkdx#settings = { 'checkbox': {\n  \\ 'match_attrs': {\n  \\   'mkdxCheckboxEmpty': '',\n  \\   'mkdxCheckboxPending': '',\n  \\   'mkdxCheckboxComplete': '',\n  \\ }\n  \\ } }\n```\n\n## `g:mkdx#settings.tokens.header`\n\nIf you want to use a different style for markdown headings (h1, h2, etc...).\n\nThis setting is [auto updated](#gmkdxsettingsauto_updateenable) when available.\n\n```viml\n\" :h mkdx-setting-tokens-header\nlet g:mkdx#settings = { 'tokens': { 'header': '#' } }\n```\n## `g:mkdx#settings.tokens.enter`\n\nUsed by [`g:mkdx#settings.enter.enable`](#gmkdxsettingsenterenable). This is the list of tokens that are supported by default.\nSince numbers are handled differently, they are not included in this list but they are supported.\n\n```viml\n\" :h mkdx-setting-tokens-enter\nlet g:mkdx#settings = { 'tokens': { 'enter': ['-', '*', '\u003e'] } }\n```\n\n## `g:mkdx#settings.tokens.fence`\n\nDefines the fencing style to use when [inserting a fenced code block](#insert-fenced-code-block).\nBy default it is set to an empty string, in which case typing tildes will result in a fenced code block\nusing tildes and typing backticks results in a code block using backticks.\n\nThis value can be set to a `` ` `` or a `~` character. When set, the same style will always be used for\nfenced code blocks.\n\nThis setting is [auto updated](#gmkdxsettingsauto_updateenable) when available.\n\n```viml\n\" :h mkdx-setting-tokens-fence\nlet g:mkdx#settings = { 'tokens': { 'fence': '' } }\n```\n\n## `g:mkdx#settings.tokens.italic`\n\nThis token is used for italicizing the current word under the cursor or a visual selection of text.\nSee [this section](#toggle-as-bold--italic--inline-code--strikethrough) for more details.\n\n```viml\n\" :h mkdx-setting-tokens-italic\nlet g:mkdx#settings = { 'tokens': { 'italic': '*' } }\n```\n\n## `g:mkdx#settings.tokens.bold`\n\nThis token is used for bolding the current word under the cursor or a visual selection of text.\nSee [this section](#toggle-as-bold--italic--inline-code--strikethrough) for more details.\n\n## `g:mkdx#settings.tokens.strike`\n\nThis token is used for striking the current word under the cursor or a visual selection of text.\nSee [this section](#toggle-as-bold--italic--inline-code--strikethrough) for more details.\n\n**Note:** this setting has been added in version *1.7.0*. Prior to that,\n`\u003cstrike\u003e...\u003c/strike\u003e` tags will always be used to create strikethrough text.\n\n```viml\n\" :h mkdx-setting-tokens-bold\nlet g:mkdx#settings = { 'tokens': { 'bold': '**' } }\n```\n\n## `g:mkdx#settings.tokens.list`\n\nThis token defines what list markers should be inserted when toggling list /\nchecklist items.\n\n```viml\n\" :h mkdx-setting-tokens-list\nlet g:mkdx#settings = { 'tokens': { 'list': '-' } }\n```\n\n## `g:mkdx#settings.table.header_divider`\n\nChange the separator used for table headings in markdown tables.\n\n```viml\n\" :h mkdx-setting-table-header-divider\nlet g:mkdx#settings = { 'table': { 'header_divider': '-' } }\n```\n\n## `g:mkdx#settings.table.divider`\n\nYou can also change the separator used in markdown tables.\n\n```viml\n\" :h mkdx-setting-table-divider\nlet g:mkdx#settings = { 'table': { 'divider': '|' } }\n```\n\n## `g:mkdx#settings.table.align`\n\nControl the alignment of content within table columns.\nIts value is a dictionary with keys `center`, `left`, `right` and `default`.\nThe `default` value is used when a column name is not found in any of the `center`, `left` or `right` lists.\n\n```viml\n  {\n    \\ 'left':    [],\n    \\ 'center':  [],\n    \\ 'right':   [],\n    \\ 'default': 'center'\n\\ }\n```\n\nIf you were to add `name` to the `left` list, e.g. `{ 'left': ['name'] }` and the first row of your CSV has a column with the content `name`, that column will be _left aligned_ (`|:----|`).\nAny other column would be _centered_ (`|:---:|`) because they do not appear in any list so the `default` value `'center'` is used.\n\n```viml\n\" :h mkdx-setting-table-align\nlet g:mkdx#settings = { 'table': { 'align': {\n        \\ 'left':    [],\n        \\ 'center':  [],\n        \\ 'right':   [],\n        \\ 'default': 'center' } } }\n```\n\n## `g:mkdx#settings.tab.enable`\n\nThis setting is enabled by default, when enabled, pressing \u003ckbd\u003etab\u003c/kbd\u003e and \u003ckbd\u003eshift\u003c/kbd\u003e+\u003ckbd\u003etab\u003c/kbd\u003e on numbered\nlist items will indent / unindent them and also renumber the list accordingly.\n\n**NOTE:** This causes a conflict when UltiSnips also uses \u003ckbd\u003etab\u003c/kbd\u003e to expand snippets!\nEither disable this functionality or [remap it](#remapping-functionality) to some other key combination.\n\n```\n\" :h mkdx-setting-tab-enable\n\" :h mkdx-function-indent-handler\nlet g:mkdx#settings = { 'tab': { 'enable': 1 } }\n```\n\n## `g:mkdx#settings.enter.enable`\n\nThis setting enables auto-appending list items when you are editing a markdown list.\nWhen \u003ckbd\u003eenter\u003c/kbd\u003e is pressed, a function is executed to detect wether or not to insert a new list item\nor just do a regular enter. unordered lists and numbered lists are both handled correctly.\n\n**NOTE:** When this setting is enabled, mkdx will execute a `setlocal formatoptions-=r` to prevent duplicate list markers from being inserted.\nThis setting is [auto updated](#gmkdxsettingsauto_updateenable) when available.\n\n```viml\n\" :h mkdx-setting-enter-enable\nlet g:mkdx#settings = { 'enter': { 'enable': 1 } }\n```\n\n## `g:mkdx#settings.enter.close_pum`\n\nDisabled by default, when enabled pressing \u003ckbd\u003eenter\u003c/kbd\u003e will first close any visible\npopup menu before executing mkdx's enter handler.\n\n```viml\n\" :h mkdx-setting-enter-close-pum\nlet g:mkdx#settings = { 'enter': { 'close_pum': 0 } }\n```\n\n## `g:mkdx#settings.enter.increment`\n\nThis setting defines increment done for each new item in numbered list, Default value is `1` setting `0` will keep current index on new item.\n\n```viml\n\" :h mkdx-setting-enter-increment\nlet g:mkdx#settings = { 'enter': { 'increment': 0 } }\n```\n\n## `g:mkdx#settings.enter.shift`\n\nWhen enabled, pressing \u003ckbd\u003eshift\u003c/kbd\u003e+\u003ckbd\u003eenter\u003c/kbd\u003e will indent the next line upto the level of the text on the current line.\nNo list tokens will be prepended. This is useful when you want to write a multi-line list item and want to start at the correct indentation level.\nFor example, given this list (cursor indicated by a \"`|`\" character):\n\n```markdown\n- [ ] a list item\n- [ ] a list item|\n- [ ] a list item\n```\n\nPressing \u003ckbd\u003eshift\u003c/kbd\u003e+\u003ckbd\u003eenter\u003c/kbd\u003e will produce:\n\n```markdown\n- [ ] a list item\n- [ ] a list item\n      |\n- [ ] a list item\n```\n\nThis works for any list type supported by mkdx. When \u003ckbd\u003eshift\u003c/kbd\u003e+\u003ckbd\u003eenter\u003c/kbd\u003e is pressed while not at the end of the line,\nthe text after the cursor position is carried over to the next line at the correct indentation.\n\n**Note**: this setting is _disabled_ by default due to the sketchy handling of \u003ckbd\u003eshift\u003c/kbd\u003e+\u003ckbd\u003eenter\u003c/kbd\u003e in different terminal emulators.\nSome emulators send the same codes for \u003ckbd\u003eenter\u003c/kbd\u003e and \u003ckbd\u003eshift\u003c/kbd\u003e+\u003ckbd\u003eenter\u003c/kbd\u003e which means (n)vim cannot distinguish one from another.\nThis can usually be fixed by setting them manually for your emulator, included from this [SO answer](https://stackoverflow.com/a/42461580/2224331):\n\n\u003e I managed to correct my terminal key-code for \u003ckbd\u003eShift\u003c/kbd\u003e+\u003ckbd\u003eEnter\u003c/kbd\u003e\n\u003e by sending the key-code Vim apparently expects. Depending on your terminal,\n\u003e _(Adding \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eEnter\u003c/kbd\u003e as a bonus!)_\n\u003e\n\u003e **[iTerm2](https://www.iterm2.com/)**, open _Preferences_ → _Profiles_ → _Keys_ → _[+] (Add)_ →\n\u003e - _Keyboard shortcut:_ (Hit \u003ckbd\u003eShift\u003c/kbd\u003e+\u003ckbd\u003eEnter\u003c/kbd\u003e)\n\u003e - _Action:_ _Send Escape Sequence_\n\u003e - _Esc+_ `[[13;2u`\n\u003e   Repeat for \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eEnter\u003c/kbd\u003e, with sequence: `[[13;5u`\n\u003e\n\u003e **[urxvt](http://software.schmorp.de/pkg/rxvt-unicode.html)**, append to your `.Xresources` file:\n\u003e\n\u003e     URxvt.keysym.S-Return:     \\033[13;2u\n\u003e     URxvt.keysym.C-Return:     \\033[13;5u\n\u003e\n\u003e **[Alacritty](https://github.com/jwilm/alacritty)**, under `key_bindings`, add following to your `~/.config/alacritty/alacritty.yml`:\n\u003e\n\u003e     - { key: Return,   mods: Shift,   chars: \"\\x1b[13;2u\" }\n\u003e     - { key: Return,   mods: Control, chars: \"\\x1b[13;5u\" }\n\n```viml\n\" :h mkdx-setting-enter-shift\n\" :h mkdx-function-shift-enter-handler\n:let g:mkdx#settings = { 'enter': { 'shift': 0 } }\n```\n\n## `g:mkdx#settings.enter.o`\n\nThis setting overwrites normal mode `o` in markdown files and causes `o` to work like pressing `\u003center\u003e` at the end of the line\nthis means that lists, checklists, checkboxes, quotes etcetera are also inserted when pressing `o` in normal mode in addition to `\u003center\u003e` in insert mode.\nNote that [`g:mkdx#settings.enter.enable`](#gmkdxsettingsenterenable) must be `1` for this to work.\n\n```viml\n\" :h mkdx-setting-enter-o\nlet g:mkdx#settings = { 'enter': { 'o': 1 } }\n```\n\n## `g:mkdx#settings.enter.shifto`\n\nThis setting enables `O` in normal mode to prepend list items above the current line, your cursor will be placed after the newly added item.\nLike [`g:mkdx#settings.enter.o`](#gmkdxsettingsentero), checkboxes are also added if they are present on the cursor line.\nNote that [`g:mkdx#settings.enter.enable`](#gmkdxsettingsenterenable) must be `1` for this to work.\n\n```viml\n\" :h mkdx-setting-enter-shifto\nlet g:mkdx#settings = { 'enter': { 'shifto': 1 } }\n```\n\n## `g:mkdx#settings.enter.malformed`\n\nThis setting defines behaviour to use when working with improperly indented\nmarkdown lists. At the moment it works for checklist items that do not have an\n`indent()` which is divisible by `shiftwidth`. In which case the indent will\nbe rounded up to the next indent if it is greater than `s:sw() / 2` otherwise it\nwill be rounded down to the previous indent.\n\n```viml\n\" :h mkdx-setting-enter-malformed\nlet g:mkdx#settings = { 'enter': { 'malformed': 1 } }\n```\n\n## `g:mkdx#settings.toc.text`\n\nDefines the text to use for the table of contents header itself.\n\nThis setting is [auto updated](#gmkdxsettingsauto_updateenable) when available.\n```viml\n\" :h mkdx-setting-toc-text\nlet g:mkdx#settings = { 'toc': { 'text': 'TOC' } }\n```\n\n## `g:mkdx#settings.toc.list_token`\n\nDefines the list token to use in the generated TOC.\n\n```viml\n\" :h mkdx-setting-toc-list-token\nlet g:mkdx#settings = { 'toc': { 'list_token': '-' } }\n```\n\n## `g:mkdx#settings.toc.update_on_write`\n\nAs easy as it is to update the table of contents manually, [it is just as easy to forget](https://github.com/SidOfc/mkdx/search?q=update+toc\u0026type=Commits) :)\nThis setting is disabled by default, set it to `1` to enable it and never worry about updating your TOC ever again.\nWhen the TOC hasn't yet been generated and [`g:mkdx#settings.toc.position`](#gmkdxsettingstocposition) isn't `0`, the TOC will be generated at given position (or as the last header of the document if there aren't enough headers).\nOtherwise, you will first have to generate the TOC once manually in the desired position and then it will be updated too.\n\n**Note:** this only works if your vim `has('autocmd')`.\n\n```viml\n\" :h mkdx-setting-toc-update-on-write\nlet g:mkdx#settings = { 'toc': { 'update_on_write': 0 } }\n```\n\n## `g:mkdx#settings.toc.position`\n\nThe position at which to place the TOC, `0` is used for cursor.\nIf a number `\u003e 0` is supplied, the TOC will be generated ABOVE that header.\ne.g. setting it to `1` will cause it to be the first heading of your document.\n\nThis setting is [auto updated](#gmkdxsettingsauto_updateenable) when available.\n\n```viml\n\" :h mkdx-setting-toc-position\nlet g:mkdx#settings = { 'toc': { 'position': 0 } }\n```\n\n## `g:mkdx#settings.toc.details.enable`\n\nThis setting controls wether the generated TOC will be output as a regular _markdown_ list or inside a `\u003cdetails\u003e` tag.\nSee: [Generate or update TOC as `\u003cdetails\u003e`](#generate-or-update-toc-as-details) for an example.\nBy default, this option is disabled. To use it, set it's value to `1` instead.\n\nThis setting is [auto updated](#gmkdxsettingsauto_updateenable) when available.\n\n```viml\n\" :h mkdx-setting-toc-details-enable\nlet g:mkdx#settings = { 'toc': { 'details': { 'enable': 0 } } }\n```\n\n## `g:mkdx#settings.toc.details.summary`\n\nWith [`g:mkdx#settings.toc.details.enable`](#gmkdxsettingstocdetailsenable) set to `1`, a `\u003csummary\u003e` tag will also be\ngenerated inside the resulting `\u003cdetails\u003e` tag. This tag contains the text that will be displayed next to the \"▶\".\nThe default value has a special placeholder `{{toc.text}}`. This will be replaced with the value of [`g:mkdx#settings.toc.text`](#gmkdxsettingstoctext) upon generation.\n\nThis setting is [auto updated](#gmkdxsettingsauto_updateenable) when available.\n\n```viml\n\" :h mkdx-setting-toc-details-summary\nlet g:mkdx#settings = { 'toc': { 'details': { 'summary': 'Click to expand {{toc.text}}' } } }\n```\n\n## `g:mkdx#settings.toc.details.nesting_level`\n\nDisabled by default. This setting allows additional `\u003cdetails\u003e` to be generated from a specified nesting level. When enabled,\nit relies on a TOC wrapped as details to already be present or [g:mkdx#settings.toc.details.enable](#gmkdxsettingstocdetailsenable) to be `1`.\n\nNote: `1` is always added to the specified amount, this is to prevent all H1's from being wrapped when setting this value to `0`.\nThis means that a nesting level of `5` wraps H6 list items. Think of this value as the 'nth' nesting level, where 0 would make no sense to 'nest' since it is at the root of the list.\n\nThis setting is [auto updated](#gmkdxsettingsauto_updateenable) when available.\n\n```viml\n\" :h mkdx-setting-toc-details-nesting-level\nlet g:mkdx#settings = { 'toc': { 'details': { 'nesting_level': -1 } } }\n```\n\n## `g:mkdx#settings.toc.details.child_count`\n\nWhen [g:mkdx#settings.toc.details.nesting_level](#gmkdxsettingstocdetailsnesting_level) is enabled, this setting defines\nwhen to wrap children of a specific list item. This is done by counting the children and either wrapping when the amount\nof items is greater than or equal to this setting.\n\nThis setting is [auto updated](#gmkdxsettingsauto_updateenable) when available.\n\n```viml\n\" :h mkdx-setting-toc-details-child-count\nlet g:mkdx#settings = { 'toc': { 'details': { 'child_count': 5 } } }\n```\n\n## `g:mkdx#settings.toc.details.child_summary`\n\nThis setting is like [g:mkdx#settings.toc.details.summary](#gmkdxsettingstocdetailssummary) but applies to the nested details summary.\nA special `{{count}}` placeholder can be used in the supplied string which will be replaced with the amount of list items wrapped in the details tag.\n\nThis setting is [auto updated](#gmkdxsettingsauto_updateenable) when available.\n\n```viml\n\" :h mkdx-setting-toc-details-child-summary\nlet g:mkdx#settings = { 'toc': { 'details': { 'child_summary': 'show {{count}} items' } } }\n```\n\n## `g:mkdx#settings.highlight.enable`\n\nThis setting enables mkdx highlighting.\nmkdx attempts to improve highlighting for the following syntax in a markdown file:\n\n- Tables\n- List items\n- Checkboxes (including their state, `[x]` (done), `[-]` (doing, not compatible with GH), and `[ ]` (todo))\n- Fenced code blocks with tilde (this is just about highlight color of tilde, not code inside it)\n- bold-italic text (text which is both bold _and_ italic)\n- keyboard tags\n- [CriticMarkup](http://criticmarkup.com/)\n- YAML front-matter\n- Inline code blocks\n\nAll other syntax remains untouched. To see all highlight groups, visit `:h mkdx-highlighting`,\nto see an overview of all highlight groups, visit `:h mkdx-toc-highlighting`\n\n**NOTE:** syntax highlighting is opt-in _by default_. This means you must explicitly enable this feature to use it.\nThe reason behind this is that this plugin is not a syntax plugin and maybe you are already using one that does such a thing in a way that works better for you.\nYou can see it in action in the [Completing checkboxes / checklists](#completing-checkboxes--checklists) examples.\n\nThis setting is [auto updated](#gmkdxsettingsauto_updateenable) when available.\n\n```viml\n\" :h mkdx-setting-highlight-enable\n\" :h mkdx-highlighting\nlet g:mkdx#settings = { 'highlight': { 'enable': 0 } }\n```\n\n## `g:mkdx#settings.highlight.frontmatter.yaml`\n\nThis setting is enabled by default. When enabled, YAML frontmatter is highlighted.\n\n```viml\n\" :h mkdx-setting-highlight-frontmatter-yaml\nlet g:mkdx#settings = { 'highlight': { 'frontmatter': { 'yaml': 1 } } }\n```\n\n## `g:mkdx#settings.highlight.frontmatter.toml`\n\nTOML frontmatter is disabled by default since it is less common than YAML.\nThis allows markdown files to be loaded faster for people that don't use TOML frontmatter.\n\n```viml\n\" :h mkdx-setting-highlight-frontmatter-toml\nlet g:mkdx#settings = { 'highlight': { 'frontmatter': { 'toml': 0 } } }\n```\n\n## `g:mkdx#settings.highlight.frontmatter.json`\n\nJSON frontmatter is disabled by default since it is less common than YAML.\nThis allows markdown files to be loaded faster for people that don't use JSON frontmatter.\n\n```viml\n\" :h mkdx-setting-highlight-frontmatter-json\nlet g:mkdx#settings = { 'highlight': { 'frontmatter': { 'json': 0 } } }\n```\n\n## `g:mkdx#settings.auto_update.enable`\n\nThis setting controls wether or not to update the document after changing certain variables.\nCurrently, this only works if your vim `has('*dictwatcheradd')`.\n\nThe following settings are automatically updated:\n\n- [`g:mkdx#settings.toc.text`](#gmkdxsettingstoctext)\n- [`g:mkdx#settings.toc.position`](#gmkdxsettingstocposition)\n- [`g:mkdx#settings.toc.details.enable`](#gmkdxsettingstocdetailsenable)\n- [`g:mkdx#settings.toc.details.summary`](#gmkdxsettingstocdetailssummary)\n- [`g:mkdx#settings.tokens.header`](#gmkdxsettingstokensheader)\n- [`g:mkdx#settings.tokens.fence`](#gmkdxsettingstokensfence)\n- [`g:mkdx#settings.enter.enable`](#gmkdxsettingsenterenable)\n- [`g:mkdx#settings.fold.enable`](#gmkdxsettingsfoldenable)\n- [`g:mkdx#settings.fold.components`](#gmkdxsettingsfoldcomponents)\n- [`g:mkdx#settings.links.fragment.complete`](#gmkdxsettingslinksfragmentcomplete)\n- [`g:mkdx#settings.highlight.enable`](#gmkdxsettingshighlightenable)\n\n```viml\n\" :h mkdx-setting-auto-update-enable\nlet g:mkdx#settings = { 'auto_update': { 'enable': 1 } }\n```\n\n## `g:mkdx#settings.fold.enable`\n\nControls wether or not to fold fenced (\u003ccode\u003e\\`\\`\\`\u003c/code\u003e / `~~~`) code blocks and / or the table of contents (when generated by mkdx).\nBehaviour can be controlled using [`g:mkdx#settings.fold.components`](#gmkdxsettingsfoldcomponents). Folding is disabled by default, set it to `1` to enable it.\n\n**NOTE:** when `g:markdown_folding` is enabled, this functionality will no-op because they do not work together nicely!\n\nThis setting is [auto updated](#gmkdxsettingsauto_updateenable) when available.\n\n```viml\n\" :h mkdx-setting-fold-enable\n:let g:mkdx#settings = { 'fold': { 'enable': 0 } }\n```\n\n## `g:mkdx#settings.fold.components`\n\nControls which components to fold when [`g:mkdx#settings.fold.enable`](#gmkdxsettingsfoldenable) is enabled.\nCurrently, two components can be folded, `'toc'` and `'fence'`. items can be added and removed from the list as needed.\n\nThis setting is [auto updated](#gmkdxsettingsauto_updateenable) when available.\n\n```viml\n\" :h mkdx-setting-fold-components\n:let g:mkdx#settings = { 'fold': { 'components': ['toc', 'fence'] } }\n```\n\n# Mappings\n\nMappings can be turned off all together with [`g:mkdx#settings.map.enable`](#gmkdxsettingsmapenable).\nThe plugin checks if a mapping exists before creating it. If it exists, it will not create the mapping.\nIn case a mapping that this plugin provides doesn't work, please check if you have it in your _.vimrc_ and also try `:verbose map [mapping]`\nwhere `[mapping]` is the mapping that doesn't work e.g. `\u003cCr\u003e` or `gf`.\n\nThe below list contains all mappings that mkdx creates by default. To remap functionality: [remapping functionality](#remapping-functionality).\nTo prevent mapping of a key from happening, see: [unmapping functionality](#unmapping-functionality-using-nop).\n\n**Note:** _replace `-{n|v}` with just `-n` or `-v` when creating your own mappings_\n\n|description|modes|mapping|Execute|\n|----|----|-------|-------|\n|Prev checkbox state|normal, visual|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e-\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-checkbox-prev-{n\\|v})`|\n|Next checkbox state|normal, visual|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e=\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-checkbox-next-{n\\|v})`|\n|Promote header|normal|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e\\[\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-promote-header)`|\n|Demote header|normal|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e\\]\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-demote-header)`|\n|Toggle kbd shortcut|normal, visual|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003ek\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-toggle-to-kbd-{n\\|v})`|\n|Toggle quote|normal, visual|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e'\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-toggle-quote-{n\\|v})`|\n|Toggle checkbox item|normal, visual|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003et\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-toggle-checkbox-{n\\|v})`|\n|Toggle checklist item|normal, visual|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003el\u003c/kbd\u003e\u003ckbd\u003et\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-toggle-checklist-{n\\|v})`|\n|Toggle list item|normal, visual|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003el\u003c/kbd\u003e\u003ckbd\u003el\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-toggle-list-{n\\|v})`|\n|Wrap link|normal, visual|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003el\u003c/kbd\u003e\u003ckbd\u003en\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-wrap-link-{n\\|v})`|\n|Italicize text|normal, visual|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e/\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-text-italic-{n\\|v})`|\n|Bolden text|normal, visual|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003eb\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-text-bold-{n\\|v}))`|\n|Wrap with inline code|normal, visual|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e\\`\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-text-inline-code-{n\\|v})`|\n|Wrap with strikethrough|normal, visual|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003es\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-text-strike-{n\\|v})`|\n|CSV to table|visual|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e,\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-tableize)`|\n|Jump to header|normal|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003ej\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-jump-to-header)`|\n|Generate / Update TOC|normal|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003ei\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-gen-or-upd-toc)`|\n|Quickfix TOC|normal|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003eI\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-quickfix-toc)`|\n|Quickfix dead fragment links|normal|\u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003eL\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-quickfix-links)`|\n|\u003ckbd\u003eo\u003c/kbd\u003e handler|normal|\u003ckbd\u003eo\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-o)`|\n|\u003ckbd\u003eO\u003c/kbd\u003e handler|normal|\u003ckbd\u003eO\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-shift-o)`|\n|Insert fenced code block|insert|\u003ckbd\u003e\\`\u003c/kbd\u003e\u003ckbd\u003e\\`\u003c/kbd\u003e\u003ckbd\u003e\\`\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-fence-backtick)`|\n|Insert fenced code block|insert|\u003ckbd\u003e\\~\u003c/kbd\u003e\u003ckbd\u003e\\~\u003c/kbd\u003e\u003ckbd\u003e\\~\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-fence-tilde)`|\n|Insert kbd shortcut|insert|\u003ckbd\u003e\\\u003c\u003c/kbd\u003e\u003ckbd\u003etab\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-insert-kbd)`|\n|\u003ckbd\u003eenter\u003c/kbd\u003e handler|insert|\u003ckbd\u003eenter\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-enter)`|\n|\u003ckbd\u003eshift\u003c/kbd\u003e+\u003ckbd\u003eenter\u003c/kbd\u003e handler|insert|\u003ckbd\u003eshift\u003c/kbd\u003e+\u003ckbd\u003eenter\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-shift-enter)`|\n|\u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003en\u003c/kbd\u003e handler|insert|\u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003en\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-ctrl-n-compl)`|\n|\u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003ep\u003c/kbd\u003e handler|insert|\u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003ep\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-ctrl-p-compl)`|\n|\u003ckbd\u003e#\u003c/kbd\u003e handler|insert|\u003ckbd\u003e#\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-link-compl)`|\n|Jump to file|normal|\u003ckbd\u003eg\u003c/kbd\u003e\u003ckbd\u003ef\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-gf)`|\n|Jump to file|visual|\u003ckbd\u003eg\u003c/kbd\u003e\u003ckbd\u003ef\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-gf-visual)`|\n|Open external file|normal|\u003ckbd\u003eg\u003c/kbd\u003e\u003ckbd\u003ex\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-gx)`|\n|Open external file|visual|\u003ckbd\u003eg\u003c/kbd\u003e\u003ckbd\u003ex\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-gx-visual)`|\n|Indent numbered list item|\u003ckbd\u003etab\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-indent)`|\n|Unindent numbered list item|\u003ckbd\u003eshift\u003c/kbd\u003e+\u003ckbd\u003etab\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-unindent)`|\n|Jump to next header|\u003ckbd\u003e]\u003c/kbd\u003e\u003ckbd\u003e]\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-jump-to-next-section)`|\n|Jump to prev header|\u003ckbd\u003e[\u003c/kbd\u003e\u003ckbd\u003e[\u003c/kbd\u003e|`\u003cPlug\u003e(mkdx-jump-to-prev-section)`|\n\n## Remapping functionality\n\n`\u003cPlug\u003e` mappings can easily be remapped to any other key you prefer.\nWhen a `\u003cPlug\u003e(mkdx-*)` mapping is found, mkdx will not create the default mapping for that `\u003cPlug\u003e`.\nIf you want to disable functionality, see: [Unmapping functionality](#unmapping-functionality-using-nop).\n\n```viml\n\" this will remap \u003cleader\u003eq in every filetype, not very handy in most cases\nnnoremap \u003cleader\u003eq \u003cPlug\u003e(mkdx-quickfix-toc)\n\n\" to keep it limited to markdown files, one can use an \"autocommand\".\n\" First, make sure we don't create the default mapping when entering markdown files.\n\" All plugs can be disabled like this (except insert mode ones, they need \"imap\" instead of \"nmap\").\nnmap \u003cPlug\u003e \u003cPlug\u003e(mkdx-quickfix-toc)\n\n\" then create a function to remap manually\nfun! s:MkdxRemap()\n    \" regular map family can be used since these are buffer local.\n    nmap \u003cbuffer\u003e\u003csilent\u003e \u003cleader\u003eq \u003cPlug\u003e(mkdx-quickfix-toc)\n    \" other overrides go here\nendfun\n\n\" finally, add a \"FileType\" autocommand that calls \"s:MkdxRemap()\" upon entering markdown filetype\naugroup Mkdx\n    au!\n    au FileType markdown,mkdx call s:MkdxRemap()\naugroup END\n```\n\n## Unmapping functionality using `\u003cNop\u003e`\n\nIf you want to unmap specific functionality, you'll have to define a mapping for it.\nThis is required because the plugin maps its keys when opening a markdown file, so if you `unmap` something,\nit will still get mapped to other markdown buffers. To disable any map, first find it [here](#mappings) or at: `:h mkdx-mappings`.\n\nSay you want to disable toggling next checkbox state (mapped to \u003ckbd\u003e[\\\u003cPREFIX\\\u003e](#gmkdxsettingsmapprefix)\u003c/kbd\u003e\u003ckbd\u003e=\u003c/kbd\u003e).\nIn your _.vimrc_, add the following:\n\n```viml\n\" this will disable toggling checkbox next in normal mode.\nnmap \u003cleader\u003e= \u003cNop\u003e\n\n\" this will disable toggling checkbox next in visual mode.\nvmap \u003cleader\u003e= \u003cNop\u003e\n```\n\nIf you only want to do this for markdown files, refer to the previous snippet using the `au` command.\n\nThe mappings are checked using the value of [`g:mkdx#settings.map.prefix`](#gmkdxsettingsmapprefix) so you may need to check its value first\nby running the following: `:echo g:mkdx#settings.map.prefix`. A better way to prevent mkdx from mapping keys is by remapping `\u003cPlug\u003e` mappings.\n\n## Unmapping functionality using `\u003cPlug\u003e`\n\nIf you don't know what a `\u003cPlug\u003e` is, it is a builtin tool for plugin authors to provide a more\n\"clear\" and user-friendly plugin interface (and to create repeatable mappings with repeat.vim!).\nAll of the functions of mkdx are mapped using `\u003cPlug\u003e` mappings.\nTo disable a `\u003cPlug\u003e` mapping, first find it [here](#mappings) or at: `:h mkdx-plugs`.\n\nSay you want to disable the behaviour for toggling the next checkbox state.\nThe corresponding `\u003cPlug\u003e` is called `\u003cPlug\u003e(mkdx-checkbox-next-n)`. To disable it, add the following to your _.vimrc_:\n\n```viml\nmap \u003cPlug\u003e \u003cPlug\u003e(mkdx-checkbox-next-n)\n```\n\n# Supported `grep` programs\n\nWhen your vim `has('job')` or `has('nvim')`, mkdx will look for a grep program, the following are recognized:\n\n- [`rg`](https://github.com/BurntSushi/ripgrep)\n- [`ag`](https://github.com/ggreer/the_silver_searcher)\n- [`cgrep`](https://github.com/awgn/cgrep)\n- [`ack`](https://github.com/beyondgrep/ack2)\n- [`pt`](https://github.com/monochromegane/the_platinum_searcher)\n- [`ucg`](https://github.com/gvansickle/ucg)\n- [`sift`](https://github.com/svent/sift)\n- `grep` / `ggrep`\n\nThe listed programs are searched in order, if a program is found, it will be used in [various](#insert-mode-fragment-completion) [different](#jump-to-header) places.\nThis will prevent your editor from freezing and it'll be blazing fast compared to the builtin Vimscript fallbacks.\n\n# Contributing\n\nFound a bug or want to report an issue? Take a look at the [CONTRIBUTING](CONTRIBUTING.md) file for more information.\n\n# Roadmap\n\n- Process bug reports and discussions\n- Otherwise, maintainance mode\n\n# Changelog\n\nThe latest changes will be visible in this list.\nSee [CHANGELOG.md](CHANGELOG.md) for older changes.\n\n## Edge (not yet on vim.org)\n\n- Add: ability to jump to next / previous header with \u003ckbd\u003e]\u003c/kbd\u003e\u003ckbd\u003e]\u003c/kbd\u003e and \u003ckbd\u003e[\u003c/kbd\u003e\u003ckbd\u003e[\u003c/kbd\u003e ([#146](../../issues/146))\n- Fix: relocate syntax file for better compatibility ([#127](../../issues/127))\n- Fix: CriticMarkup highlighting works properly now ([#128](../../issues/128))\n- Fix: Support chinese when generating table of contents link fragments ([#130](../../issues/130))\n- Fix: Support jumping to setex style headers from fragment links ([#140](../../issues/140))\n- Fix: converting from / to CSV with empty strings no longer shifts values ([#141](../../issues/141))\n- Fix: enter / o handlers no longer delete lines in indented code blocks ([#143](../../issues/143))\n\n## 11-09-2020 VERSION 1.10.0\n\n- Add: `mkdx#gf_visual` function which mimicks `mkdx#gf` using visually selected text ([#119](../../issues/119))\n- Add: opt-in support for TOML and JSON frontmatter and settings to control which syntax is supported.\n- Add: feature to renumber numbered list items with tab/shift+tab ([#113](../../pull/113))\n- Fix: eager-load settings to ensure settings are properly initialized before loading a markdown file ([#125](../../issue/125) by @victorkristof)\n- Fix: using `mkdx#gf` with multiple lines with a link always opening first link ([#122](../../issue/122) by @Delayless)\n- Fix: non plaintext files now also open using `open` instead of in (n)vim ([#116](../../issue/116) by @kraxli)\n- Fix: links with subdomains failed to open using `mkdx#gf` ([#116](../../issue/116) by @kraxli)\n- Fix: issue when setting `let g:markdown_folding = 1` causing `Pattern not found: g:mkdx#settings.fold.enable = 0`\n- Fix: use `maparg` to check exact mappings exist instead of `mapcheck` ([#112](../../issues/112) by @Mayrixon)\n- Fix: issue in neovim reporting external links as broken due to unbuffered stdout\n- Fix: add missing highlight groups to clear when toggling highlighting on/off by updating the setting\n\n## 22-05-2020 VERSION 1.9.4\n\n- Add: when `conceallevel` is set, markdown link urls are now also hidden ([#108](../../issues/108) by @Ginner)\n- Fix: improved cursor position after unwrapping text\n\n## 18-05-2020 VERSION 1.9.3\n\n- Add: ability to press \u003ckbd\u003eenter\u003c/kbd\u003e in the middle of a list-item to split it into two ([#107](../../issues/107) by @samarulmeu)\n- Fix: wrapping last word shifting word to right in some cases ([#101](../../issues/101) by @samarulmeu)\n\n# FAQ\n\nThis section aims to answer some frequently(-ish) asked questions about mkdx!\n\n## E121 Undefined variable: g:mkdx#settings\n\nThis error comes up after you've added a setting such as: `let g:mkdx#settings.map.prefix = ' '`\ndirectly in your vimrc. This unfortunately is not possible, settings must be defined\n\"long-form\" like so:\n\n```viml\nlet g:mkdx#settings = {\n\\ 'map': { 'prefix': ' ' }\n\\ }\n```\n\nThe primary reason being that mkdx uses any `g:mkdx#settings` hash defined in your vimrc\nto override the defaults. These defaults are not defined straight from the start but merged\nafter the vimrc has loaded.\n\n## E716 errors if vimrc has been reloaded\n\nA couple of solutions can be found in \u003ca href=\"https://github.com/SidOfc/mkdx/issues/151\"\u003eIssue 151 - Reloading vimrc within Vim breaks\u003c/a\u003e.\n\n## There is no help for mkdx\n\nThere could be various reasons why helptags don't exist, from what I understand using Vim's native \"pack\"\nfeature does not seem to auto-generate helptags, to fix this you can always run `:helptags ALL`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsidofc%2Fmkdx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsidofc%2Fmkdx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsidofc%2Fmkdx/lists"}