Vim 使いの「ブイ」(仮名)です。Vim のすゝめ改では、現代のテキストエディタについてのあらゆる話題をテーマに Vim の視点から見た話を行います。
今回のテーマは Kakoune テキストエディタです。
たまに話題になることのあるテキストエディタですが、Vim との違いについてきちんと知っている人は多くないのではないでしょうか。
日本語英語を問わず、情報も非常に少ないので自分で調べてみることに決めました。
1 Kakoune とは?
Kakoune テキストエディタは Vim に影響を受けた Vim 風エディタです。Vim 風の操作をサポートしてはいますが neovim とは異なり Vim との互換性は謳っていません。
CUI しかサポートしていませんが、動作は軽快で開発は盛んであり、これからの可能性を感じることができます。
注意点として、各種プラグインを始め Unix 環境に強く依存して実装されているために Windows 環境では動作しません。
Kakoune は C 言語で書かれている Vim/neovim とは異なり、C++ で書かれているのも特徴の一つに挙げられるでしょう。
2 Kakoune のビルド方法
Kakoune を使用するにはソースコードからビルドしなくてはいけません。テキストエディタのビルドは面倒な場合も多いのですが、Kakoune のビルドは拍子抜けするほどに簡単です。src ディレクトリで make
するだけです。
https://github.com/mawww/kakoune#tldr
git clone http://github.com/mawww/kakoune.git
cd kakoune/src
make
./kak
3 様々な機能がビルトイン
Kakoune テキストエディタでは、現代のテキストエディタで必須と思われるような機能がビルトインされています。
自動補完
複数範囲選択
コマンドラインポップアップ自動補完
EditorConfig サポート
ただし、ビルトイン機能の一部は組込みのスクリプトで実装されています。
ctags 連携
filetype プラグイン相当の機能
自動折り返し
スペルチェック
4 Vim script がない
Kakoune には Vim script がありません。その代わりにシェルスクリプトの実行結果を埋め込む機能があり、間接的にスクリプトを記述することができます。
https://github.com/mawww/kakoune/wiki/Migrating-from-Vim#vim-plugins---viml-vimscript
コマンドの定義例は以下の通りです。
https://github.com/mawww/kakoune/blob/3f29d5ebbf81f20ba60fe66f7ff64128e05e3f06/rc/base/ctags.kak#105
define-command ctags-update-tags -docstring 'Update tags for the given file' %{
nop %sh{ (
while ! mkdir .tags.kaklock 2>/dev/null; do sleep 1; done
trap 'rmdir .tags.kaklock' EXIT
if ${kak_opt_ctagscmd} -f .file_tags.kaktmp $kak_bufname; then
export LC_COLLATE=C LC_ALL=C # ensure ASCII sorting order
# merge the updated tags tags with the general tags (filtering out out of date tags from it) into the target file
grep -Fv "$(printf '\t%s\t' "$kak_bufname")" tags | grep -v '^!' | sort --merge - .file_tags.kaktmp >> .tags.kaktmp
rm .file_tags.kaktmp
mv .tags.kaktmp tags
msg="tags updated for $kak_bufname"
else
msg="tags update failed for $kak_bufname"
fi
printf %s\\n "evaluate-commands -client $kak_client echo -markup '{Information}${msg}'" | kak -p ${kak_session}
) > /dev/null 2>&1 < /dev/null & }
}
Kakoune のビルトインプラグインやユーザーが作成したプラグインはいずれもこのように実装されています。
5 Kakoune に実装されていない機能
Vim に存在するものの Kakoune に存在しない機能は以下があります。
conceal
コードの折り畳み
6 モーションの順番が違う
Vim のモーションは「アクション + 移動範囲」という構文になっていますが、Kakoune の場合は「移動 + アクション」です。
https://github.com/mawww/kakoune/wiki/Migrating-from-Vim#vim-to-kakoune
具体的な例を挙げましょう。Vim だと単語を削除するには dw
を用います。
Kakoune では wd
です。
なぜ Kakoune では wd
となるのかというと、 w
や b
で移動すると移動した後に単語が自動的に選択されるのです。d
は選択範囲を削除するというアクションなので Vim の dw
と同等の挙動が実現できるというわけです。
別の例を挙げると Vim では一文字削除には x
を使用しますが、Kakoune では d
だけです。なぜなら、l
や h
でカーソルを移動すると現在のカーソル位置が自動的に選択されるからです。
Vim の置換は %s/word/replace/g<CR>
ですが、 Kakoune の置換は %sword<CR>creplace<ESC>
です。Kakoune で %
を入力するとバッファ全体が選択されます。s
は選択したもののうち一部を選択するアクションです。word<CR>
を入力するとバッファの中から word
のみ選択されます。c
を入力すると選択したものを置き換える動作になります。replace
を入力することで word
は replace
に置換され、<ESC>
でノーマルモードへ戻ります。つまり、Kakoune には置換用の専用コマンドはありません。
7 コマンド入力ヒント機能
Kakoune でマルチストロークなキー入力を行う場合、Vim と同様に当然入力待ちになるわけですが、コマンドのヒントが右下に表示されています。
例えば、g
を入力すると g
に続くコマンド g
, l
, h
, ... などが表示されて分かりやすくなっています。
8 Kakoune のプラグイン一覧
Kakoune のプラグインは以下にリストされています。
http://kakoune.org/plugins.html
LSP をサポートしたプラグインや vim-plug 風のプラグインマネージャーなど便利そうなものが揃っていますが、Vim の豊富なプラグインと比較すると全然足りないだろうと予想できます。
9 Vim ユーザーは Kakoune を使うべきか?
Vim ユーザーが Kakoune を触ってみるのはアリだと考えています。独自の思想に触れることで新たな刺激があるのではないでしょうか。 Kakoune が Vim ユーザーが積極的に移行すべきテキストエディタであるかは私には判断ができません。独自の良い機能もあるかわりに、既存の機能やプラグインとの互換性がないからです。Kakoune への移行は Vim から neovim へ移行するのとは訳が違うでしょう。
This article is made by Vim.