{"id":13468945,"url":"https://github.com/chrisgrieser/nvim-scissors","last_synced_at":"2025-04-08T10:14:36.851Z","repository":{"id":214674862,"uuid":"737073820","full_name":"chrisgrieser/nvim-scissors","owner":"chrisgrieser","description":"Automagical editing and creation of snippets.","archived":false,"fork":false,"pushed_at":"2025-03-31T08:16:37.000Z","size":326,"stargazers_count":469,"open_issues_count":1,"forks_count":9,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-04T16:36:13.569Z","etag":null,"topics":["nvim-plugin","snippets","snippets-manager"],"latest_commit_sha":null,"homepage":"","language":"Lua","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/chrisgrieser.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"custom":"https://www.paypal.me/ChrisGrieser","ko_fi":"pseudometa"}},"created_at":"2023-12-29T18:25:01.000Z","updated_at":"2025-04-04T16:20:30.000Z","dependencies_parsed_at":"2024-12-20T07:05:14.656Z","dependency_job_id":"d8092a35-4573-4833-a2f1-eb5618af76e8","html_url":"https://github.com/chrisgrieser/nvim-scissors","commit_stats":{"total_commits":373,"total_committers":5,"mean_commits":74.6,"dds":0.01072386058981234,"last_synced_commit":"0fb75d5ff02791029f18516a62532b29f6896963"},"previous_names":["chrisgrieser/nvim-scissors"],"tags_count":0,"template":false,"template_full_name":"chrisgrieser/nvim-pseudometa-plugin-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisgrieser%2Fnvim-scissors","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisgrieser%2Fnvim-scissors/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisgrieser%2Fnvim-scissors/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisgrieser%2Fnvim-scissors/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chrisgrieser","download_url":"https://codeload.github.com/chrisgrieser/nvim-scissors/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247819933,"owners_count":21001394,"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-plugin","snippets","snippets-manager"],"created_at":"2024-07-31T15:01:22.409Z","updated_at":"2025-04-08T10:14:36.814Z","avatar_url":"https://github.com/chrisgrieser.png","language":"Lua","funding_links":["https://www.paypal.me/ChrisGrieser","https://ko-fi.com/pseudometa","https://ko-fi.com/Y8Y86SQ91'"],"categories":["Lua","Snippet","others"],"sub_categories":["Assembly"],"readme":"\u003c!-- LTeX: enabled=false --\u003e\n# nvim-scissors ✂️\n\u003c!-- LTeX: enabled=true --\u003e\n\u003ca href=\"https://dotfyle.com/plugins/chrisgrieser/nvim-scissors\"\u003e\n\u003cimg alt=\"badge\" src=\"https://dotfyle.com/plugins/chrisgrieser/nvim-scissors/shield\"/\u003e\u003c/a\u003e\n\nAutomagical editing and creation of snippets.\n\n\u003chttps://github.com/chrisgrieser/nvim-scissors/assets/73286100/c620958a-eef6-46c2-957a-8504733e0312\u003e\n\n\u003chttps://github.com/chrisgrieser/nvim-scissors/assets/73286100/de544b7e-20c3-4bec-b7aa-cbaaacca09ca\u003e\n\n## Table of contents\n\n\u003c!-- toc --\u003e\n\n- [Features](#features)\n- [Rationale](#rationale)\n- [Requirements](#requirements)\n- [Installation](#installation)\n\t* [nvim-scissors](#nvim-scissors)\n\t* [Snippet engine setup](#snippet-engine-setup)\n\t\t+ [LuaSnip](#luasnip)\n\t\t+ [mini.snippets](#minisnippets)\n\t\t+ [blink.cmp](#blinkcmp)\n\t\t+ [basics-language-server](#basics-language-server)\n\t\t+ [nvim-snippets](#nvim-snippets)\n\t\t+ [vim-vsnip](#vim-vsnip)\n\t\t+ [yasp.nvim](#yaspnvim)\n- [Usage](#usage)\n\t* [Starting `nvim-scissors`](#starting-nvim-scissors)\n\t* [Editing snippets in the popup window](#editing-snippets-in-the-popup-window)\n- [Configuration](#configuration)\n- [Cookbook \u0026 FAQ](#cookbook--faq)\n\t* [Introduction to the VSCode-style snippet format](#introduction-to-the-vscode-style-snippet-format)\n\t* [Tabstops and variables](#tabstops-and-variables)\n\t* [friendly-snippets](#friendly-snippets)\n\t* [Edit snippet title or description](#edit-snippet-title-or-description)\n\t* [Version controlling snippets \u0026 snippet file formatting](#version-controlling-snippets--snippet-file-formatting)\n\t* [Snippets on visual selections (`Luasnip` only)](#snippets-on-visual-selections-luasnip-only)\n\t* [Auto-triggered snippets (`Luasnip` only)](#auto-triggered-snippets-luasnip-only)\n- [About the author](#about-the-author)\n\n\u003c!-- tocstop --\u003e\n\n## Features\n- Add new snippets, edit snippets, or delete snippets on the fly.\n- Syntax highlighting while you edit the snippet. Includes highlighting of\n  tabstops and placeholders such as `$0`, `${2:foobar}`, or `$CLIPBOARD`\n- Automagical conversion from buffer text to JSON string.\n- Intuitive UI for editing the snippet, dynamically adapting the number of\n  prefixes.\n- Automatic hot-reloading of any changes, so you do not have to restart nvim for\n  changes to take effect.\n- Optional JSON-formatting and sorting of the snippet file. ([Useful when\n  version-controlling your snippet\n  collection](#version-controlling-snippets--snippet-file-formatting).)\n- Snippet/file selection via `telescope`, `snacks`, or `vim.ui.select`.\n- Automatic bootstrapping of the snippet folder or new snippet files if needed.\n- Supports only [VSCode-style\n  snippets](https://code.visualstudio.com/docs/editor/userdefinedsnippets#_create-your-own-snippets).\n\n\u003e [!TIP]\n\u003e You can use\n\u003e [snippet-converter.nvim](https://github.com/smjonas/snippet-converter.nvim) to\n\u003e convert your snippets to the VSCode format.\n\n## Rationale\n- The [VSCode snippet\n  format](https://code.visualstudio.com/docs/editor/userdefinedsnippets) is the\n  closest thing to a standard regarding snippets. It is used by\n  [friendly-snippets](https://github.com/rafamadriz/friendly-snippets) and\n  supported by most snippet engine plugins for nvim.\n- However, VSCode snippets are stored as JSON, which are a pain to modify\n  manually. This plugin alleviates that pain by automagically writing the JSON\n  for you.\n\n## Requirements\n- nvim 0.10+\n- Snippets saved in the [VSCode-style snippet\n  format](#introduction-to-the-vscode-style-snippet-format).\n- [telescope](https://github.com/nvim-telescope/telescope.nvim) OR\n[snacks.nvim](https://github.com/folke/snacks.nvim) OR\n  ([dressing.nvim](http://github.com/stevearc/dressing.nvim) AND\n  [fzf-lua](https://github.com/ibhagwan/fzf-lua)).\n  * Note that snippet previews only work when using `telescope` or `snacks`.\n- A snippet engine that can load VSCode-style snippets, such as:\n  * [LuaSnip](https://github.com/L3MON4D3/LuaSnip)\n  * [mini.snippets](https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-snippets.md)\n  * [blink.cmp](https://github.com/Saghen/blink.cmp)\n  * [basics-language-server](https://github.com/antonk52/basics-language-server/)\n  * [nvim-snippets](https://github.com/garymjr/nvim-snippets)\n  * [vim-vsnip](https://github.com/hrsh7th/vim-vsnip)\n  * [yasp.nvim](https://github.com/DimitrisDimitropoulos/yasp.nvim)\n- *Optional*: Treesitter parsers for the languages you want syntax highlighting\n  for.\n\n## Installation\n\n### nvim-scissors\n\n```lua\n-- lazy.nvim\n{\n\t\"chrisgrieser/nvim-scissors\",\n\tdependencies = \"nvim-telescope/telescope.nvim\", -- if using telescope\n\topts = {\n\t\tsnippetDir = \"path/to/your/snippetFolder\",\n\t} \n},\n\n-- packer\nuse {\n\t\"chrisgrieser/nvim-scissors\",\n\tdependencies = \"nvim-telescope/telescope.nvim\", -- if using telescope\n\tconfig = function()\n\t\trequire(\"scissors\").setup ({\n\t\t\tsnippetDir = \"path/to/your/snippetFolder\",\n\t\t})\n\tend,\n}\n```\n\n### Snippet engine setup\nIn addition, your snippet engine needs to point to the same snippet folder as\n`nvim-scissors`:\n\n\u003e [!TIP]\n\u003e `vim.fn.stdpath(\"config\")` returns the path to your nvim config.\n\n#### LuaSnip\n\n```lua\nrequire(\"luasnip.loaders.from_vscode\").lazy_load {\n\tpaths = { \"path/to/your/snippetFolder\" },\n}\n```\n\n\u003c!-- LTeX: enabled=false --\u003e\n#### mini.snippets\n\u003c!-- LTeX: enabled=true --\u003e\n`mini.snippets` preferred snippet location is any `snippets/` directory in the\n`runtimepath`. For manually maintained snippets the best location is the user\nconfig directory, which requires the following `nvim-scissors` setup:\n\n```lua\nrequire(\"scissors\").setup({\n\tsnippetDir = vim.fn.stdpath(\"config\") .. \"/snippets\",\n})\n```\n\nThe `mini.snippets` setup requires explicit definition of loaders. Following its\n[Quickstart](https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-snippets.md#quickstart)\nguide should be enough to make it respect snippets from 'snippets/' directory\ninside user config. **Note**: `nvim-scissors` works only with VSCode-style\nsnippet files (not Lua files or JSON arrays), and requires a\n[`package.json` for the VSCode\nformat](#introduction-to-the-vscode-style-snippet-format).\n\n\u003c!-- LTeX: enabled=false --\u003e\n#### blink.cmp\n\u003c!-- LTeX: enabled=true --\u003e\n\n```lua\nrequire(\"blink.cmp\").setup {\n\tsources = {\n\t\tproviders = {\n\t\t\tsnippets = {\n\t\t\t\topts = {\n\t\t\t\t\tsearch_paths = { \"path/to/your/snippetFolder\" },\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n}\n```\n\nIt is recommended to use the latest release of `blink.cmp` for hot-reloading to\nwork.\n\n\u003c!-- LTeX: enabled=false --\u003e\n#### basics-language-server\n\u003c!-- LTeX: enabled=true --\u003e\n\n```lua\n-- NOTE: this requires `nvim-lspconfig` as additional dependency\nrequire(\"lspconfig\").basics_ls.setup({\n    settings = {\n        snippet = {\n            enable = true,\n            sources = { \"path/to/your/snippetFolder\" }\n        },\n    }\n})\n```\n\n\u003c!-- LTeX: enabled=false --\u003e\n#### nvim-snippets\n\u003c!-- LTeX: enabled=true --\u003e\n\n```lua\nrequire(\"nvim-snippets\").setup {\n\tsearch_paths = { \"path/to/your/snippetFolder\" },\n}\n```\n\n\u003c!-- LTeX: enabled=false --\u003e\n#### vim-vsnip\n\u003c!-- LTeX: enabled=true --\u003e\n\n```lua\nvim.g.vsnip_snippet_dir = \"path/to/your/snippetFolder\"\n-- OR\nvim.g.vsnip_snippet_dirs = { \"path/to/your/snippetFolder\" }\n```\n\n\u003c!-- LTeX: enabled=false --\u003e\n#### yasp.nvim\n\u003c!-- LTeX: enabled=true --\u003e\n\n```lua\nrequire(\"yasp\").setup {\n\tpaths = {\n\t\tvim.fn.stdpath(\"config\") .. \"/snippets/package.json\",\n\t},\n\tdescs = { \"user snippets\" },\n}\n```\n\n## Usage\n\n### Starting `nvim-scissors`\nThe plugin provides two lua functions, `.addNewSnippet()` and `.editSnippet()`:\n\n```lua\nvim.keymap.set(\n\t\"n\",\n\t\"\u003cleader\u003ese\",\n\tfunction() require(\"scissors\").editSnippet() end,\n\t{ desc = \"Snippet: Edit\" }\n)\n\n-- when used in visual mode, prefills the selection as snippet body\nvim.keymap.set(\n\t{ \"n\", \"x\" },\n\t\"\u003cleader\u003esa\",\n\tfunction() require(\"scissors\").addNewSnippet() end,\n\t{ desc = \"Snippet: Add\" }\n)\n```\n\nYou can also use `:ScissorsAddNewSnippet` and `:ScissorsEditSnippet` if you\nprefer ex commands.\n\nThe `:ScissorsAddSnippet` ex command also accepts a range to prefill the snippet\nbody (for example `:'\u003c,'\u003e ScissorsAddSnippet` or `:3 ScissorsAddSnippet`).\n\n### Editing snippets in the popup window\nThe popup is just one window, so you can move between the prefix area and the\nbody with `j` and `k` or any other movement command. (\"Prefix\" is how trigger\nwords are referred to in the VSCode format.)\n\nUse `showHelp` (default keymap: `?`) to show a notification containing all\nkeymaps.\n\nThe popup intelligently adapts to changes in the prefix area: Each line\nrepresents one prefix, and creating or removing lines in that area thus changes\nthe number of prefixes.\n\n\u003cimg alt=\"Showcase prefix change\" width=70% src=\"https://github.com/chrisgrieser/nvim-scissors/assets/73286100/d54f96c2-6751-46e9-9185-77b63eb2664a\"\u003e\n\n## Configuration\nThe `.setup()` call is optional.\n\n```lua\n-- default settings\nrequire(\"scissors\").setup {\n\tsnippetDir = vim.fn.stdpath(\"config\") .. \"/snippets\",\n\teditSnippetPopup = {\n\t\theight = 0.4, -- relative to the window, between 0-1\n\t\twidth = 0.6,\n\t\tborder = vim.fn.has(\"nvim-0.11\") == 1 and vim.o.winborder or \"rounded\",\n\t\tkeymaps = {\n\t\t\t-- if not mentioned otherwise, the keymaps apply to normal mode\n\t\t\tcancel = \"q\",\n\t\t\tsaveChanges = \"\u003cCR\u003e\", -- alternatively, can also use `:w`\n\t\t\tgoBackToSearch = \"\u003cBS\u003e\",\n\t\t\tdeleteSnippet = \"\u003cC-BS\u003e\",\n\t\t\tduplicateSnippet = \"\u003cC-d\u003e\",\n\t\t\topenInFile = \"\u003cC-o\u003e\",\n\t\t\tinsertNextPlaceholder = \"\u003cC-p\u003e\", -- insert \u0026 normal mode\n\t\t\tshowHelp = \"?\",\n\t\t},\n\t},\n\ttelescope = {\n\t\t-- By default, the query only searches snippet prefixes. Set this to\n\t\t-- `true` to also search the body of the snippets.\n\t\talsoSearchSnippetBody = false,\n\n\t\t-- accepts the common telescope picker config\n\t\topts = {\n\t\t\tlayout_strategy = \"horizontal\",\n\t\t\tlayout_config = {\n\t\t\t\thorizontal = { width = 0.9 },\n\t\t\t\tpreview_width = 0.6,\n\t\t\t},\n\t\t},\n\t},\n\n\t-- `none` writes as a minified json file using `vim.encode.json`.\n\t-- `yq`/`jq` ensure formatted \u0026 sorted json files, which is relevant when\n\t-- you version control your snippets. To use a custom formatter, set to a\n\t-- list of strings, which will then be passed to `vim.system()`.\n\t---@type \"yq\"|\"jq\"|\"none\"|string[]\n\tjsonFormatter = \"none\",\n\n\tbackdrop = {\n\t\tenabled = true,\n\t\tblend = 50, -- between 0-100\n\t},\n\ticons = {\n\t\tscissors = \"󰩫\",\n\t},\n}\n```\n\n\u003e Note that you can configure the `snacks` picker through `snacks.nvim`'s\npicker configuration. See the\n[snacks docs](https://github.com/folke/snacks.nvim/blob/main/docs/picker.md)\nfor more information.\n\n## Cookbook \u0026 FAQ\n\n### Introduction to the VSCode-style snippet format\nThis plugin requires that you have a valid VSCode snippet folder. In addition to\nsaving the snippets in the required JSON format, there must also be a\n`package.json` file at the root of the snippet folder, specifying which files\nshould be used for which languages.\n\nExample file structure inside the `snippetDir`:\n\n```txt\n.\n├── package.json\n├── python.json\n├── project-specific\n│   └── nvim-lua.json\n├── javascript.json\n└── allFiletypes.json\n```\n\nExample `package.json`:\n\n```json\n{\n\t\"contributes\": {\n\t\t\"snippets\": [\n\t\t\t{\n\t\t\t\t\"language\": \"python\",\n\t\t\t\t\"path\": \"./python.json\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"language\": \"lua\",\n\t\t\t\t\"path\": \"./project-specific/nvim-lua.json\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"language\": [\"javascript\", \"typescript\"],\n\t\t\t\t\"path\": \"./javascript.json\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"language\": \"all\",\n\t\t\t\t\"path\": \"./allFiletypes.json\"\n\t\t\t}\n\t\t]\n\t},\n\t\"name\": \"my-snippets\"\n}\n```\n\n\u003e [!NOTE]\n\u003e The special filetype `all` enables the snippets globally, regardless of\n\u003e filetype.\n\nExample snippet file (here: `nvim-lua.json`):\n\n```json\n{\n  \"autocmd (Filetype)\": {\n    \"body\": [\n      \"vim.api.nvim_create_autocmd(\\\"FileType\\\", {\",\n      \"\\tpattern = \\\"${1:ft}\\\",\",\n      \"\\tcallback = function()\",\n      \"\\t\\t$0\",\n      \"\\tend,\",\n      \"})\"\n    ],\n    \"prefix\": \"autocmd (Filetype)\"\n  },\n  \"file exists\": {\n    \"body\": \"local fileExists = vim.uv.fs_stat(\\\"${1:filepath}\\\") ~= nil\",\n    \"prefix\": \"file exists\"\n  },\n}\n```\n\nFor details, read the official VSCode snippet documentation:\n- [Snippet file specification](https://code.visualstudio.com/docs/editor/userdefinedsnippets)\n- [`package.json` specification](https://code.visualstudio.com/api/language-extensions/snippet-guide)\n- [LuaSnip-specific additions to the format](https://github.com/L3MON4D3/LuaSnip/blob/master/DOC.md#vs-code)\n\n### Tabstops and variables\n[Tabstops](https://code.visualstudio.com/docs/editor/userdefinedsnippets#_tabstops)\nare denoted by `$1`, `$2`, `$3`, etc., with `$0` being the last tabstop. They\nsupport placeholders such as `${1:foobar}`.\n\n\u003e [!NOTE]\n\u003e Due to the use of `$` in the snippet syntax, any *literal* `$` needs to be\n\u003e escaped as `\\$`.\n\nFurthermore, there are various variables you can use, such as `$TM_FILENAME` or\n`$LINE_COMMENT`. [See here for a full list of\nvariables](https://code.visualstudio.com/docs/editor/userdefinedsnippets#_variables).\n\n\u003c!-- LTeX: enabled=false --\u003e\n### friendly-snippets\n\u003c!-- LTeX: enabled=true --\u003e\nEven though the snippets from the [friendly-snippets](https://github.com/rafamadriz/friendly-snippets)\nrepository are written in the VSCode-style format, editing them directly is not\nsupported. The reason being that any changes made would be overwritten as soon\nas the `friendly-snippets` repository is updated (which happens fairly\nregularly). Unfortunately, there is little `nvim-scissors` can do about that.\n\nWhat you can do, however, is to copy individual snippets files from the\n`friendly-snippets` repository into your own snippet folder, and edit them there.\n\n### Edit snippet title or description\n`nvim-scissors` only allows to edit the snippet prefix and snippet body, to keep\nthe UI as simple as possible. For the few cases where you need to edit a\nsnippet's title or description, you can use the `openInFile` keymap and edit\nthem directly in the snippet file.\n\n### Version controlling snippets \u0026 snippet file formatting\nThis plugin writes JSON files via `vim.encode.json()`. That method saves\nthe file in minified form and does not have a\ndeterministic order of dictionary keys.\n\nBoth, minification and unstable key order, are a problem if you\nversion-control your snippet collection. To solve this issue, `nvim-scissors`\nlets you optionally unminify and sort the JSON files via `yq` or `jq` after\nupdating a snippet. (Both are also available via\n[mason.nvim](https://github.com/williamboman/mason.nvim).)\n\nIt is recommended to run `yq`/`jq` once on all files in your snippet collection,\nsince the first time you edit a file, you would still get a large diff from the\ninitial sorting. You can do so with `yq` using this command:\n\n```bash\ncd \"/your/snippet/dir\"\nfd \".*\\.json\" | xargs -I {} yq --inplace --output-format=json \"sort_keys(..)\" {}\n```\n\nHow to do the same with `jq` is left as an exercise to the reader.\n\n### Snippets on visual selections (`Luasnip` only)\nWith `Luasnip`, this is an opt-in feature, enabled via:\n\n```lua\nrequire(\"luasnip\").setup {\n\tstore_selection_keys = \"\u003cTab\u003e\",\n}\n```\n\nIn your VSCode-style snippet, use the token `$TM_SELECTED_TEXT` at the location\nwhere you want the selection to be inserted. (It's roughly the equivalent of\n`LS_SELECT_RAW` in the `Luasnip` syntax.)\n\nThen, in visual mode, press the key from `store_selection_keys`. The selection\ndisappears, and you are put in insert mode. The next snippet you now trigger\nis going to have `$TM_SELECTED_TEXT` replaced with your selection.\n\n### Auto-triggered snippets (`Luasnip` only)\nWhile the VSCode snippet format does not support auto-triggered snippets,\n`LuaSnip` allows you to [specify auto-triggering in the VSCode-style JSON\nfiles by adding the `luasnip` key](https://github.com/L3MON4D3/LuaSnip/blob/master/DOC.md#vs-code).\n\n`nvim-scissors` does not touch any keys other than `prefix` and `body` in the\nJSON files, so any additions like the `luasnip` key are preserved.\n\n\u003e [!TIP]\n\u003e You can use the `openInFile` keymap to directory open JSON file at the\n\u003e snippet's location to make edits there easier.\n\n## About the author\nIn my day job, I am a sociologist studying the social mechanisms underlying the\ndigital economy. For my PhD project, I investigate the governance of the app\neconomy and how software ecosystems manage the tension between innovation and\ncompatibility. If you are interested in this subject, feel free to get in touch.\n\nI also occasionally blog about vim: [Nano Tips for Vim](https://nanotipsforvim.prose.sh)\n\n- [Website](https://chris-grieser.de/)\n- [Mastodon](https://pkm.social/@pseudometa)\n- [ResearchGate](https://www.researchgate.net/profile/Christopher-Grieser)\n- [LinkedIn](https://www.linkedin.com/in/christopher-grieser-ba693b17a/)\n\n\u003ca href='https://ko-fi.com/Y8Y86SQ91' target='_blank'\u003e\u003cimg height='36'\nstyle='border:0px;height:36px;' src='https://cdn.ko-fi.com/cdn/kofi1.png?v=3'\nborder='0' alt='Buy Me a Coffee at ko-fi.com' /\u003e\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrisgrieser%2Fnvim-scissors","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchrisgrieser%2Fnvim-scissors","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrisgrieser%2Fnvim-scissors/lists"}