Neovim >= 0.7 (extmarks) 用于lsp-snippet-transformations
的jsregexp
(有关安装它的一些提示,请参阅此处)。
使用您首选的插件管理器,即 vim-plug、Packer 或lazy
包装工:
use ({
" L3MON4D3/LuaSnip " ,
-- follow latest release.
tag = " v2.* " , -- Replace <CurrentMajor> by the latest released major (first number of latest release)
-- install jsregexp (optional!:).
run = " make install_jsregexp "
})
懒惰的:
{
" L3MON4D3/LuaSnip " ,
-- follow latest release.
version = " v2.* " , -- Replace <CurrentMajor> by the latest released major (first number of latest release)
-- install jsregexp (optional!).
build = " make install_jsregexp "
}
vim 插件:
" follow latest release and install jsregexp.
Plug ' L3MON4D3/LuaSnip ' , { ' tag ' : ' v2.* ' , ' do ' : ' make install_jsregexp ' } " Replace <CurrentMajor> by the latest released major (first number of latest release)
检查右侧的Releases
部分以获取最新的主要版本。
LuaSnip 使用语义版本控制(有一些余地,大补丁可能最终会成为次要版本)!
版本将被标记为vMajor.Minor.Patch
,我们建议遵循最新的主要版本。
考虑查看存储库的版本,以便在新版本可用时您会收到通知。
笔记
在 Windows 上,您需要使用可以运行 Unix 命令(MinGW、MSYS2 等)的 shell。幸运的是,Git 提供了sh.exe
,因此您不需要安装繁重的 MSYS2 环境。除了 Git 之外,您还需要 C 编译器和make
来安装jsregexp
。您可能还需要更改构建命令: make install_jsregexp CC=gcc.exe SHELL=C:/path/to/sh.exe .SHELLFLAGS=-c
:
SHELL=C:/path/to/Git/usr/bin/sh.exe # if Git/MinGW/MSYS2 `sh.exe` is not in PATH
.SHELLFLAGS=-c # if Git/MinGW/MSYS2 `sh.exe` is not in PATH
CC=gcc.exe # if CC's default value cc is not set (when `which cc` fails to find the compiler command)
NEOVIM_BIN_PATH=C:/path/to/Neovim/bin # if the Makefile fails to automatically detect the Neovim/bin path
在 Vim 脚本中,使用<Tab>
向前跳转/展开片段,使用<Shift-Tab>
向后跳转,使用<Ctrl-E>
在choiceNode
中更改当前选择...
" press <Tab> to expand or jump in a snippet. These can also be mapped separately
" via <Plug>luasnip-expand-snippet and <Plug>luasnip-jump-next.
imap <silent> <expr> <Tab> luasnip#expand_or_jumpable() ? ' <Plug> luasnip-expand-or-jump' : ' <Tab> '
" -1 for jumping backwards.
inoremap <silent> <S-Tab> <cmd> lua require'luasnip'.jump(-1) <Cr>
snoremap <silent> <Tab> <cmd> lua require('luasnip').jump(1) <Cr>
snoremap <silent> <S-Tab> <cmd> lua require('luasnip').jump(-1) <Cr>
" For changing choices in choiceNodes (not strictly necessary for a basic setup).
imap <silent> <expr> <C-E> luasnip#choice_active() ? ' <Plug> luasnip-next-choice' : ' <C-E> '
smap <silent> <expr> <C-E> luasnip#choice_active() ? ' <Plug> luasnip-next-choice' : ' <C-E> '
...或者在Lua中,使用一组不同的键: <Ctrl-K>
用于扩展, <Ctrl-L>
用于向前跳转, <Ctrl-J>
用于向后跳转, <Ctrl-E>
用于更改活动选择。
local ls = require ( " luasnip " )
vim . keymap . set ({ " i " }, " <C-K> " , function () ls . expand () end , { silent = true })
vim . keymap . set ({ " i " , " s " }, " <C-L> " , function () ls . jump ( 1 ) end , { silent = true })
vim . keymap . set ({ " i " , " s " }, " <C-J> " , function () ls . jump ( - 1 ) end , { silent = true })
vim . keymap . set ({ " i " , " s " }, " <C-E> " , function ()
if ls . choice_active () then
ls . change_choice ( 1 )
end
end , { silent = true })
nvim-cmp
的 wiki 还包含一个设置超级选项卡式映射的示例。
查看文档以获取有关加载程序及其优点的一般说明。以下列表仅作为简短概述。
类似 VS Code :要使用插件中现有的 VS Code 样式片段(例如 rafamadriz/friend-snippets),只需安装插件,然后添加
require ( " luasnip.loaders.from_vscode " ). lazy_load ()
在你的 Neovim 配置中的某个地方。 LuaSnip 将在启动时加载插件中包含的片段。您还可以通过将自定义代码片段目录的路径传递给加载函数来轻松加载您自己的自定义 VSCode 样式代码片段:
-- load snippets from path/of/your/nvim/config/my-cool-snippets
require ( " luasnip.loaders.from_vscode " ). lazy_load ({ paths = { " ./my-cool-snippets " } })
有关 VS Code 加载器的更多信息,请查看示例或文档。
SnipMate-like :与 VS Code 包非常相似;安装一个提供片段的插件并调用load
函数:
require ( " luasnip.loaders.from_snipmate " ). lazy_load ()
SnipMate 格式非常简单,因此添加自定义片段只需要几个步骤:
init.vim
旁边(或runtimepath
中的任何其他位置)添加一个名为snippets
目录。<filetype>.snippets
的文件,并在其中添加给定文件类型的片段(如需灵感,请检查 honza/vim-snippets)。 # comment
snippet <trigger> <description>
<snippet-body>
snippet if C-style if
if ( $1 )
$0
同样,有一些示例和文档。
Lua :通过调用require("luasnip").add_snippets(filetype, snippets)
添加片段。可以在此处找到相关示例。
通过使用 Lua 的加载器,这也可以做得更干净,具有使用加载器带来的所有好处
还有一个收集各种语言片段的存储库,molleweide/LuaSnip-snippets.nvim
您有两个主要选择:使用 SnipMate/VS 代码片段(更简单)或在 Lua 中编写片段(更复杂但功能更丰富)。以下是针对这两种情况的一些入门建议:
DOC.md
中的 VS Code 或 SnipMate 包。在这两者中,SnipMate 绝对是编写片段的更舒适的方式。config
:值得注意的是: region_check_events
用于跳转到光标不再位于其中的片段的末尾, delete_check_events
用于清理文本已删除的片段, enable_autosnippets
用于启用自动片段扩展。extras
:该模块包含许多功能,使编写代码片段变得更加容易; fmt
和lambda
特别有用。lua-loader
:一种非常有用的加载片段的方法,比调用add_snippets
更舒服。functionNode
、 dynamicNode
、 choiceNode
和restoreNode
。注意:您可能需要查看下面的“新用户资源”部分,而不是立即阅读官方文档,因为这些文档更多地是作为参考手册而不是新用户教程编写的。
DOC.md
是主要文档 - 它概述了如何编写代码片段,解释了每个 LuaSnip 节点的角色和用例,展示了如何从 Lua、VS Code 和 SnipMate 格式加载代码片段,并涵盖了可用的 LuaSnip API 。:help luasnip.txt
是DOC.md
的纯文本版本,可通过 Neovim 的:help
功能使用。Examples/snippets.lua
包含许多用 Lua 编写的示例片段 - 我们强烈建议在使用 LuaSnip 的高级功能之前浏览(或者更好的是:luafile
ing)这些示例片段。DOC.md
中。【中文版】中文DOC来了。
以下是网络上的一些 LuaSnip 视频和教程:
ls.add_snippets
添加代码片段,而不是使用ls.snippets = {}
受到 vsnip.vim 的启发