Vimでスニペット機能を使ってみた
スニペットとは?
スニペットとは保存したコードを短いキーワードで呼び出すことができます。例えばforと書いてTabキーを押すことでforの構造を呼び出すことができ、効率的にコードを書くことができます。
この記事で使うツール
- vim-plug: Vimのプラグインを簡単にインストール・管理するためのプラグインマネージャー
- UltiSnips: Vimでスニペット機能を実現するための中核となるプラグイン。
- coc.nvim:コード補完やエラーチェックのプラグイン
対象読者
- 保存したコードを簡単に展開したい方
- vimのsnippetに興味がある方
- terraformを高速で書きたい方
検証環境
- Ubuntu 24.04
手順
- 前提ツールのインストール
- .vimrcファイルの作成
- プラグインのインストール
- スニペットを試してみる
- オリジナルスニペットを作成する
1. 前提ツールのインストール
まず、スニペット環境を構築するためのツールをインストールします。
1. Vimの確認
Ubuntu 24.04であれば最初からインストールされています。確認のためにvimを起動します。
vim
2. Node.jsをインストール
coc.nvimプラグインはにNode.jsが必要なため、インストールします。
curl -fL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
インストール確認
node -v
npm -v
3. vim-plugのインストール
Vimのプラグインを管理する vim-plug をインストールします。
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
2. .vimrcファイルの作成
次に、Vimの動作をカスタマイズするための設定ファイル .vimrc をホームディレクトリに作成し、以下の内容を記述します。
vim ~/.vimrc
ファイルを開いたら、以下のコードを貼り付けてください。
call plug#begin()
" スニペット機能の本体
Plug 'SirVer/ultisnips'
" 定義済みスニペット集
Plug 'honza/vim-snippets'
" 補完プラグイン
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" [オプション]terraformのシンタックスハイライトやインデントをサポート
Plug 'hashivim/vim-terraform'
" [オプション]見やすいカラースキーム
Plug 'tomasr/molokai'
call plug#end()
" カラースキームの指定
colorscheme molokai
" coc.nvimのための推奨設定
" Enterキーで補完を確定する
inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm() : "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
3. プラグインのインストール
1. Vimを起動してPlugInstallの実行
.vimrcのplug#begin()とplug#end()の間に記述したプラグイン(UltiSnipsやcoc.nvim)をインストールします。
vim -c 'PlugInstall'
2. :CocInstallの実行
coc.nvimの拡張機能をインストールします。今回はスニペットの拡張機能を追加します。
vim -c 'CocInstall coc-snippets'
4. スニペットを試してみる
これで使えるようになっているはずなので実際にコードを展開してみます。
- Vimで適当なファイル(例: test.txt)を開きます。
timeと入力し補完機能が出てTabキーを押して現在の時間が出れば完璧です。
5. オリジナルスニペットを作成する
今回はどのファイルでも使えるスニペットを設定します。
1. 以下のコマンドを実行してファイルを開く
vim -c 'UltiSnipsEdit all'
と入力するとスニペットの設定ファイルが開くのでそこで自分が作りたいコードを作ります。
2. スニペットを作る
snippet トリガー "説明文" b
スニペットの内容
endsnippet
- snippet : 定義の開始を示します。
- トリガー : スニペットを展開するための文字です。
- "説明文" : どんなスニペットか説明します。
- b : オプションの一つで、、行頭でトリガーを入力した場合のみ展開されるようにします。
- スニペットの内容 : お好きな文字をここに入れます。
- endsnippet : 定義の終了を示します。
例
snippet account "my account id" b
123456789
endsnippet
ファイルを保存すればaccountと入力してTabキーを押すと123456789が現れます。
また特定の言語でのみ使用されるようにするにはそれぞれのファイルに書き込みます。
terraformファイル(.tf)の場合は
vim -c 'UltiSnipsEdit terraform'
と入力します。
そしたらそれ用のファイルが開かれるので
好きなスニペットを設定します。
snippet aws-tf "aws terraform provider" b
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 6.0"
}
}
}
# Configure the AWS Provider
provider "aws" {
region = "us-east-1"
}
endsnippet
ファイル保存後、terraformファイル(.tf)を開き、aws-tfと入力してTabキーを押すとよく使うterraformのprovider設定を一瞬で呼び出せます。
感想・学び
高速に開発でき、毎回同じ環境を構築ができます。いろんなスニペットを追加して改良しましょう。
Discussion