Neovim >= 0.7 (extmarks) jsregexp
สำหรับ lsp-snippet-transformations
(ดูที่นี่สำหรับเคล็ดลับในการติดตั้ง)
ด้วยตัวจัดการปลั๊กอินที่คุณต้องการ เช่น 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 "
}
เป็นกลุ่มปลั๊ก :
" 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 ใช้ Semantic Versioning (ด้วยความที่ยังเหลืออยู่ แพตช์ใหญ่อาจกลายเป็นเวอร์ชันรอง)!
การเผยแพร่จะถูกแท็กเป็น vMajor.Minor.Patch
เราขอแนะนำให้ติดตามการเผยแพร่ครั้งสำคัญล่าสุด
ลองพิจารณาดูการเผยแพร่ของพื้นที่เก็บข้อมูลเพื่อที่คุณจะได้รับแจ้งเมื่อมีเวอร์ชันใหม่ให้ใช้งาน
บันทึก
บน Windows คุณต้องใช้เชลล์ที่สามารถรันคำสั่ง Unix ได้ (MinGW, MSYS2 ฯลฯ) โชคดีที่ Git มี sh.exe
ดังนั้นคุณไม่จำเป็นต้องติดตั้งสภาพแวดล้อม MSYS2 จำนวนมาก นอกจาก Git แล้ว คุณต้องมีคอมไพเลอร์ C และ make
ติดตั้ง jsregexp
คุณอาจต้องเปลี่ยนคำสั่ง build: 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
ยังมีตัวอย่างสำหรับการตั้งค่าการแมปที่เหมือนแท็บซุปเปอร์
ตรวจสอบเอกสารเพื่อดูคำอธิบายทั่วไปเกี่ยวกับรถตักและคุณประโยชน์ รายการต่อไปนี้เป็นเพียงภาพรวมโดยย่อเท่านั้น
VS Code-like : หากต้องการใช้ตัวอย่างสไตล์ VS Code ที่มีอยู่จากปลั๊กอิน (เช่น rafamadriz/Friendly-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
-function:
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 Code snippet (ง่ายกว่า) หรือเขียน snippet ใน Lua (ซับซ้อนกว่าแต่ยังมีฟีเจอร์หลากหลายมากกว่า) ต่อไปนี้คือคำแนะนำบางส่วนสำหรับการเริ่มต้นใช้งานในทั้งสองกรณี:
DOC.md
ในบรรดาทั้งสองนั้น 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
ซึ่งมาพร้อมกับฟีเจอร์ :help
ของ NeovimExamples/snippets.lua
มีตัวอย่างโค้ดจำนวนมากที่เขียนด้วยภาษา Lua เราขอแนะนำให้ดู (หรือดีกว่านั้น :luafile
ing) ตัวอย่างโค้ดเหล่านี้ก่อนที่จะใช้ฟีเจอร์ขั้นสูงของ LuaSnipDOC.md
เช่นกัน【中文版】DOC ในภาษาจีนอยู่ที่นี่
นี่คือวิดีโอและบทช่วยสอน LuaSnip บางส่วนบนเว็บ:
ls.add_snippets
แทนที่จะเพิ่มด้วย ls.snippets = {}
แรงบันดาลใจจาก vsnip.vim