VimConf 2014 を開催しました

去る 2014年11月8日、VimConf 2014 を開催しました。
私は、主催、というわけでもないのだけど、本会開催スタッフの中心人物的な感じで関わらせていただきました。
VimConf は本当に多くの人の協力で成り立っています。私は今回、あちこちの人に色々お願いして回るのがメインで、みなさんの協力があって初めて開催することができました。
ボランティアスタッフとして手を挙げ、手伝ってくれた皆さん、発表者の皆さん、そして参加してくれた皆さん。本当にありがとうございました!




とまあ、固い話はこれくらいにして、以下、いつも通り雑に感想書いていくよ!

Identity of the Vim - @

資料: http://koron.github.io/vimconf-2014-koron/
Vim を使うなら色々やろう!と言う話。さすが kaoriya さん、いい話すぎて、最初から感極まりまくりました。
確かに、私もあちこち手を出す習性がある。しかし最近新しいことに手を出せてなくて、いかんなーと思っていたところ。なんとかしたいー。

PM2 - @

資料: https://docs.google.com/presentation/d/1u5A7F3Kd4XwJlIUQZAVmrwWfLcoLf9NURtqAEafi_oo/edit#slide=id.p
vital.vim の ProcessManager version 2 の紹介。
PM2 の正式名、懇親会で決めようと言ってた気がするけど結局決まってない気がする。
あと合法電子ドラッグの Civ5 の紹介もあった。開発が滞っているのはこいつのせいらしい。

f - @

資料: https://speakerdeck.com/rhysd/vimconf-2014-f
f を拡張するプラグインの数々をどどんと紹介。
オチが秀逸だった。便利すぎる。

Hey, Java! Vim is coming. - @

資料: https://docs.google.com/presentation/d/1zaPy82NJ6A3Iw1llKqU-lX88AJNt1EKy5O15nOp085c/edit#slide=id.p
VimJava を書くよって話。
幸いにも最近 Java を書く機会はないのだけど、必要になったら色々参考にさせて頂きたい…!

auto closing parenthesis - @

資料: http://www.slideshare.net/cohama/auto-closing-parenthesis-vim-conf2014-41290298
dot repeatable な便利自動閉括弧入力について。
lexima.vim、便利で私も最近使い始めました。閉括弧は私はやってないのだけど、endwise 的な設定がとても便利。
undo の問題も解決するといいなぁ。さっきコード読んでみたけど難しかったのでまた今度見てみる。

怖くないマクロ入門 - @

資料: http://www.slideshare.net/deris0126/vimconf4
初心者向けのマクロ入門。
実演が欲しかった感がある。けどまあ時間的に厳しかったのかな。
マクロはコツを掴むと割と適用できるタイミングあるので、覚えると便利。

Test for Vim script - @

資料: https://gist.github.com/thinca/2cf4ae0df88a99423c9d
私の発表。準備が遅れた結果、事前に全く練習ができず、時間配分とかすごい適当になってしまったけど、適当なりになんとかなった感じはある。…良くはない。
元々、デモで紹介したい themis.vim の機能はいくらでもあったので、残り時間見つつデモで調整する予定だったのだけど、あんまり見せられなかったです。.vimspec はできれば見せたかった。

Let's talk about neovim - @

資料: http://www.slideshare.net/Shougo/lets-talk-about-neovim
neovim に関する topic や、OSS の fork についての話。
neovim は私はほとんど情報を追っていなかったので、ハイライトを知るいい機会でした。
neovim 一度くらいは触ってみた方がいいのかなぁと思いつつ、面倒で触る気が起きない…うう…。

かなりすごい発表(かなり) - @

資料: http://www.slideshare.net/supermomonga/super-cool-presentation-at-vimconf2014
かなりすごかった。(かなり)
ThingsPast.vim かなり前から知ってはいるのだけど、未だに試せていないので今度試す。

XVim with MacVim and smartgrep - @

資料: http://www.slideshare.net/pebble8888/using-xvim-with-macvim
XVim も MacVim も使いたいので、両者を行き来する方法について。
Mac 使ってない勢なので、ふふーん、なるほどね。という感じで聞いてました。
と、チラっと smartgrep の紹介。コメント部分を除外してくれる grep らしい。

/-improved - @

