はじめに
私はエンジニアでソースコードの編集のためにテキストエディターを利用している。 数あるテキストエディターの中でも私はVimやEmacsのようにカスタマイズ性の高いエディターを好んで利用している。 最近はVimに操作性の似たTUIエディターのHelixが有名になってきている。 HelixはVimとKakouneというテキストエディターからインスパイアされた新しいテキストエディターである。 このHelixの操作性が非常に良かったため、しばらく使ってきた。 しかしHelixにはプラグインシステムが未だに存在しない。 私はエディターにはカスタマイズ性を求めているため、これは致命的であった。 そこで私はKakouneを使ってみようと思った。
Kakoune
KakouneもVim同様にTUIのテキストエディターである。 Vimとの違いとしては、Vimは操作・範囲選択という順番にコマンドを実行するのに対して、Kakouneでは、範囲選択をしてからコマンドを実行するような考え方だ。 Helixの操作性はKakouneから影響を受けているため、Kakouneと同様である。 しかし、Helixとの違いはプラグインを利用できるところだ。 LSPやtree sitterのようにモダンなテキストエディターの機能も利用することができる。
Kakouneの哲学は非常に面白い。 例えばvimでよく使うパネルの分割機能も持たない。 それはUIの責務からであり、KakouneではこういったUIの責務をtmuxやzellijに譲っている。
プラグインの書き方
コクーンのプラグインは以下のようにして書く。 主にシェルスクリプトと組み合わせて構成する。
define-command php-cs-fix %{
nop %sh{ php-cs-fixer fix "$kak_buffile" --quiet}
edit!
}
zellijを開く場合は以下のように書く。
define-command yazi -docstring 'open yazi in current buffer dir' %{
evaluate-commands %sh{
# 一時ファイルを作成
tmp=$(mktemp)
# カレントバッファのディレクトリを取得
dir=$(dirname "$kak_buffile")
# terminalコマンドを文字列として組み立てて出力する
# %{ ... } で囲むことでクォートの競合を避ける
echo "terminal sh -c %{
yazi '$dir' --chooser-file='$tmp'
if [ -f '$tmp' ]; then
files=\$(cat '$tmp')
rm -f '$tmp'
[ -n \"\$files\" ] && kak -p '$kak_session' -e \"evaluate-commands -client '$kak_client' edit \$files\"
fi
}"
}
}
terminalはtmuxやzellijを利用して新規パネルを開く。