今年も行きました!VimConf! 去年も参加した身ですが、今年はなんと言ってもVimの父であるBramが来るということで、EarlyBirdチケットとって参加してきました!

VimConf2018

のっけから名札の画像に頭を悩ませつつも、来年は予めJPEGで用意するなどの改善をしたいと思いました😇
(多分PNG-8で保存したのがいけないんや…)

↓↓ノベルティの様子

VimConfは1日中やっていたこともあり、かなり内容が膨大なので私は下記の内容で今回は書き残します。

  • Keynote - What is the next feature?
  • Keynote - Vim: From hjkl to a platform for plugins
  • その他個人的に思うハイライト
  • 懇親会

Keynote - What is the next feature?

speaker: Yasuhiro Matsumoto (a.k.a. mattn) Captain of vim-jp

(この発表で個人的に良いと思ったVim-jpに関してをメインにまとめました。)

Mattn history

初めてのpatchは5.6.004で当時すでに、日本語の正規表現部分を作ってる人(KoRoNさん)がすでにいたそうです。
ここの部分で日本語の後読みは後ろから探さないから少し遅いなんてことをおっしゃってました。なるほど🤔
ちなみにVimのドキュメントに後読み先読みのパフォーマンスへの言及が多くてとても参考になりますm(_ _)m。
(https://vim-jp.org/vimdoc-ja/pattern.html)

Vim-jpの目的

  • 知識の共有
  • コミュニティのイベントをココから始めたらいい

というのをやりたかった。

vim-jpでやってること

  • 英語の壁のサポート

    • マルチバイトとかなかなか気づいてもらえない
    • バグ報告をVim-jpに日本語でしていただければ
    • patch代わりに書いたりしますし、そのままあなたが書いても良い
    • code review
      • patchの内容でなにを直したいのかをVim-jpで吸い上げてレビュー
      • vim本体にintroduceしている
  • ドキュメントの翻訳

    • 個人で勝手に書いてもいいけど、間違ったまま広まることも有る
    • Vim-jpが正しく翻訳して品質を保証する
  • 機能の追加

    • 追加してきたもの
      • lambda
      • job/channel (NeoVimからの逆輸入)
      • DirectX rendering
        • patchがマージされるまで時間がかかると思ってたら3時間でマージされた
      • incsearch
      • :terminal

誰がVimの次の機能を作るのか

Vim-jpは開発者集団だけど、Vim-jpが作っているわけではない。
(patch投げるときにサポートなどもしてるのでVim-jp以外の日本人も作っているという意味)
そういう意味で、次にどんな機能が入るかはVim-jpではなんとも言えない。
ただし、開発者集団なので、Vim-jpのメンバーも作ってpatch投げるよ!

Suggestion (パッチ書いたよ、採用されるかはわからないけどね)

というわけで、mattnからの機能の提案

  • DRCS Sixel on :terminal
  • ch_listen()
  • BLOB type

Keynote - Vim: From hjkl to a platform for plugins

speaker: Bram

この発表ではVimの歴史を最近Bramが思っているプラットフォームとしてのVimという側面から振り返ってみる内容になっていました。

最近出版された本

  • 最初は(昔)はVimの使い方だった
  • 最近、どうやってプラグインを入れるかなどの本が出た
  • プラットフォームとしてのVimの側面

最初のViの機能

できたこと

  • .exrcファイル
  • Undo 一回分
  • .swp メモリが少なかったので必要だった
  • recursive map マッピング
  • Jump around with mark

Viで要求されなかったので、できないことは沢山あった。(たくさんのメモリを要求するので求められなかった)

Vim History

Autocommands

Added in Vim 4.0
ユーザーの任意の処理を狙ったタイミングで実行可能にするHooksの提供
例) :au BufRead

Autocommand(BufRead、BufWrite)がbufferに対して何でもできる問題が発生 - 解決できる方法の模索 - BufWrite時にbufferの中身を消すなどはできないようになど

Vim script

Vim 5.0から
Vim scriptはsyntax highlightなどでまず使われた。
と同時に.vimrcをコピーしなければいけない問題が発生。

plugin

Vim 6.0
正しいディレクトリにpluginを置けば動くように。
‘runtimepath’ optionの提供。

いくつかの機能がプラグインで提供されている。

Data types added

