Humanity

Edit the world by your favorite way

セッション管理プラグインを作った結果あまりうまく運用できてない

github.com

  • セッションの保存・復元 (プロジェクト等)
  • 異常終了時のセッションの復元

を目的としたセッション管理プラグインを作った。
コミットログ見れば分かるけど深夜の勢いで書いたので雑な部分もあるけど普通に使えるはず。
下の例と合わせて読み取ってもらえれば。
help 駆動で書いて妙に help は充実しているのでそちらも。

  • 現在のセッションに名前をつけて保存ができる (:ForgetMeNot save {name})
  • セッションに名前をつけたり開いた (:ForgetMeNot switch {project-name}) 後は1分ごとに自動更新される
  • 名前を付けなくても現在のセッションは instance/{pid} という名前でセッションが保存されている
    • 保存しなければ正常終了時に削除される
    • ただ Vim が落ちた場合は削除されないので :ForgetMeNot read instance/12345 すれば
  • セッション一覧は :ForgetMeNot list で見れる
    • (デフォルトで) 1分ごとに保存されるので、それより前の更新日で instance/... なセッションは異常終了したセッションとみなす (表示にも stale と付く)
  • (要追加設定) 異常終了したセッションがあれば Vim 起動時に開き直すこともできる (スワップ画面のように)

使用例

help から引用

    " Switch to a saved session (show sessions list and select one to switch)
    :ForgetMeNot switch

   " Name current session (don't forget when vim exit)
    :ForgetMeNot save my-big-project

   " Switch to the named session
    :ForgetMeNot switch my-big-project
   " Or read an instance session (e.g. stale session)
    :ForgetMeNot read instance/12345

   " List all sessions
    :ForgetMeNot list

   " Delete the session
    :ForgetMeNot delete my-big-project

セッションファイル自動更新の弊害

暫定で inputlist() 使ってる部分を popup で選ぶようにしたかったり Ex コマンドの補完も付けたいのだけど、ちょっとつまづいてしまった。
というのも、便利かと思って入れた自動更新が思いの外弊害をもたらしている。
以下 vim-jp slack でつぶやいた内容。

プロジェクトごとにセッションを保存する感じで行こうと思ったんだけど、ついプロジェクト開いてから別の操作しちゃって関係ないバッファが保存されちゃったり cwd も別のものになっちゃったりすることがあって厳しい。
プラグインに合わせるのもなんだかな…

で、皆どうしてるんだろうと気になったので質問してみたら thinca さんが唯一セッションヘビーユーザだった。
セッション (プロジェクト?) ごとに 1 Vim の運用方法らしい。

thinca:vim:  1:21 PM
セッションヘビーユーザーです。プロジェクトごとにセッション作ってます

tyru  2:04 PM
手動で作成ですか?プラグイン?

thinca:vim:  4:22 PM
@tyru 
おしょーさんの reanimate.vim 使ってます >セッション管理プラグイン

tyru  4:36 PM
@thinca プロジェクトことに手動でセッション保存する感じですかね

thinca:vim:  4:38 PM
初回作成時は手動です。2回目以降はロードしたセッションは自動で適時保存するようにしてます
4:39
1Vim1セッションで、1のVimで複数のセッションは開かない運用方法です。切り替えることはできます。

tyru  5:17 PM
なるほど。切り換えることはできますが運用が体に染み付いてないんですよね…
慣らしてった方が便利なのかなぁ
5:18
thinca さん1Vimで全部のプロジェクト開くスタイルだと思ってたけどそうじゃないんだな

thinca:vim:  5:19 PM
昔はそうだった
5:20
タブを多用しまくるので1Vim で複数プロジェクト開くのに限界が来た
5:22
一時期は起動する Vim は1つだけど作業切り替え時にセッション切り替えるようにしてて、しかしセッションの切り替えがただの Vim script のロードなわけで開いてるファイル数が多いと切り替え自体が遅いので1プロジェクトにつき tmux のセッション1つ切ってその中でそれぞれ Vim 立ち上げるスタイルになった。プロジェクト切り替える時は tmux のセッションを切り替える

便利なら運用方法を変えてもいいんだけど、それほどのメリットが (自分の直感的には) あまり見つかってないのでうーーーんという状況。
あとマルチプレクサは個人的に合わなかった (これはターミナルのタブで代用できるけど)。

他の人たちも現状復帰にたまに使うぐらいでそれ位の使い方が一番便利なのかな…という気持ちになってきた。
でも異常終了時のセッション復元できたりプロジェクトをさっと開けるのは便利だし、なによりせっかく凝った名前を付けたので便利なものにしていきたい気持ちはある。
まぁセッション管理プラグインで session ってつけると被りそうだったからなんだけど。

個人的にはできれば運用方法を変えずに導入できるプラグインがいい。
かつ自分特有の運用方法に合わせたものじゃなくすんなり導入できるといい (自分は大体プラグインを作る時そういう指針で作っている)。

あと一つ何か調整するだけで便利になりそうな気はしてる。
終了時だけ保存するようにしたらまた違うのかな?
結局忘れて関係ない状態で閉じそうだけど。
プロジェクトの状態を復元したいだけなのに終了時にプロンプトするのは流石にうっとうしいし。

Git で特定サブコマンドの出力をページャに渡したい or 渡したくない

git config で変えられる。 わざわざ ls = !"git ls-files | less" って alias を設定してたけど ls = ls-files でよくなった。

# ページャに渡す
git config --global pager.<command> true
# ページャに渡さない
git config --global pager.<command> false

stackoverflow.com

教師の夢を見た

教師としてクラスを受け持つ夢を見た。
なぜいきなりそんな夢を見たかは謎。

私のどんな発言に対する返答か既に忘れてしまったけど *1、 いきなり生徒の一人に「班で話し合う形にしていいですか」と言われ、 咄嗟に「いや言ってません、机を戻してください」とか言えば良かったのだけど、「より正しい返事は何だろう」と考えてしまい、返事が出なかった。
「自主性に任せよう」みたいなことも少しは思っていたかもしれない。
それは自分で考えることを諦めた結果の感情であるようにも思う。
言っても主な原因は脳のクロック数が追い付かなかっただけだが。
返事をしなかった結果、生徒は私の返事を待たず一瞬で机から立ちあがり、中には廊下に出る生徒も出始めた。
学級が崩壊してしまった。

あの場では、ベストな解を見つけるより早いうちにベターな返答をすべきだった。
会話においてはそれが後から考えて正しいことも多い。
当然それで間違えたことも沢山あるが、自分は間違えるのが怖いからと言ってつい完璧な返答を考えるまでの間を空けることが多いように思う。
考え中であることを伝えるべきだし、言う事の聞かない子供に対してはもっと強く出た方が良かった。
でないと舐められて一度通してしまうと今後にも差し支える。色んなケースがある。

冒頭で生徒に言われた瞬間にイラっとしないでもなかったが、それよりも「どう返答すれば頭ごなしにならず、かつ、より効率的な案は何か」と考えてしまった。
職業病でもあるような気がする。人との会話でそれに意識を意識的に割くようにしてきた結果だと思う(無意識だと割と自分の感情を優先する方なので)。
久々に人との会話でイラっとして教師というのは大変な職業だと思ったので書いた。*2

*1:夢だし何も言ってなかったかもしれない

*2:それが夢の中というのは随分ストレスフリーな生活を送っていると思う