資料: https://docs.google.com/presentation/d/1ie2VCSt9onXmoY3v_zxJdMjYJSbAelVR-QExdUQK-Tw/pub?start=false&loop=false&delayms=3000&slide=id.g4e7add63c_05
検索を高度に使いこなすワザ。私も活用できていないので、もっと活用していきたい…!
上級の光の Vimmer の動きを見ると、ナチュラルにカーソル移動に検索を使っていて、私もやっていきたい気持ちがある。
gn は便利すぎるのでみんな使っていきましょう。

vim script初心者に使ってもらいたい、転ばぬ先の杖「Vint」 - @

資料: https://speakerdeck.com/orgachem/zhuan-banuxian-falsezhang-vint
Vint、発表を見て早速入れてみました。速いらしいし、設定も柔軟らしいし、とても便利そう。
…なのだけど、私の環境で vimrc をチェックしたら Vint 自体がエラーで死んでしまった。後で報告して修正に協力したい所存です。

Jenkins + vimenv で 最新のVimを使おう! - @

資料: http://www.slideshare.net/raa0121/jenkinsvimenv-vim-vimconf2014
常に最新の Vim が使えて、過去の Vim もいつでも使える環境を整える話。
シェルのコマンドを使って欲しい情報(今回の場合はVimのバージョン)をどうやって取得するかと言うあたりがメインだった。
ちなみに、ビルド済みの Vim を全部取っておくとかなり容量を食うらしいので注意。

懇親会

大量のピザと寿司で懇親会。寿司は大変に良さがあった。
なるべく色んな人とお話しようと、それなりに回ってみたつもりではあったけど、やっぱりそんなに多くの人とはお話できず…。
最後の方で、Vim script テクニックバイブルの来場者プレゼントをしました。Vim のバッファに名前を書いていってもらい、vital.vim の Random モジュールで3名の当選者を一気に出すという方式。結果、@ さんと、@ さんと、@ さんに当たりました。あと一人はどなただったか失念…k_takata さんに教えてもらいました!*1。おめでとうございます!



まとめ: 感極まった。

*1:当選者メモっておくべきだった。失敗した…

Nagoya.vim #2 に行ってきた

9/20(土) に名古屋で開催された、Nagoya.vim #2 に行ってきた!初名古屋!
お昼前頃に現地に到着し、@ さん、@ さん、@ さんと合流してランチへ。みんなが味噌カツを食べる中私は特選名古屋コーチン親子丼を食べ、満足したところで Nagoya.vim 会場へ移動した。

本会

会場は和室でした!和むー。
全員が自己紹介と本日やることを発表し終えたところで、みんな作業開始。したかったのだけど、私は事前に頼まれていたライブコーディング的なことをしました。
いくつかネタのストックがあったので、その中から、バッファ内に行末スペースとかそういうアレがあった場合に statusline に警告表示を出せるようなプラグイン、を gdgd と作りました。
今回、作るものは本当に↑に書いた程度のことしか決まっていなくて、ユーザーからの設定方法とか内部的にどういう感じにしようとかそういうのが全く決まっておらず、手が止まっている時間がかなり長めになってしまって、参加者の中でも自分の作業の手を止めて私の作業を見ていた人にはすごい申し分けありませんでした。
今回学んだのは、作るものじゃなくてどういう設計にしようかもある程度は考えておかないと駄目だなってことだった。事前に作るのは反則としても、設計くらいは考えておかないとなぁ。
作ったものに関しては所々手直しして後日公開しようと思ってます。面倒になって忘れ去られる可能性もあります。
ライブコーディング以外では、相変わらず themis.vim の時期バージョンの作業をしてた。まだそれなりにかかりそう…ぐぬぬ

懇親会

本会が早めの時間に終わったので、早めの時間からやってる飲み屋さんで懇親会しました。
色んな話をしたけど、全体的に大体 @ さんと rogue.vim の話をしていた気がする。rogue.vim 以外の話があまり記憶にない。ヤバい…。
あとは名古屋で行くと良いスポットなどを教えてもらったりなどしました。

2日目

2日目って書いたけど、Nagoya.vim は全く関係なく、私と @ さんと @ さんと @ さんの 4 人で名古屋を観光した話なので、完全におまけです。ちなみに夜はホテルに泊まって3時頃までスマブラしてました。観光する気あるのか。
朝食は、懇親会で教えてもらった小倉トーストを食しました。完全にうまかった。トーストに載せる意味があったのかはわからなかったけどアンコうまい。
その後名古屋城まで散歩も兼ねて徒歩でテクテクと行き、名古屋城をグルッと見学しました。途中犬さんなどがベンチで休憩がてら進捗を出したりしていたので、Nagoya.vim っぽいなーとか勝手なこと思ってた。
続いて、同じく懇親会で教えてもらった、喫茶マウンテンへ。

