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 的啟發