LoginSignup
2
2

More than 5 years have passed since last update.

vim-smartinputはスニペットの代わりになるような設定もできなくはないかもしれない

Posted at

制御構文とかの記述に、スニペットを利用している人は多いかと思います。
ただ、スニペットは柔軟な設定がしにくいように思えて(例えばclassの有無だとか)いまいち僕は使いこなせていないです。

もっと定型的なスタイルとか、ライセンスの文面とか、そういったところはスニペットに任せた方が良いですが、細かい構文とかは手で打った方が早いですね。

しかし、決まりきった記述であるならば出来るだけ楽をしたいものです。なので最近はsmartinputの設定をチマチマ強化しています。
smartinputとはinomap [] []<Left>みたいな設定をもっといい感じに出来るようにしやすくしてくれるイカしたプラギンです。入れるだけで基本的な設定が入ってくれるので便利ですが、使用感を大きく変えるので好き嫌いの分かれるプラグインな気がします。

僕はよくPythonを使うので、以下のような設定を入れています。

" classとかの定義時に:までを入れる
call smartinput#define_rule({
\   'at'       : '^\s*\%(\<def\>\|\<if\>\|\<for\>\|\<while\>\|\<class\>\|\<with\>\)\s*\w\+.*\%#',
\   'char'     : '(',
\   'input'    : '():<Left><Left>',
\   'filetype' : ['python'],
\   })
" が、すでに:がある場合は重複させない. (smartinputでは、atの定義が長いほど適用の優先度が高くなる)
call smartinput#define_rule({
\   'at'       : '^\s*\%(\<def\>\|\<if\>\|\<for\>\|\<while\>\|\<class\>\|\<with\>\)\s*\w\+.*\%#.*:',
\   'char'     : '(',
\   'input'    : '()<Left>',
\   'filetype' : ['python'],
\   })
" 末尾:の手前でも、エンターとか:で次の行にカーソルを移動させる
call smartinput#define_rule({
\   'at'       : '^\s*\%(\<def\>\|\<if\>\|\<for\>\|\<while\>\|\<class\>\|\<with\>\)\s*\w\+.*\%#:$',
\   'char'     : ':',
\   'input'    : '<Right><CR>',
\   'filetype' : ['python'],
\   })
call smartinput#define_rule({
\   'at'       : '^\s*\%(\<def\>\|\<if\>\|\<for\>\|\<while\>\|\<class\>\|\<with\>\)\s*\w\+.*\%#:$',
\   'char'     : '<CR>',
\   'input'    : '<Right><CR>',
\   'filetype' : ['python'],
\   })

これで、関数宣言なんかの時の入力がなんかいい感じになってくれる感じです。
すげーちょっとした感じの設定ですけど、こういうの好きです。def hoge():みたいなのは一日に百回以上は書くので、ここを快適にしておくことで将来の腱鞘炎リスクに備える事が出来ますね。

gif

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2