vimのsnippet
今回は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以上が必要でしょう