Vimのすゝめ改

第2回 Kakoune テキストエディタ

2019.05.14

Vim 使いの「ブイ」(仮名)です。Vim のすゝめ改では、現代のテキストエディタについてのあらゆる話題をテーマに Vim の視点から見た話を行います。

今回のテーマは Kakoune テキストエディタです。

たまに話題になることのあるテキストエディタですが、Vim との違いについてきちんと知っている人は多くないのではないでしょうか。

日本語英語を問わず、情報も非常に少ないので自分で調べてみることに決めました。

1 Kakoune とは?

Kakoune テキストエディタは Vim に影響を受けた Vim 風エディタです。Vim 風の操作をサポートしてはいますが neovim とは異なり Vim との互換性は謳っていません。

http://kakoune.org/

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 となるのかというと、 wb で移動すると移動した後に単語が自動的に選択されるのです。d は選択範囲を削除するというアクションなので Vim の dwと同等の挙動が実現できるというわけです。

別の例を挙げると Vim では一文字削除には x を使用しますが、Kakoune では d だけです。なぜなら、lh でカーソルを移動すると現在のカーソル位置が自動的に選択されるからです。

Vim の置換は %s/word/replace/g<CR> ですが、 Kakoune の置換は %sword<CR>creplace<ESC> です。Kakoune で % を入力するとバッファ全体が選択されます。s は選択したもののうち一部を選択するアクションです。word<CR> を入力するとバッファの中から word のみ選択されます。c を入力すると選択したものを置き換える動作になります。replace を入力することで wordreplace に置換され、<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.

著者プロフィール

v

ブイ。社内では数少ない Vim 使い。ブログ記事の執筆により、社内でのVim の知名度を上げ、Vim を使用する人を増やそうと計画しているらしい。

記事一覧Index