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은 Semantic Versioning을 사용합니다(약간의 여유가 있으면 큰 패치가 부 버전으로 끝날 수 있음)!
릴리스는 vMajor.Minor.Patch
태그가 지정되므로 최신 주요 릴리스를 따르는 것이 좋습니다.
새 버전이 출시되면 알림을 받을 수 있도록 저장소의 릴리스를 지켜보세요.
메모
Windows에서는 Unix 명령(MinGW,MSYS2 등)을 실행할 수 있는 셸을 사용해야 합니다. 다행히 Git은 sh.exe
를 제공하므로 무거운 MSYS2 환경을 설치할 필요가 없습니다. Git 외에 jsregexp
설치하려면 C 컴파일러와 make
도 필요합니다. 또한 빌드 명령을 변경해야 할 수도 있습니다: 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>
, choiceNode
에 있을 때 현재 선택 사항을 변경하기 위한 <Ctrl-E>
가 있습니다.
" 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와 유사 : 플러그인(예: rafamadriz/Friendly-snippets)에서 기존 VS Code 스타일 스니펫을 사용하려면 플러그인을 설치한 다음 추가하면 됩니다.
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와 유사 : 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
Neovim의 :help
기능과 함께 사용할 수 있는 DOC.md
의 일반 텍스트 버전입니다.Examples/snippets.lua
파일에는 Lua로 작성된 많은 예제 조각이 포함되어 있습니다. LuaSnip의 고급 기능을 사용하기 전에 이러한 예제 조각을 살펴보는 것이 좋습니다(또는 더 나은 방법은 :luafile
ing).DOC.md
에도 문서화되어 있습니다.【中文版】중국어 DOC가 여기에 있습니다.
다음은 웹에 있는 LuaSnip 비디오 및 튜토리얼입니다:
ls.snippets = {}
대신 ls.add_snippets
통해 스니펫이 추가됩니다.vsnip.vim에서 영감을 얻었습니다.