{"id":13480757,"url":"https://github.com/artempyanykh/marksman","last_synced_at":"2026-02-08T23:14:25.862Z","repository":{"id":37006718,"uuid":"345099636","full_name":"artempyanykh/marksman","owner":"artempyanykh","description":"Write Markdown with code assist and intelligence in the comfort of your favourite editor.","archived":false,"fork":false,"pushed_at":"2025-03-14T20:52:36.000Z","size":10312,"stargazers_count":2393,"open_issues_count":102,"forks_count":41,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-04-28T12:13:40.780Z","etag":null,"topics":["emacs","language-server","language-server-protocol","lsp","markdown","neovim","note-taking","notes"],"latest_commit_sha":null,"homepage":"","language":"F#","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/artempyanykh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-06T13:23:47.000Z","updated_at":"2025-04-28T02:47:44.000Z","dependencies_parsed_at":"2024-04-28T23:30:09.538Z","dependency_job_id":"aa46782e-bdd7-42d2-89c0-cfebebf21796","html_url":"https://github.com/artempyanykh/marksman","commit_stats":{"total_commits":347,"total_committers":14,"mean_commits":"24.785714285714285","dds":0.04899135446685876,"last_synced_commit":"bcf5583f698ff0ac40e6743379da87a5b25e3eeb"},"previous_names":[],"tags_count":54,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artempyanykh%2Fmarksman","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artempyanykh%2Fmarksman/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artempyanykh%2Fmarksman/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artempyanykh%2Fmarksman/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/artempyanykh","download_url":"https://codeload.github.com/artempyanykh/marksman/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251311332,"owners_count":21569009,"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":["emacs","language-server","language-server-protocol","lsp","markdown","neovim","note-taking","notes"],"created_at":"2024-07-31T17:00:44.665Z","updated_at":"2026-02-08T23:14:25.857Z","avatar_url":"https://github.com/artempyanykh.png","language":"F#","funding_links":[],"categories":["F# #","F#","F\\#","emacs","note-taking","其他工具"],"sub_categories":["检查与辅助"],"readme":"[![Build \u0026 Test](https://github.com/artempyanykh/marksman/actions/workflows/build.yml/badge.svg)](https://github.com/artempyanykh/marksman/actions/workflows/build.yml)\n[![release](https://img.shields.io/github/v/release/artempyanykh/marksman)](https://github.com/artempyanykh/marksman/releases)\n[![homebrew](https://img.shields.io/homebrew/v/marksman)](https://formulae.brew.sh/formula/marksman)\n[![marksman](https://snapcraft.io/marksman/badge.svg)](https://snapcraft.io/marksman)\n[![Downloads](https://img.shields.io/github/downloads/artempyanykh/marksman/total)](https://github.com/artempyanykh/marksman/releases)\n\n# Marksman\n\n_Write Markdown with code assist and intelligence in the comfort of your favourite editor._\n\n![splash](assets/readme/splash.png)\n\n---\n\nMarksman is a program that integrates with your editor to assist you in writing and maintaining your Markdown documents.\nUsing [LSP protocol][lsp-main] it provides **completion**, goto **definition**, find **references**, **rename**\nrefactoring, **diagnostics**, and more. In addition to regular Markdown, it also supports **wiki-link**-style references\nthat enable [Zettelkasten-like][zettel-wiki][^roam-research]\u003csup\u003e,\u003c/sup\u003e [^markdown-memo] note taking. See more about Marksman's\nfeatures below.\n\nMarksman **works on MacOS, Linux, and Windows** and is distributed as a **self-contained binary** for each OS.\n\nThe server provides assistance with:\n\n* Markdown inline links:\n   ```md\n   This is [inline link](/some-file.md#some-heading).\n   This is an internal [anchor link](#heading).\n   ```\n* Markdown reference links:\n   ```md\n   See [reference].\n\n   [reference]: /url \"Title\"\n   ```\n* Wiki-links:\n   ```md\n   Link to [[another-note]].\n   Link to [[another-notes#heading]].\n   Internal link to [[#a-heading]].\n   ```\n\nAll types of links support completion, hover, goto definition/references. Additionally, Marksman provides diagnostics\nfor wiki-links to detect broken references and duplicate/ambiguous headings.\n\n## Existing editor integrations[^lsp]:\n\n* VSCode via [Marksman VSCode][mn-vscode].\n* Neovim:\n    * via [mason.nvim][mason-nvim] (automatic server installation) (requires [mason-lspconfig.nvim][mason-nvim-lsp-config])\n    * via [nvim-lspconfig][nvim-marksman],\n    * via [CoC-marksman][coc-marksman].\n* Vim:\n    * via [ale](ale) - Ale has built-in support for Marksman\n\n    * via [lsp](lsp)\n\n      Example config (add the following to your `~/.vim/after/ftplugin/markdown.vim`):\n\n      ```viml\n      if exists('g:loaded_lsp')\n        call LspAddServer([#{ name: 'marksman', filetype: ['markdown'], path: '/path/to/marksman', args: ['server'], syncInit: v:true }])\n      end\n      ```\n\n* Emacs:\n    * via [LSP Mode](https://emacs-lsp.github.io/lsp-mode/page/lsp-marksman/) (automatic server installation).\n\n      Example config for `use-package` users:\n\n      ```lisp\n      (use-package markdown-mode\n        :hook (markdown-mode . lsp)\n        :config\n        (require 'lsp-marksman))\n      ```\n    * via [Eglot][eglot], requires configuration (unless\n      [eglot#1013][eglot-marksman-pr] gets merged); add the following to your\n      `init.el`\n\n      ```lisp\n      (add-to-list 'eglot-server-programs '(markdown-mode . (\"marksman\")))\n      (add-hook 'markdown-mode-hook #'eglot-ensure)\n      ```\n* [Helix](https://helix-editor.com/) supports Marksman out of the box. However, you need add `marksman` binary to\n  your `PATH` manually.\n* [Kakoune](https://kakoune.org/) can be used with [kakoune-lsp](https://github.com/kakoune-lsp/kakoune-lsp) with\n  no other configuration.\n* Sublime Text via [LSP-marksman][sublime-marksman] (automatic server\n  installation).\n* BBEdit [can be configured](https://github.com/artempyanykh/marksman/discussions/206#discussioncomment-5906423) to use Marksman as an LSP server for Markdown files.\n* [Zed](https://zed.dev/) supports Marksman through it's integrated LSP support,\n  by addinging it as an available LSP for Markdown in Zed's `settings.json`:\n  \n  ```jsonc\n  // Zed settings\n  {\n    // ...\n    \"languages\": {\n      \"Markdown\": {\n        \"language_servers\": [\"marksman\"]\n      }\n    }\n  }\n\n  ```\n\n## How to install\n\nSee the [installation instructions](/docs/install.md).\n\n## Demos and tutorials\n\n* See [this page](/docs/demo.md) for a mix of Neovim, VSCode, and Emacs screen captures.\n* See [this post](https://medium.com/@chrisatmachine/lunarvim-improve-markdown-editing-with-marksman-739d06c73a26)\n  on how to use Marksman with [LunarVim](https://www.lunarvim.org).\n* Check out [this YouTube video](https://www.youtube.com/watch?v=8GQKOLh_V5E)\n  by Luke Pighetti on how to use Marksman with Helix.\n\n![Completion Markdown](/assets/readme/gifs/completion-markdown.gif)\n\n## Features\n\nSee [the Features page](/docs/features.md) to learn more about language features, configurations, and single- and multi-file modes.\n\n## FAQ\n\n* Cross-file references and completions don't work.\n    + Either create an empty `.marksman.toml` in the root folder of your project or initialize a repository (e.g. `git init`). See [this page](/docs/features.md#workspace-folders-project-roots-and-single-file-mode) to learn more about single- and mult-file modes.\n* I'm getting \"marksman can’t be opened because Apple cannot check it for malicious software\" on MacOS.\n    + Run the following command to bypass it and let Mac know that it's fine: `xattr -d com.apple.quarantine \u003cpath-to-marksman-bin\u003e`.\n\n[^roam-research]: You may have heard about [Roam Research][roam]. That is a commercial implementation of the\nZettelkasten method and another point of reference for what Marksman is about. However, unlike a proprietary Roam\nResearch, Marksman is free, open-source and integrated into your favourite editor (albeit for not not as feature rich as\nRoam Research).\n\n[^markdown-memo]: There is an excellent VSCode extension called [Markdown Memo][md-memo]. You definitely need\nto check it out if you're primarily using VSCode as it has some features that are missing in Marksman and [Marksman\nVSCode extension][mn-vscode]. However, Markdown Memo is VSCode specific while Marksman is a generic language server, so\ncan be used with any editor that has LSP support: Emacs, Vim, Neovim, etc.\n\n[^lsp]: Since Marksman is a regular Language Server most of the functionality works out of the box\nwith any LSP client.\n\n[^single-file-mode]: There is an initiative to add a single-file mode to\nLSP but it's not a part of the spec at least until and including v3.17.\n\n[zettel-wiki]: https://en.wikipedia.org/wiki/Zettelkasten\n\n[roam]: https://roamresearch.com\n\n[md-memo]: https://github.com/svsool/vscode-memo\n\n[mn-vscode]: https://github.com/artempyanykh/marksman-vscode\n\n[original-zn]: https://github.com/artempyanykh/zeta-note\n\n[nvim-marksman]: https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md#marksman\n\n[mason-nvim]: https://github.com/williamboman/mason.nvim\n\n[mason-nvim-lsp-config]: https://github.com/williamboman/mason-lspconfig.nvim\n\n[lsp-main]: https://microsoft.github.io/language-server-protocol/\n\n[helix-editor]: https://helix-editor.com\n\n[helix-marksman-pr]: https://github.com/helix-editor/helix/pull/3499\n\n[coc-marksman]: https://github.com/yaegassy/coc-marksman\n\n[eglot]: https://github.com/joaotavora/eglot\n\n[eglot-marksman-pr]: https://github.com/joaotavora/eglot/pull/1013\n\n[sublime-marksman]: https://github.com/sublimelsp/LSP-marksman\n\n[ale]: https://github.com/dense-analysis/ale\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartempyanykh%2Fmarksman","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fartempyanykh%2Fmarksman","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartempyanykh%2Fmarksman/lists"}