A port of Gilles Castel's snippets for the LuaSnip Engine.
UltiSnips felt unbearably slow. See neovim/neovim#7063 and https://github.com/SirVer/ultisnips/issues?q=label%3A%22neovim+only%22+is%3Aclosed.
Depends on vimtex to determine if the
cursor is within math mode. Alternatively, you can use
nvim-treesitter (experimental) by passing { use_treesitter = true }
to the setup call.
Can be installed like any neovim plugin. If using wbthomason/packer.nvim:
use {
"iurimateus/luasnip-latex-snippets.nvim",
-- replace "lervag/vimtex" with "nvim-treesitter/nvim-treesitter" if you're
-- using treesitter.
requires = { "L3MON4D3/LuaSnip", "lervag/vimtex" },
config = function()
require'luasnip-latex-snippets'.setup()
-- or setup({ use_treesitter = true })
end,
-- treesitter is required for markdown
ft = { "tex", "markdown" },
}
The following convention, from SirVer/ultisnips, is used for naming lua tables and respective files:
A: Automatic snippet expansion - snippets will activate as soon as their trigger
matches.
w: Word boundary - With this option the snippet trigger will match when the
trigger is a word boundary character. This is the default behavior.
b: Beginning of line expansion - A snippet with this option is expanded only if
the trigger is the first word on the line (i.e., only whitespace precedes the
trigger).
Note that the regex term used in LuaSnip is misleading: it is not a POSIX
regexp. What's actually being used is Lua pattern matching, which has some
limitations. In particular, it lacks positive lookbehind and alternation |
.
The first which is used in postfix completions (e.g. match delta
, but not
\delta
) and can be handled with simple functions. The second was solved by
splitting and/or partially rewriting the expressions.
See discussion iurimateus#3
- Tests