第4回vim-jp-westのオフ会幹事をしました

この記事はVim駅伝の2024-1-5の記事です。前回の記事はこまもかさんの『FennelでNeovimプラグインを書こう』 です。次回の記事はkyoh86さんの『Vim/Neovimを通してLLMと対話する─prompt-bufferという存在』です。

【はじめに】

第4回vim-jp-westを開催しました。今回は準備の段階で少しドタバタしてしまいました。

【開催日まで】

当初は12月1日に開催を予定していました。アナウンスしたのは10月下旬。開催日を12月に設定したので、年末ですし早いめに決めておいたほうが良いだろうと考えたからです。しかし結局人が集まらず、thincaさんからアドバイスをいただき、延期&リスケジュールすることになりました。もし、元々の日時で予定を考えていた方がいらっしゃったなら、この場で謝罪させていただきます。申し訳ありませんでした。
気を取り直して、以前と同じように調整さんで参加者を募りました。第1回の時と同様、金・土曜日に参加者さんの希望が分かれました。出来るだけ多くの人にお会いしてみたいという私の我儘により、今回も2日間開催にしました。幸い、12月ということもあって家内も大目に見てくれました(とても感謝)。

そんなこんなで、開催日は12月22日と12月23日に決定。時間は少し遅めで20時からに設定しました。以前から経験しているのですが、地理的条件のため会の終了時間が決まってしまっているのが少し残念です。参加者皆さんが参加しやすい地域も大分解ってきたので、この経験は次回から活かしたいと思います。あと、ラーメン屋さんのリサーチを行っていなかったので、お腹の具合が少し物足らなかったかもしれません。こちらも次回からは開催前のリサーチをしておこうと思います。

【当日の様子と自分の変化】

肝心の会での様子ですが、参加者の一人が、実に上手い話題の提供をされました。VimとNeovim、どちらをメインで使っていますか?という質問です。結果はNeovim 4人、Vim 2人。結果はともかく、個人的にこれはとても考えさせられる質問でした。というのも、私はVim「しか」触っていません。しかし、若干の行き詰まりを感じていたのです。もちろん、Vimの操作やVimScriptをマスター出来たわけではないのですが、何か解らないながらも行き詰まりを感じていたからです。別の方はこうも仰っていました。「VimScriptはVimでしか走らない。Luaはそうではない」と。その時、私が感じていた行き詰まりの正体が見えてきました。それは、「Vimに限定して情報を探そうとしても圧倒的に量が少ない」ということです。私のググり力が足らないこともあるでしょう。歴史的背景、流行、といった要素もあるでしょう。そういう事を考えていると、Neovimもそろそろ触ってみてもいいんじゃない?という考えが浮かんだのです。
どちらか片方より、両方使える方が良いに決まってます。実際、2つとも使用していて用途によって使い分けてるユーザもいらっしゃいます。グラフィックデザイナーが「ペイントは知ってるけどドローは触ったことがない」なんていうのと同じではないでしょうか。二兎を追うもの一兎も得ずと言いますが、VimとNeovimを別々のソフトウェアではなく、2つ合わせてVim系として認識しなおせばいいのではと思うようになりました。VimをマスターしないとNeovimを触ってはいけない、なんて決まりがあるわけでもない。今までの私は、VimとNeovimを必要以上に区別しすぎていたのかもしれません。「Neovim?あぁnot for meだな。まずはVimを極めないと…」とNeovimの話は避けるようにしていました。しかし、気が付きました。「片方しか知らないのは『損』じゃないの?」という事に。ですから、これからはそういう姿勢を改めてみようと思いました。思い立ったが吉日。Neovimのリポジトリをクローンしてビルド版をインストールしている自分がいました。
Vim/Neovimの話以外にも色々なお話が出来ました。Pythonhogeな事されてる方、Cでfugaな事されてる方、将来は○✕になりたい、とか。あと、すばらしいおめでたい話や、そうでない話もしました。何より、以前にお会いした方と再会するのは良いですね。「よぉ〜!。元気?頑張ってる?」なぁんて言いあえるのは有難い限りです。

【最後に】

