vimのsnippet

Share on:

今回はdebian busterのサラのAWSイメージを使おうと思います。こういう時便利だよね。

とりあえずvimすら入ってないので入れる所から

1$ sudo apt install vim git
2$ sudo apt purge nano

nanoとか消しちゃってるけど。。

でvim-plugいれます。

1$ git clone https://gitlab.com/snippets/2022438.git

これは自分のgitlabのスニペットだけど(意図的に紛らわしい)、これ、単にオフィシャルのシェルスクリプトを貼って保存しただけですが、パブリックアクセスできます。まあこんな具合になんかまるごと到底記憶できないが、ちょっとメモっておきたい小さいコードの事をスニペットといったりしますが、vimの場合はもうちょっと違ってきます。

ま、ともあれvim-plugをインストールします。curlとかはAMIには入ってると思うけどコマンドたりなきゃaptで

1$ cd 2022438/
2$ sh vim-plug-install.sh

スニペットエンジンのインストール

https://github.com/SirVer/ultisnips

やっぱスターが多いのがいいと思うんですよ。

quickstartをちょっとvimplug向けに変えてますが概ねこんなもんでしょう。

 1call plug#begin()
 2
 3Plug 'SirVer/ultisnips'
 4
 5" Snippets are separated from the engine. Add this if you want them:
 6Plug 'honza/vim-snippets'
 7call plug#end()
 8
 9" Trigger configuration. You need to change this to something else than
10" <tab> if you use https://github.com/Valloric/YouCompleteMe.
11let g:UltiSnipsExpandTrigger="<tab>"
12let g:UltiSnipsJumpForwardTrigger="<c-b>"
13let g:UltiSnipsJumpBackwardTrigger="<c-z>"
14
15" If you want :UltiSnipsEdit to split your window.
16let g:UltiSnipsEditSplit="vertical"

とします。こういうのもVCSで管理したらいいとは思うけどとりあえず割愛。

1:PlugInstall

すると

1Error detected while processing /home/admin/.vim/plugged/ultisnips/autoload/UltiSnips.vim:
2
3line    7:
4E319: Sorry, the command is not available in this version: py3 import vim

こんなのの連打になるかもしれません。なるほど、こういう所の依存までは追えないようなので

1$ sudo apt install vim-nox

しときましょう。

実行テスト

ultisnipsの動画にあるようなのをやってみましょう

test.py

1#!<tab>
2class<tab>

すると、こんな感じに展開されます。

1#!/usr/bin/env python
2class MyClass(object):
3
4    """Docstring for MyClass. """
5
6    def __init__(self):
7        """TODO: to be defined. """

自作のsnippetが作れれば何でもいい

とりあえずhugoのshortcode展開したいだけ

1{{< tweet 877500564405444608 >}}

(うまくショートコードをクオートする方法がわからんので全角で書いているが本格は<は半角)

こんな奴。やってみよう。実はすげー簡単だ。

markdownに追加する事になるのでなんかmdを開く

1$ moge.md

ここで

1:UltiSnipsEdit 

する。何とこれだけ

たとえばこんなん書く

1priority -1
2snippet exam
3This is an example!
4endsnippet

これで保存して

1exam<tab>

するとThis is an example!になるってわけだね。

なお、作成された自作snippetは以下にある

.vim/UltiSnips/markdown.snippets

ここで

.vim/plugged/vim-snippets/UltiSnips/markdown.snippets

なんかを参考にしたらいいと思うけど

1priority -1
2
3snippet tweet "Hugo Inline Tweet"
4{{< tweet ${0:${VISUAL:TweetID}}>}}
5endsnippet

(やっぱりうまくショートコードをクオートする方法がわからんので全角で書いているが本格は<は半角)

こんなのでいいと思います。ただ、tweetはちょっと乱暴だからhugotweetとかにした方がいいかもしれない。

ただまあ、こんな感じで自作のアレを増やしておけば非常に便利いいし、それに関してはまたgitかなんかに置いておけばさらにいいよねって話になりますよね。

どんなsnippetがあるとかみれないの?

fzf.vimというのを入れないとデフォでは見れんのかしら?

いれてみよう。

 1call plug#begin()
 2
 3Plug 'SirVer/ultisnips'
 4
 5" Snippets are separated from the engine. Add this if you want them:
 6Plug 'honza/vim-snippets'
 7
 8Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
 9Plug 'junegunn/fzf.vim'
10call plug#end()

適当なmarkdownファイルで

1:Snippets

とかやると絞りこみ検索してくれる

ただ、絞るだけなので全部みたいという場合は自作関数を置くとか(オフィシャルにexampleありますが…)、自動補完するとか

自動補完という沼

以下はうまくいったけど全然試してないので一応雑記として置いておく

補完は https://github.com/ycm-core/YouCompleteMe を使うようだけど、debian busterだとバージョンが惜しい感じで足りなく入りません(backportsなし)。どこかに置いてあったりしないかなー

今回は適当な環境なんでbullseyeにアップデートしてみました。

ycm-core/YouCompleteMe

1$ sudo apt install build-essential cmake python3-dev golang
2admin@ip-172-31-32-192:~/.vim/plugged/YouCompleteMe$ python3 install.py --all

さらにnpm、openjde-jreとかも必要。とにかくinstall.pyが通ればなんか動く。 tabで展開できなくなるので .vimrc を考える事。

もうちょっとまともにこの辺書きます。いずれにせよ、debianのtesting以上が必要でしょう