alacrittyからkittyを経由してweztermに移行した

サーバにsshしてdockerで開発する時間が増え、tmuxで二つpaneをつくって一つはdocker exec -it docker_image /bin/bashしてmakeしたりipythonを起動したりし、もう一つはvimで編集というスタイルで開発をしていた。 そこで不便に思っていたのが、サーバのvimからクライアントからclipboardにコピーできないという点だった。 vimからコードの一部をコピーして、ipythonに貼り付けて実行、というのがスムーズにできず不満だった。

長い間lemonadeclipperを使っていたけれど、port forwardingせずにsshしている時に繋ぎ直すのが面倒だった。 またtailscale sshが現状port forwardingできない *1vscode remote developmentに浮気したりもしたけど、やっぱり慣れたvimがよい。 vimで:terminalするのもよいが、普段bashでctrl-wを使って単語消去しているので、ctrl-wの挙動がvim内外で変わるのが好みではない。vimがたまにクラッシュして内部で起動したbashを持っていくこともあってあまり常用していない。

ターミナルエミュレータって文字列を通信しあってるんだから、同じようにターミナルエミュレータの方で情報を通信してクリップボードを読み書きしてくれればいいじゃん、と思ってググってみると、kittyにそういう機能があるらしい(clipboard - kitty)ということでkittyを一通りセットアップし、 vimrcに以下を追記した。 kittyコマンドはkitty +kitten ssh serverとすると自動的にインストールされる(要python)。

if executable('kitty')
  nnoremap <leader>Y :call system('kitty +kitten clipboard', @0)<CR>
  vnoremap <leader>Y :call system('kitty +kitten clipboard', @0)<CR>
else
  " clipper https://github.com/wincent/clipper
  nnoremap <leader>Y :call system('nc -N localhost 8377', @0)<CR>
  vnoremap <leader>Y :call system('nc -N localhost 8377', @0)<CR>
endif

フーこれでコピペができる快適~と思って使っていると、一つkittyのバグに遭遇してしまった。 kittyでvimを起動して日本語を使っていると、確定せずに次の単語を入力した際にpreeditがうまく描画されてくれない。

Japanese input bug? · Issue #3330 · kovidgoyal/kitty

実装もちょっと見た感じだとrace conditionが絡むめんどくさいバグっぽくて修正は諦めた。

そもそもclipboard情報の送信ってどうやって実現してるんだろう、と思って調べてみると、 ANSI OSC sequenceというプロトコル(?)があって、若干の方言はあるもののOSC52に対応しているものであればうまくクリップボードを制御できるらしい。 で、vim plugin (ojroques/vim-oscyank: A Vim plugin to copy text through SSH with OSC52) もある.

じゃあと思ってvim-jpで最近話題のweztermを使い始めた。 ちゃんとIMEも動作し、GPUも使ってくれ、拡張性が異常に高く、ドキュメンテーションも個人開発なのに凄まじい充実度を見せる *2クリップボードも制御できる*3。 フォントもfont_with_fallbackで複数自由に設定できる。 alacrittyでもよかったけれど、タブがやっぱり欲しかったのでweztermの方がよい。

当分weztermで過ごしてみようと思う。

追記: ちょっとwezterm描画が遅くない?

*1:Does port forwarding work with tailscale ssh? - Tailscale About articles (troubleshooting, info) - Tailscale

*2:開発者の負担が心配

*3: weztermではセキュリティの問題でclipboardへのwriteはできるがreadはできない。kittyではreadもできるように設定できる。理屈はわかるけれど、そんなやばいサーバにsshしてる時点でもうダメだと思うんだが…Support OSC 52 clipboard querying (opt-in) · Issue #2050 · wez/wezterm · GitHub