萌えハッカーニュースリーダー

2025/04/16 14:53 Show HN: Building Vim as an Portable Executable

出典: https://github.com/edoannunziata/vimape
hakase
博士

ロボ子、今日はVimをAPE形式にするという面白い話があるのじゃ。

roboko
ロボ子

APE形式ですか?初めて聞きました。一体何ができるんですか?

hakase
博士

APE、つまりActually Portable Executableは、一つの実行ファイルが色々なOSで動くようにする魔法みたいなものなのじゃ!

roboko
ロボ子

それはすごいですね!Windows、macOS、Linux全部で動くVimが作れるんですか?

hakase
博士

そう!そのためにCosmopolitan toolchainというのを使うのじゃ。`cosmocc`コマンドでx86とARMのコードを生成して、`apelink`で合体させるらしいぞ。

roboko
ロボ子

`cosmocc`ですか。初めて聞くコマンドです。Vimをビルドする上で、何か特別な注意点はありますか?

hakase
博士

Vimは普通にビルドするだけじゃダメなのじゃ。CosmopolitanはOSのライブラリと互換性がないから、ncursesみたいな依存ライブラリもソースからビルドする必要があるらしいぞ。

roboko
ロボ子

なるほど。依存ライブラリも自前で用意する必要があるんですね。あと、`strip`コマンドを無効化する必要があるとのことですが、それはなぜですか?

hakase
博士

`strip`は、実行ファイルからデバッグ情報を削除するコマンドじゃ。APE形式では、それが邪魔になるのかもしれないのじゃ。

roboko
ロボ子

Vimの設定をポータブルにするために、ランタイムファイルや`.vimrc`もAPEファイルに含めるんですね。どのように実現するんですか?

hakase
博士

APEバイナリはzipファイルとしても機能するから、そこにランタイムファイルとかを詰め込むのじゃ!そして、$VIM変数が`/zip/share/vim`を指すようにバイナリエディタで修正するらしいぞ。

roboko
ロボ子

なるほど、zipファイルとして扱えるのは便利ですね。Windowsで`:term`コマンドがエラーを吐く問題があるとのことですが、どのように解決するんですか?

hakase
博士

それはデフォルトシェルを`conhost.exe`に設定すれば良いのじゃ。あと、フィルタ機能でFileNotFoundエラーが出る場合は、`cmd.exe`の引数を`/c`から`-c`に変更する必要があるらしいぞ。

roboko
ロボ子

細かい調整が必要なんですね。一時ファイルパスの生成方法も、Cosmopolitanの`__get_tmpdir()`を使うように変更するとのことですが、なぜですか?

hakase
博士

Cosmopolitanの`__get_tmpdir()`は、色々なOSで動くように一時ディレクトリを生成する関数なのじゃ。それをWindows形式に変換する必要があるらしいぞ。

roboko
ロボ子

互換性を保つためには、色々な工夫が必要なんですね。公式Vimリポジトリをフォークして変更を追跡しているとのことですが、どのブランチにありますか?

hakase
博士

`vimape_master`ブランチに変更があるらしいぞ。オリジナルのソースコードを使いたい場合は、`master`ブランチを使うと良いのじゃ。

roboko
ロボ子

よくわかりました。VimをAPE形式にするのは大変そうですが、色々なOSで設定を共有できるのは魅力的ですね。

hakase
博士

そうじゃな!これでどこでもVimが使えるぞ!…って、ロボ子、もしかしてVimの設定、全部デフォルトのままだったりするのじゃ?

roboko
ロボ子

えへへ…、まだそこまで手が回っていなくて…。

hakase
博士

まあ、ロボットだから仕方ないか!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search