LuaSnipとは
LuaSnipは,vimで使用するスニペットを管理するためのプラグインです.
開発者が常用するコードのフレーズを保存し、簡単に呼び出すことができるようにすることで、開発効率を向上させることができます。
使用例
私がスニペットの導入を行なったのは,競技プログラミングのコンテストに参加する際に常用するコードを保存しておき,コーディング時間を可能な限り減らすことで,思考する時間を増やすことを目的としていました.
例えば,これまで私は以下のコードを問題ごとに毎回打ち込んでいました.
#include <bits/stdc++.h>
using nameplace std;
これを,"std"と打ち込むことで呼び出されるように設定しておけば,一瞬で記述することが可能になります.
インストール
コードのみを見たい場合は,以下のリポジトリを参照してください.
LuaSnipとcmp_luasnipをインストールします.
私はPackerを使って,プラグインの管理を行なっているため,以下のように記述しました.
-- LuaSnip
use({ 'L3MON4D3/LuaSnip' })
-- cmpでLuaSnipを使うためのプラグイン
use({ 'saadparwaiz1/cmp_luasnip' })
設定
補完ソースにLuaSnipで設定したスニペットを追加し,でLuaSnipのジャンプ機能を使えるようにnvim-cmpの設定ファイルに記述します.
local cmp = require('cmp')
local luasnip = require('luasnip')
cmp.setup({
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
:
省略
:
-- Keymapを設定
['<C-k>'] = cmp.mapping(function(fallback)
if luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end, { 'i', 's' })
}),
sources = {
{ name = 'nvim_lsp' },
-- LuaSnipを追加
{ name = 'luasnip' },
{ name = 'buffer' },
},
})
vim.cmd [[
set completeopt=menuone,noinsert,noselect
highlight! default link CmpItemKind CmpItemMenuDefault
]]
そして,LuaSnipの設定ファイルを作り,使いたいスニペットを書いていきます.
今回はC++用のスニペットを記述していますが,”cpp”の部分を"all"に変えれば,全てのファイルに適用されるスニペットに,"py"に変えれば,Pythonファイル用のスニペットを記述できます.
local ls = require('luasnip')
local snip = ls.snippet
local text = ls.text_node
local insert = ls.insert_node
ls.add_snippets(nil, {
cpp = {
snip({
trig = 'std',
}, {
text({'#include <bits/stdc++.h>', 'using namespace std;', ''}),
insert(0),
}),
},
})
cppファイルでを開き,"std"と打ち込むことで,設定したスニペットが表示されているはずです.