これは普通においしかった!量がちょっと多かったけど。
最後に名古屋駅に戻って、ひつまぶし食べました。完全にうまかった。欲を言えば空腹の状態で食べたかった。マウンテンめっ…。
そんなこんなで名古屋を満喫しました。基本的にどこ行っても食べ歩きしかしてない。




今後 Nagoya.vim は精力的に開催されるとの噂があるので、今後の動きに注目したいです。毎回は無理だけど、機会があったらまた参加したいですね。

momonga.vim #6.2 に行ってきた

去る週末の土曜日に、momonga.vim #6.2 に行ってもくもくするなどしました。
ポポラマーマでランチにパスタを食べ、夜は寿司でも食べようかと思ったけど人数的に入れなかったので適当にラーメンを食べ、半徹夜明けの日曜はバーガーキングで遅めの朝食を食べて解散するなどしました。
おいしかった。おしまい。




と言うわけにも行かないので進捗の話をします。
私は themis.vim のバージョン 1.2 の作業をしていて、リリース候補版のブランチを push することに成功しました。

https://github.com/thinca/vim-themis/tree/v1.2dev

様子を見つつ遅くても今週中にはマージしようかと考えてます。様子見ると言ってもこれ試して不具合や要望をしてくるような人がいるかどうかかなり怪しいので、まあそのままマージされる可能性が高いです。
できればもうちょっと本体のテストを追加してからマージしたい気持ちはあるけど、面倒になったらやらない可能性もある。しかしできれば増やしたい。つらい板挟み。
ちなみに 1.2 の目玉機能としては、.themisrc ってファイルで色々事前処理ができるようになりました。詳しくは help を。

そんなこんなで、themis.vim はこれの次の 1.3 でようやく個人的に使えると思えるレベルに達する予定です。ここまで行ったら vital.vim で使うよう提案してみる予定。はやく 1.3 まで漕ぎつけたい。
と言うわけで momonga.vim は結構作業捗るのでとても良い感じがあります。次回いつかなー。

winenv.vim 作った

momonga.vim #2.2 で作っていたアレです。
あのあとすぐ、細かいバグを取ったりして本体の実装は完了したのだけど、その後ドキュメントを書くところで面倒になって長らく放置…。
しかし本日、yuk(balloon-stat)さんが、unite-winpath なるものを作ったと言う報告をされて、これはやばいと思って重い腰を上げてさっきドキュメントを書き上げてリリースしました。やはり後回しにするもんじゃないですね…。

https://github.com/thinca/vim-winenv

何をするプラグインなの?

Windows を使っている人ならわかると思うんですが、Windows でグローバルな環境変数とかを設定するの、すごく面倒ですよね。Vim から編集できたら便利そうです。これはそのために便利するプラグインです。
勘のいい人は気付いたかもしれないですが、これはレジストリを操作する系のプラグインです。バグっていた場合非常に危険なアレです。使用は自己責任でお願いします!

簡単な使い方

:WinEnv コマンドを使うと、バッファが開きます。以下のような感じ。

:WinEnv
        {place} の一覧を開きます。Windows の環境変数にはシステム環境変数とか
        ユーザー環境変数とかがあって、それらのこと。<CR> するとそれぞれの環境変
        数の一覧が見れる。
        ちなみに VOLATILE と言うのがあるけど、これは現在のログインセッションの
        間のみ有効な環境変数らしい。私も今回これ作るまで知らなかった。こんなん
        あるのねー。

:WinEnv {place}/
        {place} にある環境変数の一覧が見れる。<CR> すると編集できる。

:WinEnv {name}
:WinEnv {place}/{name}
        環境変数を編集するバッファを開く。{place} を省略すると、
        g:winenv#default_place が使われる。これのデフォルトは SYSTEM。
        編集したら保存すると環境変数の変更が適用されます。

環境変数 PATH と PATHEXT は特別扱いされていて、; 区切りの各項目が1行ずつになって表示される。
他にもこういう特別扱いすると嬉しい環境変数があるかわからなかったので今のところ固定。要望があれば設定可能にするかもです。

中でやってること

