Ⅰ. 插件描述
Snippets solution for coc.nvimⅡ. 基本信息
|
Ⅲ. 安装方法
使用Vundle管理器安装
在你的.vimrc下添加:Plugin 'neoclide/coc-snippets'
… 然后在Vim中运行以下命令:
:source %
:PluginInstall
对于Vundle版本 < 0.10.2,请用上面的Bundle替换Plugin。
使用NeoBundle管理器安装
在你的.vimrc下添加:NeoBundle 'neoclide/coc-snippets'
… 然后在Vim中运行以下命令:
:source %
:NeoBundleInstall
使用VimPlug管理器安装
在你的.vimrc下添加:Plug 'neoclide/coc-snippets'
… 然后在Vim中运行以下命令:
:source %
:PlugInstall
使用Pathogen管理器安装
在终端中运行以下命令:cd ~/.vim/bundle
git clone https://github.com/neoclide/coc-snippets
Ⅳ. 文档说明
# coc-snippets
Snippets solution for coc.nvim
Snippet preview requires neovim 0.4 or latest vim8
It's capable of:
- Load UltiSnips snippets.
- Load snipmate snippets.
- Load VSCode snippets from coc extensions.
- Load VSCode snippets from custom directories.
- Load UltiSnips snippets from configured folder.
- 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 faq.
Why?
- Use same keys for jump placeholder.
- Nested snippet support.
- Always async, never slows you down.
- Improved match for complete items with TextEdit support.
- Edit snippets of current buffer by
:CocList snippets
, sorted by mru.
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)
Make <tab>
used for trigger completion, completion confirm, snippet expand and jump like VSCode.
inoremap <silent><expr> <TAB>
\ pumvisible() ? coc#_select_confirm() :
\ coc#expandableOrJumpable() ? "\<C-r>=coc#rpc#request('doKeymap', ['snippets-expand-jump',''])\<CR>" :
\ <SID>check_back_space() ? "\<TAB>" :
\ coc#refresh()
function! s:check_back_space() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
let g:coc_snippet_next = '<tab>'
Note: coc#_select_confirm()
helps select first complete item when there's
no complete item selected, neovim 0.4 or latest vim8 required for this function
work as expected.
Ultisnips features
Some ultisnips features are not supported:
- [x] Position check of trigger option, including
b
,w
andi
. - [x] Execute vim, python and shell code in snippet.
- [x]
extends
,priority
andclearsnippets
command in snippet file. - [x] Visual placeholder.
- [x] Placeholder and variable transform.
- [x] Expression snippet.
- [x] Automatic trigger snippet.
- [x] Context snippets.
- [x] Support loading snipmate snippets.
- [ ] Execute shell code with custom shabang (will not support).
- [ ] Automatic reformat snippet after change of placeholder (can't support).
- [ ] Format related snippet options, including
t
,s
andm
(can't support). - [ ] Snippet actions (can't support).
Note: python regex in snippet are converted to javascript regex, however,
some regex patterns can't be supported by javascript, including\u
(?s)
\Z
(?(id/name)yes-pattern|no-pattern)
.
Options
snippets.priority
: priority of snippets source, default90
.snippets.extends
: extends filetype's snippets with other filetypes, example:{ "cpp": ["c"], "javascriptreact": ["javascript"], "typescript": ["javascript"] }
snippets.userSnippetsDirectory
, Directory that contains custom user ultisnips snippets, use ultisnips in extension root by default.snippets.shortcut
, shortcut in completion menu, defaultS
.snippets.autoTrigger
: enable auto trigger for auto trigger ultisnips snippets, defaulttrue
.snippets.triggerCharacters
: trigger characters for completion, default[]
.snippets.loadFromExtensions
: load snippets from coc.nvim extensions, default:true
.snippets.textmateSnippetsRoots
: absolute directories that contains textmate/VSCode snippets to load.snippets.ultisnips.enable
: enable load UltiSnips snippets, defaulttrue
.snippets.ultisnips.usePythonx
: usepythonx
for eval python code when possible, defaulttrue
.snippets.ultisnips.pythonVersion
: whenusePythonx
is false, python version to use for
python code, default to3
.snippets.ultisnips.directories
: directories that searched for snippet files,
could be subfolder in every $runtimepath or absolute paths, default:["UltiSnips"]
snippets.snipmate.enable
: enable load snipmate snippets, defaulttrue
.snippets.snippets.author
: author name used forg:snips_author
Commands
- Use
:CocList snippets
to open snippets list. - Use
:CocCommand snippets.editSnippets
to edit user snippet of current filetype. - Use
:CocCommand snippets.openSnippetFiles
to open snippet files of current filetype.
F.A.Q
Q: How to check if a snippet successfully loaded?
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.
Q: Do I need to install Ultisnips.
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 of 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()
.
Q: It doesn't load snippets from vim-go.
A: It uses g:UltiSnipsSnippetDirectories
which is not supported, you can
add settings:
snippets.ultisnips.directories: [
"UltiSnips",
"gosnippets/UltiSnips"
],
to load it.
Q: Ho could I add custom UltiSnips snippets.
A: You can create snippet files in folder: $VIMCONFIG/coc/ultisnips
, use
command :CocCommand snippets.editSnippets
to open user snippet of current
filetype.
License
MIT