Pythonから影響を受けている

  • Number
  • Float
  • String
  • List
  • Dict
  • Funcref, pertial
  • special
  • job
  • channel

(BLOBはいつ来るかわからないけどその正当性を考えてみたいとのこと)

plugin performance

profile: performance を 測りたいときにおすすめ

あと、vim --startuptime

プラグイン高速化

なんだけれども、では実際に改善をする場合には?という内容が続く

Autoload

などをまずは使って適宜ロードするようにするとLoading timeは改善される。

Vimの改善による高速化案

1. Improve parsing speed

  • Multi-threadingで動かす
    • 別のthreadで動かせばメインのスレッドには影響がない

別のネームスペースで動かして他のスレッドに影響しないようにしなければならない
→ いつの日かできるといいね

2. Vim script以外の別の言語が使える

  • Python
  • Perl
  • Ruby, Tcl, Scheme
  • Lua

Vim script コンパイル案が WIPらしい

Plugin management

plugin dependencies
plugin は パーツとしてライブラリのように扱われることもあるので
それらを依存管理させたい?

実施案

dependencies.vim ファイルに依存を宣言させる
例)

let g:mypluginvimproc = PluginDepend('github', 'Shougo/viproc.vim')

自分のプラグインでは

call PluginLoad("~~~")

例えばV2やV3などの別名をつけることで、共通でなるべく使うようにしたい。

欲しい機能について投票を開催してみた

  • 193票: popup window to show hints/message and pick an item
  • 179票: Store propertise with text, used for highlighting et al.
  • 96票: vim script 高速化

text properties

どういうアプローチか→

function    foobar (hogeohge)
└statement  └name   └some properties

というようにプロパティをつけていく。ハイライトなどに適応できる(非同期でできたらいい)

やるにはかなりの機能が必要
Vimはlineを扱っていたけど、fileとして扱わなければいけない
(fileはGBのものもある)

このメッセージをこのポジションで見せたい
text propertiesと似たようなアプローチでできそう

質問

  • 投票の中で大好きな機能は

    • text properties
  • LSPについてどう思う

    • Bram: ごめん聞いたことがない
    • LSPはプラグインでサポートすべきなのか、本体でサポートすべきなのか教えてくれ!

Bramの発表について個人的なまとめ

今回の発表から、Plugin の PlatformとしてのVimという立場を認識させられました。
つまり、『みんなプラグインを作れ』というメッセージとして受け取って良いのかな?

その他個人的に思うハイライト

今年のPlatinum SponsorのatWareさん

2件 = atWareのguyonさんとdaisuzuさん

ujihisaさんの発表の中の「cの中をseeしたい」の同時通訳。

質問された方の内容もめっちゃ良かった

懇親会

懇親会ではいろいろな方とお話させていただきました。

中でも個人的に記憶に残っているのは…

Bramと写真撮った

写真はここには載せませんが、スゴイいい思い出になりました😆
私は英語がそんなに話せないですが、VimConfにようこそ!!って握手してくれました。

韓国人の方と話した

こちらも韓国人の有名なプログラマーといえば個人的にはFZFの作者のjunegunnさんですなぁというお話をしたのと、チャットアプリは日本で人気なのはLINEだけど韓国はKakaoTalkでしたっけ?みたいな話をしました。(その方はNAVER時代の子会社で働いていた事があるらしい。)
Bramとの写真は流れでこの韓国人の方と撮ったので、LINEで写真送りつけましたww(通常韓国の方はLINEはスマホに入れないけれども、NAVER関係でたまたま入れていたとのことww)

ほかにも

  • いろいろとTwitterでよく見るアイコンの方と少しお話できてよかったです😆
  • (直接はお話できませんでしたが) LTやってらっしゃったのでb4b4r07さんを初めて目撃した
    • (zplugお世話になってます!)

それではまた来年

VimConfは個人的にもVimについて振り返るよいタイミングではありました。
今年自分、Vim活したっけ?あれ、去年のVimConf以降なにもしてない…ヤバイ。
みたいな一つの自分を奮い立たせるための口実にしていたりします。
そんなこんなで作ったのがspelunker.vimです。
https://github.com/kamykn/spelunker.vim

VimConfは自分のモチベーションの源です。
来年もVimConf楽しみにしています😆