vimvconf 2017
というわけで、vimconf 2017へ行ってきました。
個人的には、具体的に最新な技術情報を含むと考えるので、Qiitaにてアップします。
とりあえず、楽しかった。
私は関西(兵庫)から参加してきました。初参加。
割と関西に限らず、関東の外からの参加者の方も多くいらっしゃいました。
...Osaka vimな人もいた模様(マリオアイコンな人をはじめ、幾人かお声かけさせて頂きました, 私は単に過去の一参加者です。)
なお、今回から同時通訳がされるようになったそうです(JP->EN, EN->JP)。
より国際的カンファレンスの色を強めたということでしょうか。
さて、前置きはさておき、以下カンファレンスのサマリとなります。
筆者のリアルタイムな議事録が唯一のソースなので、内容には謝りがあるかもしれません。
ご了承ください(sessionのタイトルも、その場でメモしたもので、正確である保証はありません)。
また、メモの仕方の都合上、あまりサマライズできませんでしたが、適宜読み飛ばしながらご覧ください。
key speakers
key speakersは、以下の方々と事前に発表されていました。
そうそうたるメンバ。
- haya14busa
- Fatih
- mattn
- k_takata
AM(午前のsession)
開会
- 開会の挨拶が英語(後の司会は全て英語だった)
- 一般社団法人VimConf準備会が主催
- 注意事項
- トークセッション中は撮影禁止
- 終わったらvimconfのブログかいてね(だから書きました)
haya14busa, -Vim, Me and Community-
- vim incsearch の author
今年の4月からGoogleな人
Vimと自分について
- 2012からプログラミング開始
- 大学のころが始まり
- 最初はブログとかwebとか
- vim tutorからはじめた
- 使い始めた理由
- かっこいい!
- 高速で効率的に編集できる
Vimの活動について
- "EasyMotion"
- plugin -> https://github.com/easymotion/vim-easymotion
- haya14busaさんがforkして拡張した
- パターンにマッチしたキャラクタをラベルに置き換えて、それを頼りにカーソルを移動する
- 最初に開発されてから、元のauthorがあまり更新しなくなったので、forkして、改善や、バグフィックスを行った
- その最中、元のauthorからコラボレータとして開発してくれないかと以来された
- 現在githubで約3.5k star
- プログラム経験1年未満だったので、色々わからなかったが、小さなものから積み上げていった
- マルチバイトに対して、ローマ字でマッチするような機能が入ったりした(別のpluginの機能を参考に)
- 競合/参考plugin
- vim-sneaks, clever-f, incsearch.vim, vital-over, vim-over, vim-smalls
- ver3で革命的な出来事が(Jump to other windowをサポートするあたり)
- 今までは、バッファの文字列を書き換えていた
- ので、コンフリクトによって実現できなかった
- 擬似的にバッファを書き換える機能がvimに入って、それを利用した
- その中で、vimのバグを発見して、vimにpatchを送った(Ozaki kiichi氏の協力を得て)
- "incsearch.vim"
- plugin -> https://github.com/haya14busa/incsearch.vim
- インクリメンタルサーチ
- 検索中にカーソルを移動する
- いっぱい"n"を押してnextするのはめんどくさいので、次のスクロール箇所へジャンプする機能
- うまく他のpluginのソースコードを参考に実装をしている
- ジャンプ先のカーソル位置をオフセットする機能を入れた(/+3, みたいな入力)
- ユーザが拡張できるようなAPIを提供した
- "PowerAssert"
- jsであったライブラリを、vim-scriptで再現した
- vim-scriptでvim-scriptをparseするものがあったので利用した
- "vim-operation***"
- 一瞬ハイライトする(詳しくは聞き逃し)
- "Re-vital.vim"
- ロードが遅いものを速くした
- ロードするコードを書き換えた
- この開発に関連して、ステータスラインが消えてしまうバグを発見した
- ステータスラインを再表示する際のエラーにより、ステータスラインが消えてしまう
- "go-vimlparser"
- golang program
- vim-vimだと遅すぎるので、golangで再実装した
- オリジナルのauthorはpython, jsでparserを作っていたりした
- vim-vimだと50sec -> go-vimでは0.3secになった
- "reviewdog"
- golintは直さなくてよいものまでこかす -> CIとかでかけると大変
- 新しく出てきたwarningだけを表示する
- goとvimの合いの子という感じ
- vim8.0でlambdaが入った
- "incsearch -> for Vim!!"
- ついにVim本体に入った!(Patch 8.0.1238)
- これをきっかけに、CmdlineEnter/CmdlineLeaveというイベントが入った(autocmdでたたけるやつ)
- Vimのコミュニティの良さ
- ダイバーシティがある
- スパルタンなVimmerや、DarkPoweredな人がいたり.....ということ
- いろんな言語、いろんな開発をやっている人がいる
- "Vimはペイするエディタ!!(Googleに入れたよ)"
Fatih Arslan -The Past and Future of Vim-go-
- DigitalOceanという会社の人
- クラウドプロバイダ
- from turkey(トルコ)
- 思ったより若そうな方でした(でも子持ち)
Go本体のコントリビュータでもある(color, structs)
"まずGoの話 vim-goの歴史"
- vim-goの最初のcommitは、googleの人が2009年にしたもの
- 最初はハイライトなど表示がちょっとサポートされただけ
- 2011に Import ImportAs Dropが追加された(初めてのコマンドたち)
- そのあとすぐにGoFmtが入った
- GoのオフィシャルのFmtを使う -> Goが成功した一つの要因
- 2013 make が入った
- 2014にGoのオフィシャルからはずされた、(Goに含まれるべきではないので)
- misc/vimの最後のcommitでGo file detectなどが入った
- "ここからvim pluginへ"
- なぜvim-goが残ったか
- 当時はたくさんのpluginが乱立していた
- クリアなロードマップがなかった(なにをしていくべきか、などの情報がなかった)
- Go本体に含まれたいたvim-goもドキュメントない、ハードコードされまくり、など、完成度が高くなかった
- 完成への計画を開始した
- Go本体のものをベースとして、すべてのpluginを統合して、、と計画を立てた
- mattnからすぐissueがきた
- 2014 最初のcommit(最初はgolang.vimという名前だった)
- 次にgo.vimになったが、vim-go.vimとなった
- ドキュメントがないのが問題だった
- とりあえずvim-go.txtを追加した
- でも気に入ってない(vim helpのsyntaxがキモいため)
- markdownサポートして!
- ユーザビリティの改善
- GoInstallBinaries
- 内側
- バイナリを作るに関して、使う側がmakeするべきではない
- GoCoverrageのdemo
- いいよね~GoCoverage(個人の感想)
- 2015!
- v1.0をリリース(既に1000commit以上!)
- windowsサポートなども入った
- versioningのコンセプトを追加
- ライセンスを追加
- BSD 3-Clause license
- linux distributionへ入れたかったので
- GOPATHの自動検出も入った
- GoMetaLinter, GoTestCompile, GoTestFuncなども入った
- 2016
- NeoVim入った年だよね
- Asyncが入った
- Gobuildで試してみたりした
- Donation を Kindle -> Ptreonへ
- 毎月vim-goで200ドル以上
- Donationは躊躇するべきではない
- 自分の自由な時間を使って価値を作り出しているのだから
- Vim8.0 がでた
- こちらもAsyncに対応
- しかしそのバグに苦しまされた
- よって、パッチが当たってるかを確認するようにした(vim-go内で)
- vim-goはtoolによってパワフルに支えられる
- vim-scriptで書いていたものを、Goで書き直した
- 適宜JSONやvim-scriptを返した
- vim-scriptのsystem()はシェルによって挙動がことなるので、うまくラップして使っている
- GoのソースをparseするものがGoにあるのでありがたい(ASTを返してくれる)
- GoAddTags json が gomodifytagsでjsonをstructから返してくれる
- Demo Time for GoAddTags?
- 関数の内側をオブジェクトとして選択する(コメントもふくまれるのがええ感じやろ 関数のコメントもその一部だから)
- ASTベースだと色々な利点がある
- これをvim-scriptでやると大変すぎる
- ただ、ツールを使う場合は、OS間の互換性を考慮しなければならないのがデメリット
- パスセパレータの問題がある
- isMac, isWinなどで吸収
- 競合がでてきた
- 新しいロゴを作った
- チュートリアルを作った
- とりあえずやってみて、という提案
- これをきかっけにVimを使い始めた、という人もいた
- syntax baseなfoldingをサポート
- 2017
- Travis CIをサポートした
- vimhelplint
- vim-goはGoogle Source Awardをget!
- most used editor for Go!!
- 今はいろんなコントリビュータがいる
- 現在は7000start
- Future
- debug
- 問題はdebug APIがない
- mattnが動きはじめた
- debugはmattnに言って
- 悪かったとこ
- README.mdとhelpが一致していないところがあった
- Vim - NeoVim間の違いがあって問題がでてくる
- better UI is needed for better UX
- よかったこと
- Go toolがよかったのではかどった
- userの声を聞いている
lunch time
- 人形町のすき焼き弁当
- 豪華(容器が木製の桶)
- 関西人でも好きな味
白い恋人 from Hokkaido ?
Fatih x mattnが初の対面を果たす歴史的瞬間が...
mattn x Koron x k_takata は壇上で昼食+質問タイム
Osaka.vimへmattnさんを誘う(マリオアイコンの人)
- mattnさんは家庭があるのでお忙しい模様
- というわけで、mattnさんにきてもらえるように、次回のOsaka vimは平日開催を計画している模様(LT中心で)
pm
mattn, Koron, k_takata トークセッション (Round Table Discussion)
vim-jpな人たちはneovimはあまり知らない模様
speaker
- k_takata
- rubyの正規表現エンジンのメンテナ
- vimに300commit
vim-8
- terminal normal modeが入ってるけど賛否両論(m)
- neovimの方がその点は評判がよい(m)
vimを使い始めたきっかけ
- mattn
- vim2.0から
- J-Vimとかあった
- その頃は1ユーザ
- J-vimの内容がオフィシャルに入らないので、Koronとpatchを送りまくった
- 開発に携わるきっかけは、Windowsで使いやすくしたかった(IME関連)
- takata
- vim5.0から
- それ以降はあんまし使ってなくて、6年前からまた使い初めた
- Gitのコミットメッセージでvimが起動するので、がきっかけ
- 2012頃から使い始めて、その後すぐくらいにVim-jpができた
- Koron
- 卒論を書くときに使い始めた
- 正規表現エンジンを日本語に対応さえるのに熱中していた
最近追加された機能について
- lambda
- vim-scriptのsort, map, filterなりでめんどくさいが、でてきたので(m)
- 自分でやり始めたけど、takataさんへ投げた(m)
- terminal
- vimのdesign notにあったけど、bramが「便利だね」と言い出した(m)
- terminalがちゃんと動いたのは、windowsの方が先(m)
- windowsだと、terminalは本当に便利
- windowsのプロンプトは、複雑なことをしていて、ひどい目に会うことがある(k)
- setbufline
- vim scriptの関数
- appendbuflineはない
- incsearch
- 急遽入れた(k)
- 自分としては、commandlineenter/leaveはオプションを足した方が良いと思っている(m)
- bramには却下された(t)
- 数年後に突然入るかも(k)
- 古いpatchを掘り起こすのがtakataさんはうまいよね(k)
印象深いpatchランキング
- "takata"
- windows consoeが壊れる問題を直したやつ(t)
- マルチバイト文字が入ると壊れる問題(t)
- 元々Win32APIがいけてない(m)
- patch送ってもTODOリストに入って数ヶ月放置(t)
- vim上でvimを動かすとおかしくなる、というissueでようやく入った(m)
- makeencoding
- windowsのCコンパイラはSJISとかが帰ってきて化けるときが多々ある(t)
- pythonx command
- pythonxで2.0,3.0系を吸収した
- "mattn"
- Syntax Timeout
- reload time
- ハイライトサーチやマッチの話
- ここ数ヶ月syntaxが消える、という話があった
- みんなを巻き込んで直した
- Improve Channels Speed on Windows
- チャネル、Jobが入ったあと、Windowsでの表示がガクガクしておかしかった
- 直したらめちゃくちゃスムーズに動くようになった
- Fix treat of Input Method on UNIX
- Koronの日本語化対応が現況?(k, ご本人曰く)
最近きになるplugin
- takataさんのminpack?が気になっている(k)
- vim8から使えるようになったpack機能を使っている(t)
- 自分自身はあまりpluginはつかわない(t)
- language serverがきになる(m)
- language server とは、typescript x vs codeとかが最初の、IDE作るためのプロトコル(k)
vim-jpについて
- 勢いで作った(k)
- patchを書いていた人を巻き込んだ(m)
- ちゃんとしたpatchをvim/vimに出すために、vim-jpの中で議論する(m)
- vim-jpがなかったら、patchを出してなかったと思う(t)
- 日本側でレビューしてもらえるのはありがたい(k)
- 英語は完璧ではないが、勢いが自分はあるともう(m)
- ぜひvim-jpへpatchをどんどん送ってチャレンジして欲しい(k)
- 最初は本体じゃなくて、ドキュメント、テストの修正もいいとおもう(k)
- takataさんはvim/vimのメンバとなった(k)
- issueを閉じる権限、ラベルを貼る権限がある(t)
- bramがgithubにまだ慣れてないので、大変なこともある(m)
- vim/vimのcreditに日本人が追加された
- わいわいがやがややっているので、どんどん来て欲しい(m)
- issue書いたら、vim-jpのメンバになる(k)
Goってどうよ?(唐突)
- vim x Goな人は多い(m)
vim-devじゃなくて、vim-jpでやる理由
- 日本語じゃなくて、英語で喋ると間違う(m)
- 昔勘違いしてあやまったりした(m)
- bramは「共通言語のC言語あるやん」とかいってた(m)
- 日本人同士日本語で議論してから英語で出すべきと思う(m)
- vim-jpは他の技術communityよりユルい(m)
- issueにラーメン画像が貼り付けられたり(m)
- よくこのpatchが入ったらこっちも入れるべきだろ、とか作戦を色々考える(m)
初心者でも使えるお気に入りの技
- 連番を作る方法をtwitterにあげる(m)
- vimしらない人はおおお、となる(m)
- スペルチェックはもっと使うべき(t)
- ネイティブですら使うので(t)
- 元々は日本語混合だと真っ赤だったのを直した(t)
書いたけどダメだったpatch
- 自分はあんまりない(t)
- 粘り強く入れるようにしていくので(t)
- 自分はたくさんある(m)
- socketのpatchは最初はNGとなった(m)
Vim活してて嬉しかったこと
- Vimを使い続けるだろう VScodeはVimの開発の参考にするために触っている(m)
- VScodeが一番進化が早いので(m)
- patchがとりこまれるのは嬉しい(t)
妄想している将来的な機能
- lsp(language server protocol)とかはやるべきと思っている(k)
- syntaxを書く木にならないので、改善した方がいいと思っている(k)
- direct Xにちゃんと対応できるようにしたい(t)
- カラーでビールの絵文字だしたいよね(m)
- 結構難しい(m)
他のエディタの機能でVimに欲しいもの
- 他のエディタあんまつかってない(t, k)
- VScodeにあるのは入れたいかなあ(m)
- 設定のリアルタイム反映とか(m)
cocopon -Creating Your Lovely Color Scheme-
cocopon
- 半分エンジニア/半分デザイナ
- vim pluginも作っている
- color scheme大好き
jellybeans, hybridを使ってたけど、最終的には自分で作った
- それがIceberg
- 8時間はColor Schemeを見ている時間
color schemeとは?
- syntax
- syntax groupを作る
- syntax fileで定義される
- highlighting
- syntaxに基づき、キャラクタの色を設定する
- :hi でその情報を確認できる
どうやって作る?
- ":hi! Normal guibg=#161821 guifg=#345408"みたいな文法
- case iceberg
- コンセプトを作る
- 暗くて、青い感じ -> 氷山をイメージ -> iceberg
- 先にコンセプトを作ると、それを元に考えていける
- ハイライト範囲はNormal + EndOfBufferに分かれている
- 代表的な色を決めよう
- "hi link"で、グループのリンク構造を作っていく
- 色を選ぶ際は、RGBではなくHSBなり直感的なカラーモデルがおすすめ
- なぜカラーパレットを先に作る?
- -> 色数が爆発するのを防ぐため
よりいい感じのcolor schemeを作るには?
- positive featureを増やす
- ファイルタイプごとの色を調整しよう
- pgmnt.vim, colorswatch.vimがサポートしてくれる
- カーソル位置のリンク情報を表示してくれる
- negative featureを減らす
- 256色環境に対応しよう
- 警告色を考える
- 一般的には赤がエラー色
- 色覚を考える
- すべての人が同じように見えているとは限らない
偉大な先人をどこから探すか
- vimcolors.com というものがある
- でも、マニアとしては満足いかない
- 数を眺めるのではなく、自分に最適なものを探したい
- 作った(colorswatch.ch)
- githubのスター数でソートできたりする
- color schemeの機嫌を辿れる
- モバイル対応済み
conclusion(まとめ)
- define concept
- remember concept
- learn by 先人
- ぜひ、作ってみよう!
t9md -the most ambisious vim emluator-
vim -> emacs -> vim -> atomな人
vim-mode-plus
- ATOM向けのvim emulator plugin
understand editing in Vim
- j が move downとなるのは?
- jがkeystrokeとして入力されたら、MoveDownクラスにディスパッチする
- operation stackというデータモデルで実装している
- jだと、すぐに実行する, diwみたいなコマンドだと、stackをみて実行可能になるまで待つ
- motion, textobject, operatorという3つに分けて考えている
- Mutation = Operator + Target(Motion or Textobject)
demoするよ(時間の限り)
- (ATOM上でvim modeのラップをどういう風に働いているかを実演する)
- vim modeだけではなく、独自の便利な機能を実装している
- edge motionというのがある(4ddとかむずいやん) -> これvimの機能でもあったらいいなあ、な雰囲気
- (モダンかつ多機能な機能の連発で私の脳が考えることを放棄し始める)
- (しかしすごいなあ)
SENOO, Ken -Vim and Compatiblity-
サングラス+ビジネススーツな人
updating
keeping
サイボウズLiveは2019-04にサポート終了
POSIX原理主義
- POSIXism
- good
- maintenance free
- Bad
twitter is not posixism
ed -> ex -> vi -> vim
(vimの歴史や、機能を紹介)
- has(), exits()とか
vimのencodingの話
- set bomb
Shougo -Neosnippet.vim + Deoppet.nvim-
vimでexeをビットマップ表示で見る機能を作った(おまけ)
自己紹介
- 暗黒美無王(Uncock Vim Awe??w)
- The text editor is the world
- アイコンはzebraではない! -> ドラゴン
The dark powered plugins
- dein.vim
- denite.nvim
- deoplete.nvim
- defx.nvim(ファイラー, 開発中 vaporware)
The snippet plugins
- スニペットトリガを展開する
- Ex: if -> if () {}
- neosnippet.vim
- マーカタイプ
- snipMate
- 類似のplugin
- 古いので、開発速度は落ち込んでいる
- マーカタイプではない
- UltiSnips
- 海外ではよく使われている
- 多機能
- マーカタイプ?
- バッファを書き換えて(次の場所にマーカを埋め込んでジャンプする)
- 実装しやすい
- パフォーマンスの問題がない
- マーカなし
- バッファから直接場所を取得する
- 前のマーク場所に戻る、みたいな機能は実装しやすい
Neosnippet.vim
- どのような思想なのかを伝えたい
- なぜスニペットプラグインが使われているかわからないので作ってみた
- 補完pluginにスニペットを突っ込んだ
- が、大きいので分離した
- ユーザカスタマイズができるようにneosnippet-snippetsを分離した
- 問題点
- マーカを埋め込んでいるが、見えなくしていて(consealで)、他のpluginと競合している
- jump backは諦めた
- バッファを変更してしまうという副作用がある(時々)
- parseが遅い
- なので、Deopeet.nvimを構想して、実装中
deoppet.nvim(nvim only)
- これまでのスニペットがそのまま使えるようにする
- nvimのExtended Marksを利用する
- Python3 based
- まだ300行程度
- Extended Marks(neovim)
- vimのマーク昨日の発展系
- demo
- (なんとなく動く感じのdemo)
おまけ
- neocomplete.vim
- 開発終了
- deoplete.nvimがVim8に対応したので
- 実装上、プロセス間通信をしまくるので、Windows上では遅い(補完候補の表示に1sec~2secかかる)
daisuzu -How ordinary vim user contribute to vim-
- plugin author
- Software Designに寄稿
- Vimにpatch送る
- Vim暦10年
Cは学生レベル
VimにContributeするには
- sourceがカオス
- 機会が壁
- all you need is a great pasion
patchどう送ってきたのか
- episode
- 辞書ファイルのパスを指定できないissue
- 正規表現のパスチェックを強化
- ある朝VimをBuildしたときに気づいた
- vim2016を聞いて、patchを送ろうと思った
- 辞書補完はあまりつかわれていないイメージだったので、自分がやらなきゃという感じだった
- テストを追加したbranchを作成
- vim-devへ直接送った(テストのみ)
- 翌朝にはmergeされていた
- シソーラス補完(辞書補完の仲間)のファイルパスチェックが入っていなかったissue
- 忘れられてるんだろうな、ということでpatchを送ることにした
- GitHubへPRを送った
- インサートモードの候補がなかなか出てこなくなる
- ファイルorバッファから探すが、不要なwait処理が走っているのが原因
- 気づいた同僚をcontributerに仕立てた
- 進捗なしで3ヶ月経過
- 結果的に自分でpatchを送ることに
- 原因箇所の特定が難しかった
- patchを作ったものの、正しい修正か自身がなかった
- vim-jpへhelpしてもらって、patchを送ることができた
BugFixは比較的取り込みやすい
- 毎日buildしてたら、気づく
Technic
- debug
- gdb
- 対象の行が何回実行されたか
- break + ignoreで見れる
- Testing
- make test
- makefileを直して、vim scriptでテストを書いていく
Conclusion
- とりあえずpatchを書いてみる
- 毎日Vimをbuildする、とか
Pocke -The new syntax highlighter for vim-
plugin author
- sushi-barが有名
syntax highlighter
- Vimには長いファイルを読み込んだ時に、ハイライトを途中でキャンセルする機能がある
- c max columnを設定しておくと設定できる
- Vimはキーワード/正規表現を使ってhighlightする
- なんでも正規表現で解決しようとすると問題にぶつかる
- 「人類に正規表現は早すぎる」
- うまくハイライトできないようなものがある(例えばruby)
- SideCI
- コードレビューを自動化するシステム
new syntax highlighter
- Iro.vim(いろびむ)
- 限界なしに、完璧に行える
- 正規表現をつかわない、理解しやすいコード
- rubyで起きる問題もおきない
- matchaddpos()という関数を使っている
- (demo, ruby hello, worldで)
- tokenize + parse
- iro.vimはrubyでほとんど実装している
- High Performance?
- 悪い知らせ
- 1万行を超えるファイル(rubyソースファイル)を読むと死ぬ(固まる)
- 良い知らせ
- parseはボトルネックにはなっていない
- matchaddpos()を大量に発行しているとbusyになるらしい
Alisue -You're been Super Vimman. gina.vim-
For or not For
Vimmer
Viman
Super Viman
Super Viman 2
- CLI commands to Vim commands
Super Viman 3
Super Viman God
- all native app to vim ...
Gine.vim
- General purpose git plugin
- like fugitive
- Gina add %(current buffer)
Human forget things
- What was discussed in a meeting
Gina's solution
- 覚えておく必要がない(いろんなことを)
- Quickly stage/un-stage files
- visual modeが使える?
- Git add -pがインタラクティブにVim上で行える
- Git blame的なものをする(too much infomationなので、summary + Dateのみ)
すごいVimmer募集中
- fixpoint
懇親会
- 食べ物が豪華(ホテルビュッフェのクオリティ)
飛び入りLTが4sessionほど(vim scriptにmonadみたいな話もあって面白かった)
個人的にはFatihさんに「vimとvim-goでプロダクトコード作ってるよ、vim-go最高!」みたいに伝えれてよかった
- 実際にものすごくお世話になってるし
シルバースポンサのMercari様から、Vim & まさかのemacs缶バッジの配布
- Gジャンに両方つけた後、暑いから脱いだ時にemacsの缶バッジがインナまで貫通してて、インナがやぶけたあたり、「あ、やっぱり俺はVimmerだわ」と思うに至ったオチつき
振り返って
- はるばる関西から初参加でしたが、必ず来年も行こうと思える内容でした
- 最も好きなソフトウェアであるVimの、世界唯一のカンファレンスに参加できたことを誇りに思います