このプラグインには bin/winenv.bat って言う bat ファイルが入っていて、これ単体でもコマンドラインから動くように作ってある。
で、最近の Windows では、SYSTEM の環境変数を操作するためには UAC がどうたらとかあって、権限を昇格させないと操作できない。
ここが非常にネックだったのだけど、この辺り資料や試行錯誤の結果、必要ならダイアログを出して権限を昇格させることに成功。やりました。
なので、SYSTEM の環境変数を変更する際には毎回 UAC のダイアログが出ます。まあでも通常の方法に比べれば全然ラク。

今後

  • unite インターフェースがあると便利そう
  • 環境変数名と一緒に値も同時に出る view があると便利そう

今後とか書いたけどやるかどうかは完全に未定。やる気が出るかと要望があるか次第です。

Vim プラグインを Windows 環境でテストする

最近は専ら Vim script 向けテスティングフレームワーク themis.vim を作っているわけですが、テストを書いたら当然実行しないと意味がないわけです。
しかし手動でテストするのは面倒。そこで CI。設定しておけばリモートのリポジトリに push した時に自動でテストを走らせてくれます。
Linux 環境用の CI サービスはたくさんあるので、Travis CI なり drone.io なり自由に使えば良いと思います。便利。
しかし Vimマルチプラットフォーム。当然 Windows 環境でもテストしたいですよね。と言うわけで Windows 環境で CI できるサービスと、そこで themis.vim を使ってテストを走らせる設定例を紹介します。全部無料でできます。


と言うわけで CI サービス AppVeyor を使います。
Continuous Integration and Deployment service for Windows developers - Appveyor


AppVeyor は .NET 向けの CI サービスです。.NET と言うことは当然 Windows 環境。便利。

まずはアカウント登録。と言っても GitHub や BitBucket などのアカウントを持っていればそちらからログインできる。簡単便利。

次にテストを走らせたいプロジェクトを登録します。

GitHub 連携などが済んでいれば、リポジトリ一覧が出てくるのでそこから選ぶだけです。
登録できたら以下のような感じでテストを設定。

スクリプトは以下のような感じ。PowerShellスクリプトです。流れとしては、themis.vim を取得し、Vim 本体を香り屋さんのところからダウンロードし、テストを走らせます。古い Vim でテストしたかったらダウンロード元の URL をこの辺りから適当に変える感じで。

git clone --quiet https://github.com/thinca/vim-themis.git themis

$zip = $Env:APPVEYOR_BUILD_FOLDER + '\vim.zip'
$vim = $Env:APPVEYOR_BUILD_FOLDER + '\vim'

(New-Object Net.WebClient).DownloadFile('http://files.kaoriya.net/vim/vim74-kaoriya-win64.zip', $zip)

[Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem') > $null
[System.IO.Compression.ZipFile]::ExtractToDirectory($zip, $vim)

$Env:THEMIS_VIM = $vim + '\vim74-kaoriya-win64\vim.exe'

& $Env:THEMIS_VIM --version
.\themis\bin\themis.bat -r

更新: 香り屋さんの指摘でダウンロード元のURLをリダイレクトなしのものに差し替えました

最後に Save を忘れずに。
あとは実行すれば…

こんな感じで結果がでます!

https://ci.appveyor.com/project/thinca/vim-threes/build/3 (スクショだとでかくなるのでリンクで)

pull req に対するテストも走らせてくれます。とても便利。

Vim script 向けのテスティングフレームワークは数多くありますが、私の知る限りでは、コマンドラインから実行できてかつ Windows でも動く汎用のテスティングフレームワークは themis.vim だけだと思います。この辺りの事情も themis.vim を作った理由の一つです。
皆さんも、Windows でテスト、始めてみませんか?

momonga.vim #6.1 に行ってきた

momonga.vim #6.1 に行ってもくもくしてきた。
momonga.vim の小数点回は、少人数によるももんが邸を会場にしたもくもく会。会場キャパの問題があるので、大体いつもほぼ決まったメンバーで行われることが多い。
今回は過去最長、だいたい32時間くらい滞在していた。すごい。

9日の13時前頃にももんが邸着。その後みんなでてんやでランチして、夜までもくもく。夜になったらイトーヨーカ堂地下のフードコートで長崎ちゃんぽん他などをディナーとして食べたあと、戻ってマスクメンなどして遊びつつ再びもくもく。途中vimrc読書会なんかも挟みつつ、夜は寝る人は寝たり寝ない人はがんばったりしつつ、朝になったらバーガーキングでブレクファストを取って、戻ったら更にもくもく。昼になったらゲーム音楽三昧が始まったのでそれを流しつつもくもく。3時頃に途中フードコートにランチのようなおやつのような軽食(?)の休憩を取りに行って、戻ってきたらもくもく。最後は8時過ぎにラーメン屋でディナーをし、解散しました。長かった。ほぼ飯のことしか書いてない。
もくもくと書いたけど、実際にはほぼ常に誰かしゃべっていた感じで、終始賑やかな感じでとてもよかったです。だいたい何かある度に、「わかるー」「あるあるー」「便利ー」とか言ってた気がする。徹夜テンション。

進捗

肝心の進捗としては、私は主に themis.vim の改良作業をしていた。先日 Version 1.1 を master にえいやっとマージしたので、次は 1.2 の作業。細かいオプションの追加とかをしていた。
残作業としては、.themisrc 的なファイルの機能を付けようかなーと思っている。全テストの前に1度だけ読み込まれる Vim script ファイル。helper なんかをここで global に設定しておけば、各テストファイルでいちいち設定する手間が省けるはず。読み込まれるファイルは、テスト実行時にディレクトリを指定した場合とファイル単体を指定した場合で変わって欲しくないので、指定されたファイルorディレクトリの辺りから上階層に見ていって見付けたやつ全部使う、みたいな感じになるのかなぁーと思っている。この方法で問題ないか、まだあまりちゃんと考えてない。何か要望があればすぐになら受け付けられるかも。
その他としては、せっかくテスティングフレームワーク作ってるので、CI 環境を整えるなどしていた。むしろこっちの方が時間取ってた。こちらに関しては後日記事に書こうと思う。
あとは、細々と threes.vim の 1.5 をリリースした。簡易的なレコード機能を付けた。本当はもっとしっかりしたのを付けたかったんだけど、完全に作業中のまま数ヶ月放置してしまっていたので、とりあえず動いているっぽいしやりかけだった部分をちょろっと整えて、ほいっとリリースした。やりかけていた部分、何か懸念があってやりかけていた気がするんだけど、完全に思い出せず、そのままリリースしてしまったので、何か問題があるかもしれない。何かあったら報告してもらえると助かります。threes.vim は将来的にはリプレイ機能とか載せたいとか考えているけど、やってる暇があるかどうか不明。



とまあそんなこんなで、とても濃い2日間でした。疲れたけど楽しかった。実は最初は泊まる予定なかったんだけど、ももんが邸もくもく会では翌日予定がなければ大体泊まるのがパターン化してきたので、次からはちゃんと準備して臨もう、などと誓ったのでした。次は 8/30 に #6.2 があるらしい。

Vim script テクニックバイブルが発売されました

先週の 8/6(水) に、私も執筆に参加した Vim scriptテクニックバイブル 〜Vim使いの魔法の杖(Amazon) が発売されました。中にはもうすでに購入して読んだ、という方もいると思います。ありがとうございます。
読んだ人ならわかるかと思いますが、この本は入門書です。本書内の読者へのコメントにも書きましたが、応用的な内容や、Vim の全ての機能が紹介されているわけではありません。なので、すでに Vimプラグインをバリバリ書いて公開しているような人には、物足りない内容だったと思います。
これは逆に言えば、初心者に向けて丁寧に書かれているということでもあります。Vim をもっと便利に使いたいけど、Vim script とか触ったことないし…というあなたこそ対象読者です。入口のとっかかりとしてはとても良い本になったんじゃないかと思います。
最後にプラグイン作りに関するアドバイスを1つ。本書をただ漠然と読んでも、さて、次はどうしよう? となることでしょう。プラグインを作るということはすなわち、エディタ環境をカイゼンする、ということです。カイゼンするためには、今の環境で困っている、不便な点を見付けるのが重要になります。不便に敏感になりましょう。同じ操作を繰り返していないか。やりづらいことはないか。既存のプラグイン達を見ていると、様々な不便をカイゼンしてくれます。あなたのアイディア次第で、エディタ環境はもっともっと便利になるはずです。カイゼンしたいけど Vim script わからない、そんな時に本書が役に立てば幸いです。

この本に触れた人が、新しい Vim プラグインを作って公開し、Vim がもっと便利になっていくのを楽しみにしています。