Load massCode snippets from running massCode application (disabled by default).
Create massCode snippets through the snippets.editMassCodeSnippets command.
Provide snippets as completion items.
Provide expand and expandOrJump keymaps for snippet.
Provide snippets list for edit snippet.
Provide snippets.editSnippets command for edit user snippets of current filetype.
Note: some features of ultisnips and snipmate format snippets not supported,
checkout Ultisnips features.
Why?
Use same keys for jump placeholder.
Nested snippet support.
Always async, never slows you down.
Preview snippet context in float window/popup.
Improved match for complete items with TextEdit support.
Edit snippets of current buffer by :CocList snippets.
Python support
Ultisnips provider needs pythonx support on (neo)vim, to check the feature exists,
try:
:echo has('pythonx')
On neovim, run command:
:checkhealth
and make sure you have Python 3 provider for neovim installed.
On vim8, run command:
:pyx print(1)
in your vim, if it throws, it means your vim is not compiled with python support
or the python dynamic lib required by vim is missing(or broken).
Note: some python code may require python feature that not supported by the
python interpreter used by vim, error will throw on that case.
Error will be shown when pythonx with (neo)vim can't work, fix pythonx
support or disable ultisnips support by add "snippets.ultisnips.enable": false
in your configuration file.
Install
In your vim/neovim, run command:
:CocInstall coc-snippets
Examples
" Use <C-l> for trigger snippet expand.
imap <C-l> <Plug>(coc-snippets-expand)
" Use <C-j> for select text for visual placeholder of snippet.
vmap <C-j> <Plug>(coc-snippets-select)
" Use <C-j> for jump to next placeholder, it's default of coc.nvim
let g:coc_snippet_next = '<c-j>'
" Use <C-k> for jump to previous placeholder, it's default of coc.nvim
let g:coc_snippet_prev = '<c-k>'
" Use <C-j> for both expand and jump (make expand higher priority.)
imap <C-j> <Plug>(coc-snippets-expand-jump)
" Use <leader>x for convert visual selected code to snippet
xmap <leader>x <Plug>(coc-convert-snippet)
Make <tab> used for trigger completion, completion confirm, snippet expand and jump like VSCode.
Update python code block after change of placeholder.
Execute shell code with custom shabang (will not support).
Option m, empty line in snippet not have indentation with coc.nvim.
Reformat snippet options, including t, s.
All snippet actions including pre_expand, post_expand and jump (can't support).
Note: python regex in snippet are converted to javascript regex, however,
some regex patterns can't be supported by javascript, including
(?x)(?s)\Z(?(id/name)yes-pattern|no-pattern).
Functions
coc#expandable() return 1 when can do snippet expand.
coc#jumpable() return 1 when snippet activated and can jump to next placeholder.
coc#expandableOrJumpable() return 1 when can do snippet expand or can jump
to next placeholder.
Key-mappings
Note you can't use noremap with <Plug> key-mappings.
<Plug>(coc-convert-snippet) Create new snippet with current selected text,
visual mode only.
<Plug>(coc-snippets-expand) Expand snippet with current inserted text,
insert mode only.
<Plug>(coc-snippets-expand-jump) Expand snippet or jump to next placeholder
of current snippet when possible, insert mode only.
<Plug>(coc-snippets-select) Remove selected text and save to
g:coc_selected_text which will replace $VISUAL on next snippet expand.
Commands
Use :CocList snippets to open snippets list used by current buffer.
Use :CocCommand snippets.openSnippetFiles to choose and open a snippet file
that used by current document.
Use :CocCommand snippets.editSnippets to edit user's ultisnips snippets of
current document filetype.
Use :CocCommand snippets.openOutput to open output channel of snippets.
Options
snippets.priority: priority of snippets source, default 90.
snippets.editSnippetsCommand: Open command used for snippets.editSnippets command, use coc.preferences.jumpCommand by default.
snippets.trace: Trace level of snippets channel.
snippets.excludePatterns: List of filepath patterns to exclude, $HOME and other environment variables are expanded.
snippets.extends: extends filetype's snippets with other filetypes, example:
snippets.ultisnips.directories: directories that searched for snippet files,
could be subfolder in every $runtimepath or absolute paths, default: ["UltiSnips"]
snippets.massCode.enable: Enable load snippets from MassCode. default: false
snippets.massCode.host: Http host of MassCode. default: "localhost"
snippets.massCode.port: Http port of MassCode. default: 3033
A: Use command :CocCommand workspace.showOutput snippets
Q: Some ultisnips snippet not works as expected.
A: Reformat after change of placeholder feature can't be supported for now,
and some regex pattern can't be converted to javascript regex pattern, so the
snippet can be failed to load.
Q: Where to get snippets?
A: One solution is install honza/vim-snippets which is widely used.
To create snippets yourself:
For Ultisnips, create ${filetype}.snippets in "snippets.ultisnips.directories"
For snipmate snippets, create ${filetype}.snippets in snippets folder
under your vim's runtimepath.
For VSCode snippets, create ${filetype}.json in your "snippets.textmateSnippetsRoots".
Q: Get error message ModuleNotFoundError: No module named 'vimsnippets'
A: No! This extension is designed to work with or without Ultisnips, you can
still install Ultisnips, but this extension would not run any code or read
configuration from it.
Q: How to check jumpable or expandable at current position.
A: Use functions provided by coc.nvim: coc#expandable()coc#jumpable() and coc#expandableOrJumpable().
A: You can create snippet files in folder: $VIMCONFIG/coc/ultisnips, use
command :CocCommand snippets.editSnippets to open user snippet of current
filetype.
Supporting
If you like this extension, consider supporting me on Patreon or PayPal:
The npm package coc-snippets receives a total of 749 weekly downloads. As such, coc-snippets popularity was classified as not popular.
We found that coc-snippets demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.It has 1 open source maintainer collaborating on the project.
Package last updated on 03 Sep 2022
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Socket’s Threat Research Team has uncovered 60 npm packages using post-install scripts to silently exfiltrate hostnames, IP addresses, DNS servers, and user directories to a Discord-controlled endpoint.