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 など) を実行できるシェルを使用する必要があります。幸いなことに、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
の wiki には、スーパータブのようなマッピングを設定する例も含まれています。
ローダーとその利点の一般的な説明については、ドキュメントを参照してください。次のリストは、簡単な概要としてのみ機能します。
VS Code のようなもの: プラグイン (rafamadriz/Friendly-snippets など) から既存の VS Code スタイル スニペットを使用するには、プラグインをインストールして追加するだけです。
require ( " luasnip.loaders.from_vscode " ). lazy_load ()
Neovim 設定のどこかにあります。 LuaSnip は起動時にプラグインに含まれるスニペットをロードします。カスタム スニペット ディレクトリへのパスをload関数に渡すことで、独自のカスタム 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 もあります。
主な選択肢は 2 つあります。SnipMate/VS Code スニペットを使用する (より簡単)、または Lua でスニペットを作成する (より複雑ですが、機能が豊富です)。どちらの場合でも、始めるためのいくつかの提案を次に示します。
DOC.md
内の VS Code または SnipMate パッケージ。これら 2 つの方法のうち、スニペットを作成するには、間違いなく 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
する) ことを強くお勧めします。DOC.md
にも文書化されています。【中文版】中国語のDOCはこちらです。
Web 上の LuaSnip ビデオとチュートリアルは次のとおりです。
ls.snippets = {}
ではなくls.add_snippets
を介して追加されるようになりました。vsnip.vim からインスピレーションを得た