この記事を3行で要約
MS-DOSやそのエミュレータでVimをビルドするための情報についてまとめました。
MS-DOSでビルドできる最新のVimのバージョンは7.4.773です。
ビルドするのが面倒な場合は、7.3.46のビルド済みバイナリが配布されています。
エミュレータの準備
残念ながら筆者はMS-DOSが動作する実機を持っていないので、DOSBox-Xを利用します。
DOSVAXJ3やDosemu2でもビルド済みバイナリが動作することは確認していますが、ビルドは未検証です。MS-DOS Player for Win32-x64については何も試していません。
ホストOSはなんでもいいですが、ここではWSL2上のUbuntu 24.04を使用します。
DOXBox-Xの初期設定
まずはDOSBox-Xをインストールしましょう。ここではお手軽にaptを使います。
$ sudo apt install dosbox-x
もちろん、ソースからビルドしてインストールすることもできます。
$ git clone https://github.com/joncampbell123/dosbox-x.git
$ cd dosbox-x
$ sudo apt install automake gcc g++ make libncurses-dev nasm libsdl-net1.2-dev libsdl2-net-dev libpcap-dev libslirp-dev fluidsynth libfluidsynth-dev libavdevice60 libavformat-dev libavcodec-dev libavcodec-extra libavcodec-extra60 libswscale-dev libfreetype-dev libxkbfile-dev libxrandr-dev
$ ./build-debug
$ sudo make install
インストールが完了したら、DOSBox-Xを起動して以下のコマンドを実行し、デフォルトの設定ファイルを書き出して終了します。
Z:\> CONFIG.COM -wcd -all
Z:\> exit
書き出された設定ファイルの各値を以下のように変更してください。
簡単に解説すると、まず[dosbox]
と[dosv]
で一旦日本語表示にした後、最後にchej us
で英語表示に戻しています。筆者の環境ではこうしないとVimを起動したとき表示がおかしくなるのですが、もっとエレガントな方法があるかもしれません。
CHEJはDOSBox-Xには含まれていないので、別途VectorからCHEJ 6.10をダウンロードして (エミュレータ上の) C:¥CHEJ610
に解凍しておいてください。
[dos]
では、エミュレートするMS-DOSのバージョンを7.1とすることでロングファイルネームを扱えるようにしています。これは、Vimのソースファイルに含まれるregexp_nfa.c
というファイルのファイル名が8文字を超えているためです。何らかの事情でロングファイルネームを有効にできない場合にはこのファイル名が8文字以下になるようにリネームしてください。
また、[autoexec]
の/path/to/drive_c
は適宜読み替えてください。次の節からは、このフォルダ内でVimのソースをビルドするための下準備をしていきます。
[dosbox]
language = ja_JP
[dosv]
dosv = jp
getsysfont = true
[dos]
ver = 7.1
lfn = auto
[autoexec]
mount c /path/to/drive_c
c:
set DJGPP=c:¥djgpp¥djgpp.env
set PATH=%path%;c:¥chej610;c:¥djgpp¥bin;c:¥vim¥vim74
chej us
おまけ: DOSVAXJ3の初期設定
DOSVAXJ3を使用する場合は設定ファイルの[autoexec]
に以下を追加するだけでOKです。
[autoexec]
mount c /path/to/drive_c
c:
set DJGPP=c:¥djgpp¥djgpp.env
set PATH=%path%;c:¥djgpp¥bin;c:¥vim¥vim74
chev us
Dosemu2は設定変更の必要はありません。
DJGPP (コンパイラ) の入手
続いて、コンパイラを入手します。今回は32bitに対応したDJGPPを使用します。Vimはかつて16bitでのビルドにも対応していましたが、筆者は今のところ検証していません。
DJGPPの配布ページへ行くと何種類ものファイルが置かれていて面喰らいますが、Vimのビルドに最低限必要なのは以下の5つです。
v2/djdev205.zip
v2gnu/gcc1030b.zip
v2gnu/bnu2351b.zip
v2gnu/mak44b.zip
v2misc/csdpmi7b.zip
これらを全てダウンロードして解凍し、C:\DJGPP
へ展開します。
これで下準備は完了です。
ソースからビルドする
いよいよVimをビルドします。
Vimは7.4以降のある時点からMS-DOSではビルドできなくなっており、その後patch-7.4.1399でMS-DOSコードが削除されたことが知られています。
そこで、厳密にはどのpatchからビルドが失敗するようになったのか調べてみました。
その結果、patch-7.4.774でsrc/edit.cに加えられた変更が原因であることが分かりました。
従って、MS-DOSでビルド可能な最新のVimはpatch-7.4.773であるということになります。
リンク先から7.4.773のソースをダウンロードしてC:\vim\vim74
に展開したら、DOSBox-Xを起動してsrc
フォルダまで移動し、make
を実行します。
C:\> cd vim\vim74\src
C:\> make -f Make_djg.mak
ビルドが始まるので完了するまでしばらく待ちます。なお、筆者の環境では1時間以上掛かりました……。
ビルドが終わったら、以下のファイルをC:\vim\vim74
へ移動してインストールは完了です。
C:\vim\vim74\src\*.exe
C:\vim\vim74\src\xxd\xxd.exe
_vimrcについて
MS-DOSのVimでは、以下の順番でvimrcが読み込まれます。なお、この情報は:version
で確認できます。
system vimrc file: "$VIM\vimrc"
user vimrc file: "$HOME\_vimrc"
2nd user vimrc file: "$HOME\vimfiles\vimrc"
3rd user vimrc file: "$VIM\_vimrc"
user exrc file: "$HOME\_exrc"
2nd user exrc file: "$VIM\_exrc"
なお、ここで$HOME
はC:
、$VIM
はC:\VIM
に対応しています。
DOSBox-XはホストOSで張ったシンボリックリンクを読むことができるので、以下のようにすればホストOSとvimrcを共用できます。
ただし、DOSBox-X側から_vimrcを編集するとシンボリックリンクがファイルで上書きされ、.vimrcとは別のファイルになってしまうので注意してください。
$ ln -s ~/.vimrc /path/to/drive_c/_vimrc
vimrcにMS-DOS固有の設定を記載する場合にはif has('dos32')
を使用してください。16bitのVimの場合はhas('dos16')
です。
番外編: ビルド済みバイナリを入手する
以上でMS-DOSでのVimのビルドについて一通り説明しましたが、ビルドするのが面倒な方は以下からビルド済みバイナリを入手することもできます。
vim online
Vimの公式サイトです。download : vim onlineに簡単な説明があります。
32bit版は以下の2つのファイルが最新です (本体とランタイムファイルをそれぞれ入手する必要があります)。
vim73_46d32.zip
vim73_46rt.zip
16bit版は以下が最新です。
vim71d16.zip
vim71rt.zip
いずれのファイルもこちらから入手することができます。
FreeDOS
FreeDOS 1.3に同梱されているVimが単体でも配布されています。バージョンは7.3aのようです。
参考にした記事やWebサイト