参加者の皆さん、お付き合いいただき有難うございました。いつも充実した時間を過ごさせていただいて感謝しております。今年も引続き開催していければと思っています。もう少し技術的な話や作業をする集まりが出来ればと考えています。
他の皆さんも、ご都合が合えば是非御参加下さい。

vimtutorの次(その1)

この記事はVim駅伝の2023-11-24の記事です。前回の記事はyasunori0418さんの エンジニア1年目で自分のvimを使えるまでの活動 です。次回の記事は同じくyasunori0418さんの vimを切っ掛けにエンジニアになった話 です。

【本記事の対象読者】
Vimを触り始めて以来少〜しだけ経過した方。h, j, k, lや、モードの存在、バッファって何?、.vimrcって何?等までは解ったかな、という方。Vimそのものの機能を習得するための題材を探している方。

【はじめに】
Vimを始める時、チュートリアルとしてvimtutorがあります。このvimtutorを何度も繰返してマスターする事はとても有用かつ大切であると思います。しかし、vimtutorをマスターして次の段階に進む時、皆さんはどうされるでしょうか?。プラグインを試しまくってみたい?コードをガシガシ書き出したい?。道具(Vim)を使いこなせるようになるためには「とにかく使い続ける」です。どうしたら馴染む&上達することが出来るのだろうかと考えたところ、日記、メモ、チートシートのようなものを書くことを思い付きました。こういったものを書きながらVimに馴染んでいけたら、一石二鳥ではないでしょうか。本記事は、vimtutorをマスターしたけどコーディング以外に何か題材は無いのか?という方に、「コーディング以外、日記(メモ)を書くことでもVimに馴染んでいける」ということを、自分の軌跡をお示しして、紹介する記事です。同じような状況でツボッている方の参考になれば幸いです。

【目標】
日記を書くのに必要なのが日付の入力です。もちろん、Vimテキストエディタなので普通に日付をタイプして入力すれば良いのですが、そこは折角Vimを使っているので、もっと便利な入力方法が有るんじゃないかと思いたち、キーマップを作成することにしました。他にもコマンド、関数を使う等色々有ると思いますが、最終的に出来上がったものが自分にとって一番簡便であろう、という目論見でキーマップでの実装としました。目標は、
ノーマルモードにあるとき、とあるキー(または、複数のキーで成り立つシーケンス)を押すと、ファイル先頭の行頭に[2023/11/01](ここは当然、タイピングしている日、ですし括弧も含みます)と入力され、カーソルが次行の行頭へ移動し挿入モードになっている」
という機能を実現する、です。

【キーマップのカスタマイズ】
normal modeの時に有効になるキーマップは、nmapコマンドで定義します。ですから例えば
nmap <leader>ih iHello Vim<Esc>
と定義します。定義というのはここでは「.vimrcに記入、保存する」という意味とします。定義したら.vimrcをリロードします。.vimrcのリロードは、Vimを再起動するか、
:source ~/.vimrc
(もし他のパスに.vimrcがある場合はそちらに書き換えてください)コマンドを実行します。もちろん、Vimを操作中にnormal modeで先頭に「:」をつけて上記コマンドを実行しても、キーマップは有効になります。しかし、作成したキーマップを永続的に機能させるためには.vimrcに保存しておいたほうが良いでしょう。<leader>というのは、キーマップを作動させる時に一番初めにタイプすべきキー、の事です。デフォルトでは「\」キーが割り当てられています。もちろん、自分の好きなキーに設定することもできます。<Esc>はEscキーを意味します。
キーマップの定義が有効になると、<leader>ihとタイプする(つまり、\ihとタイプする)と、バッファにHello Vimの文字が入力されるようになります。ここでポイントは「タイプした事をそのまま文字に起こしてやれば、まるでほんとに操作したかのようにそのまま実行される」という事です。
なので、
iHello Neovim<Esc>
と定義した場合はHello Neovimと表示されますし、
iHello Vim<CR>
と定義した場合は、Hello Vimの文字が入力された後改行(<CR>は改行を意味します)するとなります。キーマップに関するヘルプは
:h key-mapping
に記載されています。

