ページング(Paging)とは、コンソールなどで、画面の大きさに合わせて1画面分でスクロールを止め、キー入力などを使って、表示をさせるものだ。Windowsには、MS-DOS時代からのコマンドとしてmore.comがある。こうしたプログラムを「ページャー(Pager)」ともいう。
しかし、このmore.comは、日本語表示はシフトJISしか対応しておらず、UTF-8エンコードやPowerShell標準のUnicodeエンコード(UTF-16 LE)にも対応していない。このため、渡される文字エンコードによっては文字化けしてしまう。2024年にもなって、文字化けとはなんとも情けない話だ。そこで、この問題を考えてみることにした。
cmd.exeとmore.comの関係
MS-DOS時代からあるmore.comは、「C:\Windows\System32\more.com」が実体である。拡張子がcomになっているが、中身は、EXE(PE)形式である。MS-DOSでは、ファイルサイズが64KB以下に限定されるが、簡易な実行ファイル形式があり、それがCOM形式と呼ばれていて、拡張子が.comだった。
WindowsになりCOM実行ファイル形式はなくなり、そのうちCOMは、Component Object Modelのことを指すようになった。Microsoftはいつも略語を再利用する。その結果、古くからのユーザーほど混乱しやすくなるのは、なんとかしてほしいところだ。
more.comは、そもそもcmd.exeで使うことを想定しており、日本語はシフトJISしか表示できない。しかし、cmd.exe用に作られたWindowsに付属する多くのコンソールコマンドは、大抵の場合、シフトJISしか出力しないので、これでも問題はなかったのだ。
なお、Windowsのコンソールでは、実行ファイルの拡張子である「.exe」「.com」「.bat」は省略可能で、「more.com」は「more」で実行できる。
moreではなくlessを使う
そんなmore.comだが、後戻りできないし、内部で検索することもできない。仕様としてはMS-DOS時代のままである。実際には、MS-DOS初期のmore.comは、ファイルパスを引数にすることができない純粋なフィルタコマンドだった。このため、typeコマンドなどと合わせてページングしていた。
その点、現在のmore.comは、引数にファイルを指定することで、ファイル内容のページング表示ができる。この点では少しUnixのmoreに近づいた。
UnixやLinuxでは、moreではなくlessを使うことが多い。個人の好みにもよるが、多くのユーザーがページャーにlessを指定するのが一般的だろう。
lessは、moreという名前に「インスパイア」されて作られたコマンドである。多数のキー割当や設定項目があり、高性能なmoreとして動作する。現在Linuxで広く使われているのはGNUで開発されたlessである。
GNU lessはオープンソースであり、Windowsにも移植されている。wingetコマンドで入手が可能だ。wingetなら安心というわけではないが、少なくともよく分からない「無料プログラム」サイトからダウンロードするよりはマシと思う。とはいえ、インストールをするのは素性を確認してからだ。Windows用のGNU lessに関しては、GitHubの「jftuga/less」(https://github.com/jftuga/less-Windows)にページがあり、リリースノートなどは「Less」(https://greenwoodsoftware.com/less/)にある。これは、
winget show jftuga.less
で得られる情報である。インストールは、
winget install jftuga.less
でできる。
ただし、wingetで取得したパッケージには実行ファイル(less.exeとlesskey.exe)だけがある。前記のGitHubのreleaseからzipファイル(less-x64.zip)をダウンロードして、中にあるmanページ(*.manファイル)を取り出しておくといいだろう。拡張子はmanになっているが、整形されたテキストファイルになっている。
より簡易に、WSLのmanコマンド(man less)を使う方法もある。GNU lessは、比較的アップデートが頻繁である。しかし、LinuxディとスリビューションのLTS(Long Term Support)版では、重大なバグがない限り、開発時点で選択されたバージョンのlessに止まり続ける。
このため、WSLのUbuntuなどでもlessのバージョンが、wingetで導入したlessよりも古いバージョンになることがある。wingetでは、常に最新版のlessをインストールするからだ。
Windowsでlessを使う場合に注意が必要なのは、文字エンコードだ。less.exeの文字エンコードは、環境変数LESSCHARSETで指定する。シフトJISの場合には、「DOS」を指定する。
UTF-8がデフォルトの文字エンコードだが、LESSCHARSETに「utf-8」を指定することもできる。cmd.exeでも使うのであれば、環境変数の設定(「設定」→「システム」→「バージョン情報」→「システムの詳細設定」)で「DOS」を指定しておき、PowerShellのプロファイルで「utf-8」を指定する。
lessは、設定や起動オプションでさまざまな機能を利用できる。「--help」で簡易なオプションを表示でき、「man less」をインターネット検索すると、日本語man pageなどが見つかる。
行番号の表示(-Nオプション)や、表示対象が画面サイズ以下だった場合にページングしないで終了(-Fオプション)、UNIXのmoreのような詳しいプロンプト(-mオプション)などを指定すると便利。環境変数LESSで指定しておくことも可能だ。
この連載の記事
-
第460回
PC
Windowsでsftpを使う -
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 - この連載の一覧へ