16
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VimAdvent Calendar 2018

Day 5

はじめてのゔぃむすくりぷと

Last updated at Posted at 2018-12-04

はじめに

VimConf 2018最高でしたね。
テンションが上がりすぎて、この感動を共有しないわけにはいかないと英語でまとめを書いてしまったので、アドカレのネタがVimConf記事から変更になりました。
Vim歴10ヶ月の若輩者ですが、どうぞよろしくお願いします。

写経

きっかけはVimConf2018のAlisueさんのセッションでした。
Effective Modern Vim scripting

Modernとか、そういう言葉に弱いです。
最高のVim Script Tutorialな気配がしたのとDark Vimmerへの道を踏み出すために写経しました。

以下、写経して思ったこと

  • autoload配下のpathと関数名が対応してる規約面白い
  • source guardやfunction!など何のために必要なのか調査しないと分からないイディオムが多い
  • Vital.vim、めっちゃ便利
  • 公式のplugin manager、欲しすぎる
  • Vim script、思った以上にモダンに書ける
  • Vim script、pythonっぽさを感じる
  • Promise、デバッグが難しい

ゔぃむすくりぷつ

FizzBuzz

定番です。これ以上のネタを思いつかなかった。

function! amake#fizzbuzz() abort
  for i in range(1, 100)
    call s:judge_fizzbuzz(i)
  endfor
endfunction

function! s:judge_fizzbuzz(i) abort
    if a:i % 15 == 0
      echo "FizzBuzz"
    elseif a:i % 3 == 0
      echo "Fizz"
    elseif a:i % 5 == 0
      echo "Buzz"
    else
      echo a:i
    endif
endfunction

Linter

普段はALEに任してしまっています。せっかくの機会なので、Linterをamakeの写経に足していく形で実装しました。
JS限定で:wするたびにエラーをQuickFixに出してくれます。
こちらを参考に実装。

  • autoload/amake.vim
function! amake#eslint()
  let result = split(system('yarn eslint ' . bufname("")), '\n')
  let errors = []
  for r in result
    if r =~ '\<error\>' && r !~ 'Command failed with exit code'
      let info = { 'filename': bufname("") }
      let splited_error_line = split(r, 'error')
      let lnum_col = split(splited_error_line[0], ':')
      let info.lnum = trim(lnum_col[0])
      let info.col = trim(lnum_col[1])
      let info.text = trim(splited_error_line[1])
      call add(errors, info)
    endif
  endfor
  call setqflist(errors, 'r')
  cwindow
  silent! doautocmd QuickFixCmdPost make
endfunction

autocmd! BufWritePost *.js :call amake#eslint()

Peek 2018-12-04 21-15.gif

ErrorだけでWarningが拾えてないとか同期処理なのででかいファイルをlintするとしばらく固まるとかまだまだな部分は多いですが、一応、動くものになりました。

:h <something>が早い上に、分かりやすいというのは衝撃的な事実でした。

普段は、詰まったらGitHubのドキュメント->ダメならissueなりstackoverflowなりを漁るので、公式のヘルプが丁寧かつ分かりやすく書いてあるのは最高かな?と思いました。
やはり、Vimは最高だった。

レポジトリです。
https://github.com/sasurau4/vim-amake

最後に

本当は、BufferとかText Editorっぽいものを盛り込んで自作プラギンを作りたかったんですが、
Vim力と愛が足りませんでした。でも、quickfix使えたので満足しました。
Dark Vimmerになるために精進します。

16
4
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
16
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?