【ヘルプの利用について】
私がVimに馴染むために、もう一つ意識していたのがヘルプの活用です。Vimのヘルプはとても良く出来ていると思います。有志の方々による翻訳作業も進行しているそうで、本当に感謝しております。使えば使うほど理解が深まり、Webで一々検索したりする手間も省けます。ただ
「キーワードやフレーズを知らないのでどこをどう調べれば良いのかわからない」
という方も多いのではないでしょうか。そんな方にお薦めしたいのが
「ある事象をヘルプで調べたときには、出てきた項目がどのファイル(あるいは何というテーマ)の章に記載されているのかを意識して見ておくようにする」
という事です。あと
「調べた結果出てきたヘルプの内容から広い範囲を読む(ざっとでいいから目を通す、知識を仕入れる)」
ということもお薦めします。例えば先程、少し例を挙げましたが:h key-mappingでも:h mapでも構いません。実際にヘルプを表示して読んでみることです。もちろん、1度見ただけで全て覚える必要はありませんし不可能です。しかし1回でも見ておくと、今後のVim生活に必ず役に立ちます。「あのコマンドどこだっけ」なんて時も「:helpgrep」コマンドがあるので、最悪、単語の断片しか覚えていなくても探し出すことが出来ます。え?。:helpgrepが解らない?。
:h helpgrep
してみましょうよ!。

【日付の取得&バッファへの入力】
次は、日付の入力についてです。ここでは、外部コマンドとしてシェルで用いられるdateコマンドを利用することにします。まず、vimtutorのレッスン5.1に「外部コマンドを実行する方法」という章が有ります。:!の後にコマンドを入力すると、その実行結果がターミナルに表示される、というものです。実際にやってみると挙動が解ります。
:!date
ターミナル画面が出てきて
-----
[最後の変更が保存されていません]
2023年 11月 19日 日曜日 11:26:33 JST
続けるにはENTERを押すかコマンドを入力してください
-----
と表示されます。これは使えそうですね。しかし、問題が有ります。
1.欲しい日付の書式が違う
2.ターミナル画面に表示させたいわけではなくバッファに入力させたい
一つずつ解決していきましょう。まず、日付の書式はdateコマンドのオプションで変えられます。オプションを与えてやってみます。
:!date +%Y/%m/%d
あれ?。先程と異なり変な表示がされました。実は%に原因が有ります。Vimでは%は非常に特殊な意味を持つ文字なので、これを\でエスケープする必要が有ります。%を\でエスケープして再度実行してみましょう。
:!date +\%Y/\%m/\%d
出来ました。これで1.の課題は解決です。次は2.です。
ここで、Google先生の力を借りましょう。「コマンドの出力をバッファへ挿入する」というフレーズで検索します。するといくつかの検索結果が表示されて、ズラズラと見てるとどうやら:readというコマンドが役に立ちそうです。Vimのヘルプで:readコマンドを調べてみます。
:h :read
すると、「ファイルの内容、もしくはコマンドの出力をバッファへ挿入する」とあります。なるほど今回の目的に利用できそうなコマンドであることが解ります。ではreadコマンドの後ろに先の!コマンドを繋げて実行してみましょう。
:read!date +\%Y/\%m/\%d
如何でしょうか。バッファのカーソル位置の1行下に、dateコマンドの結果が挿入されたのではないでしょうか。素晴らしい!。

