2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VimAdvent Calendar 2024

Day 14

MS-DOSでVimをビルドする

Last updated at Posted at 2024-12-13

この記事を3行で要約

MS-DOSやそのエミュレータでVimをビルドするための情報についてまとめました。
MS-DOSでビルドできる最新のVimのバージョンは7.4.773です。
ビルドするのが面倒な場合は、7.3.46のビルド済みバイナリが配布されています。

エミュレータの準備

残念ながら筆者はMS-DOSが動作する実機を持っていないので、DOSBox-Xを利用します。
DOSVAXJ3Dosemu2でもビルド済みバイナリが動作することは確認していますが、ビルドは未検証です。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のソースをビルドするための下準備をしていきます。

~/.config/dosbox-x/dosbox-x.conf
[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です。

~/.dosboxj/dosboxj.conf
[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"

なお、ここで$HOMEC:$VIMC:\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サイト

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?