後は整形するだけです。つまり、上記のコマンド実行を軸にして、カーソルを動かしたり、文字を入力したり、次への操作の準備が完了した状態にする、といった機能を追加するわけです。これらの動きをタイプ内容に起こし、微調整したものが以下の通りです。
gg<Esc>:r!date +\%Y/\%m/\%d<Esc>kdd0i[<Esc>$a]<Esc>o
何をしているか、文字を順番に追いかけてみて下さい。めちゃくちゃ愚直でお恥ずかしい限り(^^;なのですが、これが私が初めて自分で定義したキーマップです。今は少しおしゃれにして
nnoremap <silent> <leader>di gg<Esc>O<Esc>:r!date +\%Y/\%m/\%d<Esc>kdd0i[<Esc>$a]<Esc>o
と、.vimrcに書いています。

【応用】
・ファイル末尾の行頭に日付を入れるにはどうすれば?。
・他の外部コマンドの結果を利用することも出来ます。外部コマンドはdateだけではありません。lsでファイルの一覧を読み込んで編集したり、grepの結果をバッファに読み込んだり、出来ることは無限に広がります。
・実は外部コマンドのdateを使わずともVimの機能だけで同じことを実装できます。何度も言いますが、ヘルプを見てみましょう。そのものズバリの事が書かれています。

どうでしょう。様々な可能性が浮かんできませんか?。この「可能性が浮かび上がってくる」というのがVimを使う楽しさの一つなのだと私は思います。創造力を掻き立て、頭脳を駆使する。如何でしょう。vimtutorを終わった直後の時よりワクワクしませんか?。少しでも「面白そうだな」と感じていただければ幸いです。

【終わりに】
今回はVimを利用するようになって自分が初めて辿った軌跡をご紹介させていただきました。少しでもVimの面白さに気づいていただけたり、興味を持っていただければ幸いです。最後まで読んでいただき有難うございました。

 

追伸:2023年8月3日に他界されたBram Moolenaar氏の御冥福を御祈りいたします。

vim-jp-westのオフ会幹事をしました(2023/08/25)

この記事はVim駅伝の2023-09-04の記事です。前回の記事はatusyさんの mini.surroundによるHTMLタグ編集のemmet対応 です。
次回の記事はswnakamuraさんのVimIMEの仲を取り持つの予定です。

【はじめに】

前回に引続き、今回もvim-jpのオフ会を主催したので御報告を兼ねてレポートします。

【きっかけ】

今回は、kamichiduさんの梅田勤務歓迎会(実際にはもう少し以前から大阪にいらっしゃったそうなのですが、それはお会いしてから解ったことでした)を兼ねた懇親会、という趣旨で企画しました。

【開催日まで】

日付は8月25日金曜日に設定。時間については今回は少し早めの開演に設定しました。前回の様に遠方から来られる方がいる場合は終了時間を早める必要があるかも、と考えたためです。

告知は例によってslackのvim-jpとconpassで行いました。前回同様、宣伝は大々的には行わずに粛々と参加受付を待っていました。粛々としすぎていたのかもしれません。開催2週間前まで参加予定者は0人。しかし!2週間前になってお一人。vim-jpに参加している方なのかどうかは解らないのですが、参加申込がありました!。うっれしい!。その後、kamichiduさんからも無事に参加申込があり、最終的に私を含み3人での懇親会の予定となりました。

【当日:8月25日金曜日】

当日、kamichiduさん1時間遅れることに。元々遅れる可能性があるのは承知していたので問題はありませんでした。だったら、もうおひと方の始めましての方と先に始めとくことにしよっか…等と考えながら現地に到着したのですが…connpassを確認し直してみるとなんとその方からキャンセルのメッセージが!。お仕事が終わりそうにないから、とのことでした。現地についてからボッチ決定は、流石に少し残念でした。仕方がないので予定していたお店に一度行き、事情を説明して予約し直し。開始時間を1時間繰り下げることに。お店側も快諾いただけました。そこで私は1時間程時間を潰さなければならなくなったのですが、外で立ってお待ちするにはあまりに暑かったですし…私も歳だし脱水症や熱中症になってもいけませんし、お待ちしてる間に体調を崩して御迷惑をお掛けする訳にも行かないし…いや、kamichiduさんには本当に申し訳ないのですがお先に…ゴニョゴニョ。。。

1時間経過後、予約していたお店に再度訪問。席についてkamichiduさんをお待ちしていました。そうこうしているうちにkamichiduさん無事に合流完了。会が始まりました。食事中はエンジニアリングの話だけではなく、話題も多岐にわたり、お互いに良い時間を楽しめたと思います。二人共お腹一杯になり、お食事終了。kamichiduさんは翌朝予定がお有り、とのことで今回の懇親会はお開きとなりました。

 

【考察】

平日の開始時間は19時〜19時30分に設定するほうが良さそうです。もし時間を遅くしていたら、もうおひと方も参加出来たかもしれませんものね。みなさんが出来るだけ参加していただけるように調整するにはまだまだ精進が必要です。次回は、今回参加できなかった方も含めてまた開催したいと思います。

【さいごに】

次回は11月下旬に開催と考えていますが、開催希望がありましたら出来る限り対応させていただきますので、いつでもお気軽にお声掛け下さい。こちらの、event-vim-jp-westのチャンネルです。slackのvim-jpにはほかにも様々なチャンネルがあります。是非参加してみることを強く強くお勧めします。

vim-jp.slack.com

また、11月18日13時に、秋葉原富士ソフトアキバプラザにてvimconfが予定されています。私は残念ながら今回の参加は出来なさそうなのですが、西方から応援させていただきたいと思います!。

vim-jp-westのオフ会幹事をしました

この記事はVim駅伝の2023-07-17の記事です。
前回の記事はtomato3713さんのNeovimでディレクトリを開いた時に任意のファイラープラグインを起動する設定を楽にするプラグインを作ったです。
次回の記事はtaniさんのカラースキーム自作のすすめ、の予定です。

【はじめに】

6月に2日間、vim-jp のオフライン会を行いました。私が幹事を担当したのですが、今回はその件について、御報告を兼ねて書かせていただきます。

【きっかけ】

もう約30年ぐらい前になるでしょうか、NiftyServe華やかなりし頃、当時は色々な集まりのオフ会に参加したり、幹事を担当したりしていました。そんな私が4月下旬、最近お邪魔している vim-jp で、オフ会開催について何気に質問してみたのです。実はそれまで

「ガチ技術系のコミュニティだし、slack上で文字のやり取りは出来てるし、なんならzoomでもskypeでも何でも使えば離れてても見たり話したり出来る時代なわけで、最近の人はオフなんてあまり興味ないんだろうかな?どぉなんだろ?」

と考えていたからです。

ところが意外や意外。vim-jp の皆さんから「いいぞ、やれやれ」な感じで背中を押していただいたのです。とても有難い後押しに感じました。そこで一発奮起して、企画することにしました。

【開催日まで】

vim-jp で紹介いただいた 調整さん - 簡単スケジュール調整、出欠管理ツール を使って、開催日、出欠のアンケートを取りました。私の我儘で、曜日は金曜、土曜に絞りました。結果、金曜、土曜のそれぞれに出席の意思表示をいただきました。折角手を上げてくださった方々を選ぶなんて申し訳ないしどうせなら、と考え、日を少し開けて6月10日土曜日と6月30日金曜日の2日間とし、1日目を懇親会、2日目をもくもく会+懇親会、というフォーマットにしました。開催地は、参加者皆さんの交通の便を考慮し梅田駅周辺に設定しました。会開催の告知は connpass にも登録し、compassでの参加登録をもって受付することにしました。

【1日目 6月10日土曜日】

お店の前で待ち合わせ。店の玄関真ん前だったので特に問題なく、スムーズに初対面出来ました。Vimに因んで、私はグリーンのポロシャツを目印に来ていったのですが、他にもグリーンのお洋服の方が居らっしゃいました。「どぉもどぉも~!今日はおいでいただき…」なぁんて御挨拶から始まり、まずは自己紹介。元々この日は「取り敢えず1回、集まってみ~へん?」的な主旨でしたので、PCや本を広げることもなく、ふっつぅ~に食事するだけでした。がしかし、蛇の道は蛇。当然、技術的な話も徐々に飛びかうようになっていました。とはいっても、「いつも、Vimでどんなことしてるの?」とか「Vim歴どれくらい?」といった比較的浅めな内容です。場所がふっつーの焼肉屋さんだったので、とある方は「周りから見たら、何の集まりに見えてますかねw」な~んて仰っていました。私は、そう言われるまで全然気にしていませんでしたよ?w。

【2日目 6月30日金曜日】

この日も待合せ→もくもく部屋への入室までスムーズに経過。お部屋は『ワンルームマンションの一室をそのまま自習スペースに模様替えした』って感じのスペース。初めに簡単に自己紹介をして、誰彼ともなくラップトップを開いていって、slackの画面を見たりなんかしながら、気がついたら3人共黙ってモニタとにらめっこ状態。なるほど。これがモクモク状態なわけですね。そのうち参加者さんから、.cacheファイルをどうしてる?のネタフリ。少し会話が盛り上がりましたが、結局解決できたのか出来なかったのか解らないまま再びモクモク。懇親会をどうするか考えていたら、遅れてくる方がslack上にメッセージを入れて下さいました。しかし、予想以上に早い時間だったので慌てて合流の為にお部屋を出る準備。少しドタバタしながら待ち合わせ場所へ。無事に合流できたものの懇親会のお店を決めていなかったのでダラダラ歩いてたらshishiさんが行動力を発揮してくださってようやく食事タイム。食事中はshishiさんにリードしていただき楽しく過ごし、その後お開きと相成りました。

【考察】

オフ会開催の是非について

2日間で私を含めて計6人のVimmerに集まってもらえました。そのうち3人は大阪府外の方でした。「westなので自分も参加して良いかな、と思って来ました」と仰っていた方がいました。osaka、hyogo、kyotoといった都道府県名にすると、近隣の方にとってはどうしてもclosedな印象を与えてしまうそうです。kansaiでも良かったかもですけど、それだと中部地方の方にとっては敷居が高いかもしれません。ちなみに、compassのイベント統計で見れるページビュー/ユニークユーザ数は

1日目 145 / 99

2日目 213 / 149

でした。

いずれにしても『関東以外の地域であってもオフ会の需要は確実に存在する』と思われました。

もくもく会なるものが、どういうものなのか体験出来てよく理解出来た

顔合わせもソコソコに皆さんラップトップを広げだすと自然とゴソゴソし出して、気が付けばモクモク作業が始まっていました。私はラップトップと書籍『Vim scriptテクニックバイブル』を持参していたのですが、あまり集中できず、遅れて来られる方の動向が気になり、slackをチェックしては本を読む、の繰り返しでした。しかし他のお二方はモクモク作業されて、思い出したように会話をする、といった感じでした。「〇×はどぉしてます?」「あぁそれは~」等という感じです。初めから最後までず~っと話しっぱなしという事にはなりませんでした。

2日目の時間配分が大変マズかった

1日目は食事のみだったので時間配分も何も問題はありませんでした。問題はもくもく会。皆さん作業に集中している時間が意外と(失礼)長かったので、もくもく時間はあっという間に終わってしまいました。懇親会の時間、移動時間、帰宅時間等の事前イメージが甘く、参加者の皆さんにはドタバタした印象を与えてしまったかもしれません。懇親会の時には皆さんお喋りでもそこそこ盛り上がっていたので、もしかしたら皆さんモクモクするよりお喋りの方が楽しかったのかも?と感じました。まぁ初めてお会いする方々ばかりですし、この辺りは今後の課題としていこうと思います。

Slack上の話やディープなVimの話題はあまり出なかった

slack上の話がオフラインで改めて話題になることは、あまり無かったです。初顔合わせという事もあり、皆さん若干緊張されていたのかもしれませんね。会がこなれていけば、もしかしたらディープな会話が飛び交うようになるやもしれません。楽しみですよねw。

【参加いただいた皆様へ】

ヴさん:遠いところをおいでいただき有難うございました

keさん:若さが眩し過ぎました

wさん:いつかLTしていただける日を楽しみにしております

kiさん:大阪でのVim関連オフ参加経験をもっと教えて頂けることを期待してます

sさん:お忙しいのに来ていただいてありがとうございました。足の調子はいかがですか?

【さいごに】

また逐次開催していければ、と思ってますので開催希望の方はいつでも御声掛けください!。こちらの、event-vim-jp-westのチャンネルです。slackのvim-jpにはほかにも様々なチャンネルがあります。是非参加してみることを強く強くお勧めします。

vim-jp.slack.com

最後になりましたが、背中を押して下さった vim-jp の皆さん有難うございました。今後共宜しくお願いします。