HXAVI(1)                                                              HXAVI(1)

NAME
       hxavi - vi と Vim ユーザのためのバイナリエディタ.

SYNOPSIS
       hxavi  [-a]  [-b]  [+[address]]  filename

DESCRIPTION
   1.ABOUT
       hxavi はバイナリファイルを,16進数のダンプリストとして表示し,編集操作を
       することが出来るエディタです. カーソル操作などのコマンドは vi(1),vim(1)
       に似せており,覚えやすくできています.
       もしvi や vim を使ったことがないなら, hxavi は使いにくいでしょう.

   2.OVERVIEW
       2.1.エディタの形式
           ファイルの内容を16進数及び対応するキャラクタでダンプリストとして表
           示します.   このダンプリストをスクロールさせ,その上をカーソルで自由
           に移動し,内容の修正・削除・挿入等を行なうことができます.

       2.2.動作する環境
           80桁以上のターミナルで動作しますが, UTF-8の環境専用です.

       2.3.viとの類似点と相違点
           コマンドの仕様はvi,vimになるべく似せています.  特に操作感に影響の大
           きい, カーソルの移動に関する部分については,  vi  のコマンドと同じに
           作ってあるので, ほとんどすぐに操作出来る筈です.
           しかしバイナリエディターでは,  主にテキストファイル以外が編集対象な
           ので, vi で操作単位として重要な, 文・単語・セクションなどの区切りは
           意味がありません. これらを前提としているコマンドはありません.
           その代わりに, 画面上のデータ1行分を'行'と見做しての操作があります.


   3.TERMINOLOGY
       これ以降, コマンド入力についての説明では以下の表記を用いて説明します.

       - スペースキー .............................. <spc>
       - タブキー .................................. <tab>
       - シフトキー+タブキー ....................... <shift+tab>
       - エンターキー .............................. <ent>
       - エスケープキー ............................ <esc>
       - バックスペースキー ........................ <bs>
       - インサートキー ............................ <ins>
       - デリートキー .............................. <del>
       - ホームキー................................. <home>
       - エンドキー................................. <end>
       - ページアップキー........................... <pgup>
       - ページダウンキー........................... <pgdn>
       - 矢印キー................................... <left>,<right>,
                                                     <up>,<down>
       - コントロールキーと共に a を押す場合 ....... ^A
       - 省略可能な部分は括弧で括って示す .......... [ ]
       - 同様のコマンドを列記する場合の区切り ...... |
       - 反対のコマンドを列記する場合の区切り ...... /

   4.START AND QUIT
       4.1.起動方法
           hxavi                             ... (1)
           hxavi filename                    ... (2)
           hxavi +[address] filename         ... (3)
           hxavi -a [+[address]] filename    ... (4)
           hxavi -b [+[address]] filename    ... (5)

           起動法(1)では起動方法の説明(usage)とプログラムのバージョンが表示さ
           れ,終了します.

           (2)では指定ファイルの先頭からのダンプリストが初期画面に表示され, コ
           マンド入力待ち状態になります. 通常の起動方法です.
           ファイルを複数個指定することは出来ません.

           (3)では,指定ファイルを最初に開いた際に, address  で指定した位置に移
           動します. address を省略して "+"のみ指定した場合は,ファイルの末尾に
           移動します.   address には16進数,10進数などが使えます. 記述方法の詳
           細は,7.1節を参照してください.

           (4)の"-a"オプションは,使用している端末ソフトウェアが代替スクリーン
           をサポートしている場合,その機能を有効にします.   その結果 hxaviコマ
           ンドはそれが終了した際に,端末での表示を起動前の状態に戻します.

           (5)の"-b"オプションは,メモリのサイズを超える巨大なファイルを開く際
           に指定します. ファイルの read / write に mmap(2) を使用しているため
           軽快に使用することが出来ますが, 編集に制約も発生します. 詳細は7.8節
           を参照してください.

       4.2.終了方法
           ZZ|ZQ|:q<ent>|:q!<ent>|:wq [newname]<ent>|:wq! [newname]<ent>
           が使えます. 詳細は後述しますが,viと同じ考え方で動作します.

   5.DESIGN OF SCREEN
       起動すると下のような画面が表示されます.  画面構成は,  上2行がファイル全
       体に関する情報を表示する領域,  その下の複数行がファイル内容をダンプする
       領域,  その下1行がコマンド入力行,その下1行がメッセージを表示する行です.
       オプションの設定によっては,  その下に現在示しているデータを10進数で解釈
       した数値を示します.

 ------------------------------------------------------------------------------
 ReadOnly NotSaved Modified [-b] [-rwxr-xr-x] [sym->   3] [2025-11-12 18:01:38]
 000001B3CF2/0000036255F, 50%,.......1785074/.......3548511     &#141;,U+00008D
 <COMMAND>  | +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F |0123456789ABCDEF
 000001B3CE0| C7 E8 8A 48 FE FF 48 8B 05 33 C7 1B 00 48 8B 40 |...H..H..3...H.@
 000001B3CF0| 38 48 8D 70 FF FF FF 48 3B 01 75 0E 48 8B BD 70 |8H.p...H;.u.H..p
 000001B3D00| FF FF FF 89 DE E8 45 51 FE FF E8 70 18 FE FF 85 |......EQ...p....
 000001B3D10| C0 74 4C 48 8B 05 05 C7 1B 00 48 8B 70 38 8B 58 |.tLH......H.p8.X
 000001B3D20| 40 48 8B 3D 97 C1 1B 00 BA 01 00 00 00 E8 DD 91 |@H.=............
 000001B3D30| FD FF 48 8B 0D 86 C1 1B 00 8B 49 24 8D 51 FE 83 |..H.......I$.Q..
                                  :(省略)
 000001B3E80| 08 48 8B 3D 97 C5 1B 00 48 83 C7 38 E8 CE 50 FE |.H.=....H..8..P.
 000001B3E90| FF 83 F8 FF 0F 84 7F FD FF FF 8D 43 FF 85 DB 89 |...........C....
 000001B3EA0| C3 0F 8F 58 FF FF FF E9 6D FD FF FF 48 8B 05 6C |...X....m...H..l
 000001B3EB0| C5 1B 00 4C 8B B5 38 FF FF FF 41 0F 10 06 0F 11 |...L..8...A.....
 (コマンド入力行)
 (メッセージ表示行)
  U08  [ 141]    U32         [ 4294930573]                      <Little Endian>
  S08  [-115]    S32         [     -36723]    F32[nan           ]
  U16[ 28813]    U64[   88744882012647565]    D64[+9.946970177023031e-303]
  S16[ 28813]    S64[   88744882012647565]    L80[+2.0933824499565909030e-3820]
  BIT[0 000111001110101]

            [0.000000100111011010010001111111111111111111111110111000010001101]

 ------------------------------------------------------------------------------

       5.1.ファイル情報の表示領域
           1行目にはファイルの状態,  "-b"オプションの有無,  ファイルのアクセス
           権,  ファイルのリンク数,  更新時刻が表示されます.  ファイルの状態に
           よって,  ReadOnly,  NotSaved,   Modifiedのステータスが表示されます.
           ファイルがシンボリックリンクである場合と,ハードリンクが2以上である
           場合は, 他に影響が及ぶ可能性があるため,リンク数を反転表示して注意を
           促します.  また,起動時に"-b"オプションを指定している場合,それを表示
           します.
           次の行は現在のカーソル位置のアドレス/ファイルの長さを16進数,10進数
           で常に示すとともに,カーソル位置のデータがUnicodeで解釈できる場合,そ
           のコード番号を表示します.
           次の行の先頭に現在の編集モードが, <COMMAND> / <REPLACE> / <INSERT.>
           のいずれであるか表示します.

       5.2.ファイル内容表示領域
           1行のアドレスゲージとその下のダンプリスト表示領域からなります.
           左11桁は番地を示し,  それに従ってデータが16進数で中央部に表示されま
           す.  またそのデータを文字コードと見なしたときのキャラクタによる表示
           欄が右端にあります.  キャラクタ表示欄では後述する':set encoding='オ
           プションで認識する文字コードを変更出来ます.

       5.3.コマンド入力行,メッセージ表示行
           ダンプリスト表示領域の1行下がコマンド入力行です.   ここでは,   パラ
           メータを持つコマンド等の入力を行なうために使用します.   更にその1行
           下がメッセージ表示行です.  エディタからの警告やメッセージを表示する
           ために使用されます.

       5.4.10進数表示
           カーソルがある場所のデータ内容を10進数で表示します.  1バイトから8バ
           イトまでの符号あり/符号なし整数と,4バイトから10バイトまでの浮動小数
           点数として解釈した場合の10進数値が示されます.

       5.5.ヘルプ画面
           後述する':help'コマンドによって, 画面全体が一時的にコマンドのヘルプ
           画面に移ります.
            'j'/'k'でスクロールし,'q'|'<esc>' の入力によって, もとの画面に戻り
           ます.

       5.6.マニュアル画面
           後述する':man'コマンドにて,man(1)で見られるマニュアルと同内容の情報
           を見ることが出来ます.
            'j'/'k'などでスクロールし,'q'の入力によって,もとの画面に戻ります.
           動作させるためには less(1) コマンドが必要です.

       5.7.カラーマップ画面
           後述する':cmap'コマンドにて,256色のカラーマップを見ることができま
           す.
            'j'/'k'などでスクロールし,'q'の入力によって,もとの画面に戻ります.
           動作させるためには less(1) コマンドが必要です.

   6.COMMANDS
       hxavi で使用出来るコマンドについて説明します.  以下のコマンドのうち, 説
       明の先頭に'* ' を付したものは vi(1),vim(1) のコマンドと名称・機能が異な
       るものです.

       6.1.画面スクロール,カーソル移動のためのコマンド
           データの表示範囲,  カーソルの位置を制御するコマンド群であり,   バッ
           ファのデータ内容には影響を与えません.

           (コマンド)(説明)

           h|^H|<bs>|<left>
                     カーソルを1バイト左へ移動します.
           l|<spc>|<right>
                     カーソルを1バイト右へ移動します.
           k|^P|<up> カーソルを1行上の同じ桁へ移動します.
           j|^N|<down>
                     カーソルを1行下の同じ桁へ移動します.
           0|^       カーソルをその行の左端のデータの位置へ移動します.
           $         カーソルをその行の右端のデータの位置へ移動します.
           fHH  ("HH"は16進数2桁の数字)
                     行内でHHを前方にサーチし,見つかったらその場所に移動しま
                     す.
           FHH  ("HH"は16進数2桁の数字)
                     行内でHHを後方にサーチし,見つかったらその場所に移動しま
                     す.
           tHH  ("HH"は16進数2桁の数字)
                     行内でHHを前方にサーチし,見つかったらその場所の直前に移動
                     します.
           THH  ("HH"は16進数2桁の数字)
                     行内でHHを後方にサーチし,見つかったらその場所の直後に移動
                     します.
           ;         行内のサーチの繰り返し.
           +|<ent>   カーソルを次の行頭へ移動します.
           -         カーソルを前の行頭へ移動します.
           H|<home>  カーソルをホームポジション(左上端)に移動します.
           M         カーソルを中央の行の左端に移動します.
           L         カーソルを画面の最下行の左端に移動します.
           <end>     カーソルを画面の最下行の右端に移動します.
           zt        カーソルがある行を最上端に移動します.
           zz        カーソルがある行を中央に移動します.
           zb        カーソルがある行を最下端に移動します.
           z<ent>
                     カーソルがある行を最上端に移動し,カーソルは左端に移動しま
                     す.
           z.
                     カーソルがある行を中央に移動し,カーソルは左端に移動しま
                     す.
           z-
                     カーソルがある行を最下端に移動し,カーソルは左端に移動しま
                     す.
           ^Y/^E
                     上(小さい番地の方向)/下(大きい番地の方向)へ1行スクロール
                     します.
           ^U/^D
                     上(小さい番地の方向)/下(大きい番地の方向)へ半ページ分スク
                     ロールします.
           ^B|<pgup> 前のページを表示します.
           ^F|<pgdn> 次のページを表示します.
           :go <目的番地><ent>    または
           :<目的番地><ent>
                     <目的番地>(16|10|8|2進)  が示すアドレスにカーソルを移動し
                     ます. 番地の記述方法は7.1 を参照してください.
           gg        ファイルの最上部の左端にカーソルを移動します.
           G         ファイルの最下部の左端にカーソルを移動します.
           /{pattern}<ent>
                     pattern (後述7.5.)で指定したデータを前方  (大きい番地の方
                     向)   にサーチします.   pattern  は偶数桁の16進数でもよい
                     し,'"'(ダブルクオート)で始まるテキスト列でもよいです.
                     pattern の後を '/' で括ってはいけません.
           /<ent>    以前に指定した pattern で前方へのサーチをくり返します.
           ?{pattern}<ent>
                     pattern  で指定したデータを後方(若い番地の方向)にサーチし
                     ます.
           ?<ent>
                     以前に指定した pattern で後方へのサーチをくり返します.
           /:{decimalnumber}<ent>
                     10進数を指定してその値のデータを前方にサーチします.  デー
                     タの種類は <tab>,<shift+tab>で選択出来ます.
           /:{decimalmin},{decimalmax}<ent>
                     2つの10進数を指定して2つの値の間にあるデータを前方にサー
                     チします.      浮動小数点数を指定してサーチする場合,2進数
                     と10進数との変換誤差があり,1つの値で一致させることは難し
                     いため,2つの値で範囲を指定したほうが良いです.
           ?:{decimalnumber}<ent>
                     10進数を指定してその値のデータを後方にサーチします.  デー
                     タの種類は <tab>,<shift+tab>で選択出来ます.
           ?:{decimalmin},{decimalmax}<ent>
                     2つの10進数を指定して2つの値の間にあるデータを後方にサー
                     チします.      浮動小数点数を指定してサーチする場合,2進数
                     と10進数との変換誤差があり,1つの値で一致させることは難し
                     いため,2つの値で範囲を指定したほうが良いです.
           n         直前に行なったサーチのくり返し(同方向).
           N         直前に行なったサーチのくり返し(逆方向).
           mx        (xはa-zの1文字) カーソルの位置にxという名前を付けます.
            'x       名前xの場所にジャンプし,左端に移動します.
           ` x       名前xの場所にジャンプします.


           主なコマンドの動きを図でまとめると以下のようになります.

                                                    ^
                                ^Y       ^ ^U       | ^B|<pgup>
              +---------------^----------|----------|--------------+
              | H|<home><--                                        |
              |                          k|^P                      |
              | -       <--               ^                        |
              | 0|^     <--   <bs>|^H|h <-X-> l|<spc>          ->$ |
              | +|<ent> <--               v                        |
              |                          j|^N                      |
              | M       <--                                        |
              |                                                    |
              |                  -->:g address<ent>                |
              |                                                    |
              |                                                    |
              |                                                    |
              | L       <--                              --> <end> |
              +---------------v----------|----------|--------------+
                                ^E       v ^D       | ^F|<pgdn>
                                                    v


       6.2.バッファの内容を変更するコマンド
           データバッファに対する書き換え操作です.

           (コマンド)(説明)
           i|<ins>
                     挿入モードに入ります. モード表示は <INSERT> に変わります.
                     中で使用できるコマンドは, 以下のとおりです.

                     (コマンド)(説明)

                     !       * モード内のヘルプ画面を表示. '<esc>','q'キーの入
                               力で元の画面へ復帰します.

                     0〜9|a〜f|A〜F
                               16進数値を入力します.

                     "{string}<ent>
                             *  stringで入力した文字列をそのままデータとして挿
                               入します.

                     :{decimalnumber}<ent>
                             * decimalnumber  で入力した10進数を解釈してデータ
                               として挿入します.    入力した10進数をどのデータ
                               型(整数/浮動小数点数,符号の有/無,データ長)に解
                               釈するかは,  <tab>,<shift+tab>  で選択出来ます.
                               <tab>,<shift+tab>は数値の入力途中でも使用出来ま
                               す.

                     #{binarynumber}<ent>
                             *  binarynumber で入力した2進数を解釈してデータと
                               して挿入します.  入力した2進数をどのデータ型(整
                               数/浮動小数点数,符号の有/無,データ長)に解釈する
                               かは, <tab>,<shift+tab>  で選択出来ます.   :set
                               decimalview を設定しておくことが必要です.

                     h|^H|<bs> 後退取り消し.

                     ^L        画面の再表示をします.

                     <esc>     モードを終了します.

           I         行の先頭に移動して,挿入モードに入ります.
           a         カーソルの1バイト先に移動して,挿入モードに入ります.
           A         行末に移動して,挿入モードに入ります.
           o         次の行の先頭に移動して,挿入モードに入ります.
           O         行の先頭に移動して,挿入モードに入ります.

           R
                     上書きモードに入ります. モード表示は <REPLACE> に変わりま
                     す. 中で使用できるコマンドは, 以下のとおりです.

                     (コマンド)(説明)

                     !       * モード内のヘルプ画面を表示. '<esc>','q'キーの入
                               力で元の画面へ復帰します.

                     0〜9|a〜f|A〜F
                               16進数値を入力します.

                     "{string}<ent>
                             *  stringで入力した文字列をそのままデータとして上
                               書きします.

                     :{decimalnumber}<ent>
                             * decimalnumber  で入力した10進数を解釈してデータ
                               として上書きします.  入力した10進数をどのデータ
                               型(整数/浮動小数点数,符号の有/無,データ長)に解
                               釈するかは,  <tab>,<shift+tab>  で選択出来ます.
                               <tab>,<shift+tab>は数値の入力途中でも使用出来ま
                               す.

                     #{binarynumber}<ent>
                             * binarynumber  で入力した2進数を解釈してデータと
                               して挿入します.  入力した2進数をどのデータ型(整
                               数/浮動小数点数,符号の有/無,データ長)に解釈する
                               かは,  <tab>,<shift+tab>  で選択出来ます.  :set
                               decimalview を設定しておくことが必要です.

                     h|^H|<bs> 後退取り消し.

                     ^L        画面の再表示をします.

                     <esc>     モードを終了します.

           x|<del>   カーソル位置の1バイトを削除します.

           X         カーソル位置の直前の1バイトを削除します.

           rHH       カーソル位置の1バイトのデータをHHにします.

           y{motion}
                     現在の位置からmotionで移動する場所までのデータをコピーし
                     ます.

           yy|Y      現在の1行分のデータをコピーします.

           d{motion}
                     現在の位置からmotionで移動する場所までのデータを削除しま
                     す

           dd        現在の1行分のデータを削除します.

           D         カーソル位置から行末までのデータを削除します.

           p
                     コピーまたは削除したデータをカーソル位置の直後に挿入しま
                     す.

           P
                     コピーまたは削除したデータをカーソル位置の直前に挿入しま
                     す.

           .         直前の編集コマンドを繰り返します.

           :i {開始番地},{終了番地},{目的番地}<ent>
                   *   {開始番地}から{終了番地}までのデータをコピーして{目的番
                     地}に挿入します.   {目的番地}は, {開始番地}〜{終了番地}の
                     外になければなりません. 指定範囲には{開始番地}を含み, {終
                     了番地}を含みません.  番地の入力方法は後述 7.1 と 7.3. を
                     参照して下さい.

           :d {開始番地},{終了番地}<ent>
                   * {開始番地}から{終了番地}までのデータを削除します.  指定範
                     囲には{開始番地}を含み, {終了番地}を含みません.  番地の入
                     力方法は後述 7.1 と 7.3  を参照して下さい.

           u
                     バッファ内容を変更するコマンドについて,  その変更を元に戻
                     します(undo). 回数に制限はありません.

           ^R
                     バッファ内容を変更するコマンドについて, undo で遡った変更
                     を再度やり直します(redo). 回数に制限はありません.

       6.3.ファイルのセーブと終了のためのコマンド

           (コマンド)(説明)

           ZZ
                     エディターを終了します.  読み込んだファイルに変更が加えら
                     れている場合にだけ, 書出しを行なってから終了します.

           ZQ        書き出しを行わずエディターを終了します.

           :w [{altname}]<ent>
                     ファイルへの書出しを行ないます.  エディターは編集を続行し
                     ます.         altnameが指定されていれば元のファイルではな
                     くaltnameに書き出します.

           :w! [{altname}]<ent>
                     ファイルへの強制書出しを行ないます.  エディタは編集を続行
                     します.

           :q<ent>
                     編集キャンセル + エディター終了.  ファイルの変更があれば,
                     その旨の警告を出すのみで終了しません.

           :q!<ent>
                     編集キャンセル + エディター終了.   ファイルの変更について
                     チェックをせずに終了します.ZQと同じです.

           :wq [{altname}]<ent>
                     ファイルへの書出し  + 終了.  書出しが失敗した場合は終了し
                     ません.

           :wq! [{altname}]<ent>
                     ファイルへの書出し + 終了.

       6.4.その他のコマンド

           (コマンド)(説明)

           ^L        画面の再描画をします.

           ^G        編集中のファイル名を表示します.

           ={formula}<ent>
                   * formula(数式)を計算して結果を表示します. 整数(16進数,10進
                     数,8進数,2進数)の加減乗除と余り算が出来ます.   括弧を使用
                     することも出来ます. 整数の記述方法は 7.3 を参照してくださ
                     い.

           :!{command}<ent>
                     シェルを起動して,  command を実行します.<ent>キー等の入力
                     で元の画面に復帰します.

           :bytemap<ent>
                   * 画面を一旦切り替えて,  データをグラフィカルなバイトマップ
                     ビューで表示します.  中で使用出来るコマンドは以下のとおり
                     です.

                     (コマンド)(説明)

                     ^F/^B|^D/^U|^E/^Y|j/k|^N/^P|<pgdn>|<pgup>|<down>|<up>
                               表示をスクロールします.
                     +/-       1行に表示するバイト数を増/減します.
                     (/)
                               1行に表示しているデータ列を左/右にローテートし
                               ます.
                     <tab>/<shift+tab>
                               以下のモードを切り替えます.
                               - 0x00     を青色の点で表示するモード
                               - 0x01-0x1fを水色の点で表示するモード
                               - 0x20-0x7fを赤い点で表示するモード
                               - 0x80-0xffを黒い点で表示するモード
                     ^L
                               画面の再表示をします.
                     q|<esc>
                               バイトマップビューを終了して,  もとのダンプ画面
                               に戻ります.
                     g
                               バイトマップビューを終了して,  ダンプ画面に戻り
                               ますが,その際ビューの左上のアドレスにジャンプし
                               ます.
           :bitmap<ent>
                   * 画面を一旦切り替えて,  データをグラフィカルなビットマップ
                     ビューで表示します.  中で使用出来るコマンドは以下のとおり
                     です.

                     (コマンド)(説明)

                     ^F/^B|^D/^U|^E/^Y|j/k|^N/^P|<pgdn>/<pgup>
                               表示をスクロールします.
                     +/-       1行に表示するバイト数を増/減します.
                     (/)
                               1行に表示しているデータ列を左/右にローテートし
                               ます.
                     </>
                               1行に表示するバイト数が画面の幅を超える場合,画
                               面を左右にシフトします.
                     zt/zz/zb
                               カーソルがあるラインを最上行/中央/最下行に移動
                               します.
                     z<ent>/z./z-
                               カーソルがあるラインを最上行/中央/最下行に移動
                               し,カーソルは左端に移動します.
                     j/k|h/l|H/M/L|0/$|^H|<bs>|<left>|<right>|<down>|<up>
                               カーソルを移動します.
                     U         画像の上下を反転します.
                     W         画像の白黒を反転します.
                     s/r
                               カーソルの場所の1ビットのデータをセット/リセッ
                               トします.
                     u         1ビットのセット,リセットを元に戻します.
                     ^R        1ビットのセット,リセットをやり直します .
                     ^L        画面の再描画をします.
                     q|<esc>
                               ビットマップビューを終了して,  現在カーソルが表
                               示しているアドレスにジャンプします.

           :cmap<ent>
                   * エディタで使用出来る256色の見本を表示します. ここで示され
                     る各色の色番号は,  :set color コマンド, ~/.hxavirc ファイ
                     ル内で使用出来ます.  今では大抵の端末で使用出来ると思われ
                     るANSI標準の256色を,  よくあるRGB別ではなく,  HSV色空間で
                     ソートした結果で並べていますので,  目的の色が見つけやすい
                     はずです.
                     表示にless(1)を使用しているので,番号のサーチが出来ます. q
                     または :q で表示を終了します.

           :file [{newname}]<ent>
                     ファイル名を newname  に変更します.以後ファイルのセーブを
                     行なう際に, この名前が使われます.  newname を指定しなけれ
                     ば現在のファイル名を表示します(^Gと同じ).

           :help<ent>
                   *    画面を一旦切り替えて,    コマンドの一覧表を表示します.
                     'q'キーの入力で, 元の画面に復帰します.

           :histogram<ent>
                   * 画面を一旦切り替えて,  データの値(0x00~0xff)の分布をグラ
                     フィカルなヒストグラムで表示します.  中で使用出来るコマン
                     ドは以下のとおりです.

                     (コマンド)(説明)
                     h/l       ヒストグラムを左/右に移動します.
                     j/k       ヒストグラムの縦軸を拡大/縮小します.
                     q|<esc>   ヒストグラム表示を終了します.

           :logo<ent>
                   * 本プログラムのロゴとバージョンを表示します.

           :man<ent>
                   *   本プログラムのオンラインマニュアルを表示します.    表示
                     にless(1)を使用しているので,テキストのサーチができます.
                     qや:qで終了します.

           :set<ent>   または
           :set all<ent>
                     :set で指定できるオプションの現在値の一覧を表示します.

           :set ambiwidth[=(single|double)]<ent>
                     UTF-8の文字のうち,文字幅が曖昧とされている(ambiguous
                     width)文字を半角/全角にて表示します.   日本語で使用する場
                     合 double が適切です.  パラメータを省略すると現在の設定値
                     が表示されます.

           :set biblen[=N]<ent>
                   * :bi[tmap]コマンドで表示されるビットマップ上のカーソル点滅
                     間隔をミリ秒で指定します.   (LENgth   of   cursor   Blink
                     Interval on Bitmap screen)

           :set bidlen[=N]<ent>
                   *  通常のコマンドモードで表示されるカーソル点滅間隔をミリ秒
                     で指定します. (LENgth of cursor  Blink  Inerval  on  Dump
                     screen.)

           :set bytes[=N]<ent>
                   * ダンプリストの1行に表示するバイト数をNバイトに変更します.
                     最小値は4です. パラメータを省略すると, 現在のダンプリスト
                     のバイト数を表示します.

           :set cmdenter[=commands]<ent>
                   * コマンド入力行に入った際に実行したいコマンドを指定します.
                     IMEの制御を行うことを想定しています.

           :set cmdleave[=commands]<ent>
                   * コマンド入力行から出る際に実行したいコマンドを指定します.
                     IMEの制御を行うことを想定しています.

           :set color<ent>
                   * エディタの色使いについて,現在の設定値を示します. 色が使用
                     される場所は,  bitmap, bytemap, histogram, logo, ダンプリ
                     スト上のmark, サーチのハイライトです.  端末に色を扱う能力
                     があれば, それぞれの色の見本を直接示します.

           :set color {place} {part}=N<ent>
                   *  エディタの色使いについて,設定値をNに更新します. {place},
                     {part}で使用出来る場所は以下のリストのとおりです.

                     bitmap scale    :bitmapの目盛りの色
                     bitmap data     :bitmapのデータの色
                     bytemap scale   :bytemapの目盛りの色
                     bytemap zero    :bytemapの0x00のデータの色
                     bytemap ctrl    :bytemapの0x01-0x1F,0x7Fの色
                     bytemap ascii   :bytemapの0x20-0x7Eの色
                     bytemap high    :bytemapの0x80-0xFFの色
                     histogram scale :histogramの目盛りの色
                     histogram data  :histogramのデータの色
                     logo letter     :logoの文字の色
                     logo cat        :logoの猫の色
                     dump mark       :mxコマンドでつけるmarkの色
                     search hl       :サーチのハイライトの色

                     N にはANSI標準の256色のカラー番号を指定します. 各 {place}
                     {part} は他と区別できる範囲で短縮できます. 例えば,

                     :set color bytemap scale=23

                     は,

                     :s co by s=23

                     と入力すれば有効です.  ただ,:cmapの色見本を見ながら入力す
                     ることが出来ず, このインターフェスは使いづらいので, :cmap
                     で色を見ながら,  テキストエディタで ~/.hxavirc に設定を記
                     入した方が良いでしょう.


           :set [no]decimalview<ent>
                   * カーソルの位置のデータを複数のデータ形式,データ長で解釈し
                     た数値を,10進数で表示します.
                     表示の種類は,8ビット符号無し整数(U08), 符号あり整数(S08),
                     16ビット符号無し整数(U16), 符号あり整数(S16),  32ビット符
                     号無し整数(U32),   符号あり整数(S32),  64ビット符号無し整
                     数(U64),  符号あり整数(S64),   32ビット浮動小数点数(F32),
                     64ビット浮動小数点数(D64), 80ビット浮動小数点数(L80)です.
                     上記いずれかのデータをビット表現した結果も合わせて表示し
                     ます.      ビット表現でどのデータを表示するかは,<tab>キー
                     や<shift+tab>キー押下により選択出来ます.

           :set encoding[={name}]<ent>
                     キャラクタ表示をする際にデータを解釈するエンコーディング
                     を指定します.  パラメータを省略すると, 現在の設定値と選択
                     可能なエンコーディングのリストを表示します.
                     対応しているエンコーディング名とその省略名は下記のとおり
                     です.

                     utf-8             (u)
                     euc-jis-2004      (e)
                     shift_jis-2004    (s)
                     iso-2022-jp-2004  (j)
                     iso-8859-1        (i)
                     utf-16le          (ul)
                     utf-16be          (ub)

           :set endian[=(little|big)]<ent>
                   * decimalview  でデータを解釈する際のエンディアンを指定しま
                     す.

           :set [no]flash<ent>
                   *   不可能な動作を行った際,  画面を一瞬反転させて警告を行う
                     (visible bell) かどうかを指定します.

           :set helplang[=(ja_JP|en_US|...)]<ent>
                     ヘルプやメッセージの表示言語を選択します.  パラメータを省
                     略すると,  現在の設定値と選択可能な言語のリストを表示しま
                     す.

           :set [no]hideescseq<ent>
                     キャラクタを iso-2022-jp-2004 で表示する場合,  エスケープ
                     シーケンスの部分はキャラクタ表示をしない方がダンプリスト
                     が見やすくなります.  このオプションを設定すると, エスケー
                     プシーケンス部分のデータを空白表示にします.

           :set hxaviend[=commands]<ent>
                   *  hxaviを終了する際に実行したいコマンドを指定します. IMEの
                     制御を行うことを想定しています.

           :set lines[=N]<ent>
                     ダンプリストの表示領域をN行に変更します.   最小値は3です.
                     パラメータを省略すると,  現在のダンプリストの行数を表示し
                     ます.

           :set ttimeoutlen[=N]<ent>
                     特殊なキー入力を行い,エスケープシーケンスが発生する際,そ
                     の完了を待つ時間をミリ秒で指定します.

           :set [no]usecolor<ent>
                   * サーチ結果の強調や,ビットマップ,ヒストグラムの表示で,  色
                     を使用するかどうか指定します.

           :set [no]wrapscan<ent>
                     patternのサーチを行う際, ファイルの終端や先頭を越えてサー
                     チを続けるかどうか指定します.

   7.MISCELLANEOUS
       7.1.各コマンドのカウントについて
           多くのコマンドでコマンド入力の直前にに数字を入力すると,コマンドをそ
           の回数繰り返します.カウントには10進数,16進数,8進数,2進数が使えます.

           -   10進数はそのままの数字列 (0〜9)を入力する.
               例:   180, 32767
           - * 16進数は16#に続いて数字列 (0〜9,a〜f,A〜F) ,最後に#を入力する.
               例:   16#ABC#,  16#123f#
           - * 8進数は8#に続いて数字列 (0〜7) を入力する.
               例:   8#1777, 8#0123
           - * 2進数は2#に続いて数字列 (0〜1) を入力する.
               例:   2#10101011

           カウントの入力時には,画面下部に認識した数値が表示されます.

           コマンドモードでのカウント:
               カウントが有効なコマンド:
                   h ^H <bs> <left> l <spc> <right> k ^P <up> j ^N <down> + -
                   <ent> H L fHH FHH tHH THH ; / ? n N ^Y ^E ^U ^D ^B <pgup>
                   ^F <pgdn> i I a A o O r R x <del> X d dd D y yy Y p P
                   . u ^R
               カウントが無効なコマンド:
                   "x 0 ^ $ <home> M <end> gg G 'x `x z<ent> z. z- zt zz zb
                   mx ^L ^G ZZ ZQ ! <tab> <shift+tab> : = <esc>
           :bitmap 内でのカウント:
               カウントが有効なコマンド:
                   ^F <pgdn> ^B <pgup> ^D ^U ^E ^Y ^N ^P < > ( ) + -
                   h <left> ^H <bs> l <right> j <down> k <up> H L u ^R
               カウントが無効なコマンド:
                   ^C zt zz zb z<ent> z. z- 0 $ M s r U W ^L q <esc>
           :bytemap 内でのカウント:
               カウントが有効なコマンド:
                   ^F <pgdn> ^B <pgup> ^D ^U ^E ^Y ^N ^P ( ) + -
                   j <down> k <up>
               カウントが無効なコマンド:
                   ^C <tab> <shift+tab> ^L g q <esc>
           :histogram 内でのカウント:
               カウントが有効なコマンド:
                   h <left> l <right> j <down> k <up>
               カウントが無効なコマンド:
                   q <esc>

       7.2.コマンドの短縮について
           ":"で始まるコマンドで使用する単語は,他のコマンドと区別出来る最低限
           を入力すれば判別してくれます.例えば下記のとおりです.

           ":set ambiwidth=double<ent>" は, ":s am=d<ent>" で十分です.

           ":set nowrapscan<ent>"       は, ":s now<ent>"  で十分です.

       7.3.数式の入力について
           :i, :d, :g, = の各コマンドのパラメータには数式を書くことが出来ます.
           数式では加減乗除と余り算,括弧が使えます.      数式中では16進数,10進
           数,8進数,2進数が使用出来ます. それぞれの数字の入力方法は7.1のカウン
           トと同じです.
           また,現在カーソルがあるアドレスを'.'(ドット)で表すことが出来ます.

           例:   =(16#7f+8)*27%16<ent>

           例:   :i .,.+16#100,.+16#200<ent>

           例:   :g 16#ab00+128<ent>


       7.4.レジスタについて
           コピー,削除,貼り付けの各コマンド(y yy d dd p P)ではコマンドの前にレ
           ジスタを指定出来ます.
           レジスタには, ["a] から ["z]  の26個の名前付きレジスタと,名前を指定
           しない場合に使われる無名レジスタがあります.


           - レジスタを指定しないと,コピーしたデータや削除したデータは無名レジ
             スタに入ります. そのデータを貼り付ける際は,レジスタの指定はいりま
             せん.

             例: 10yy{motion}p :
                   10行分のデータを{motion}で移動した先にコピーする.

           - レジスタを指定すると,コピーしたデータや削除したデータは無名レジス
             タとともにに名前付きレジスタにも入ります.  そのあと挿入削除など編
             集を行っても名前付きレジスタのデータは保存されます.

             例: "a10yy(この間いろいろな編集){motion}"ap :
                   10行分のデータを{motion}で移動した先にコピーする.

       7.5.サーチコマンドにおけるpatternの指定方法について
           サーチコマンドで指定出来るデータは,

           - 16進数列とリテラル文字列および両者の混合
           - データ長を決めた上で指定した10進数(1つまたは2つ)

           のいずれかです.
           16進数列は1バイトを2ケタの数字で表わし,  リテラル文字列は両端をダブ
           ルクオート(")で囲んで指定します.
           両者は交互に1行以内でいくつでも並べられます.

           /<"リテラル"><16進数><"リテラル"><16進数>...
           ?<16進数><"リテラル"><16進数><"リテラル">...

           正規表現はサポートしていないので,  ダブルクオート以外のメタキャラク
           タはありません.  サーチ出来るのは入力したとおりの固定的なデータ列で
           す.
           16進数列では1バイトが2桁なので,偶数桁を正しく入力して, 整数バイトを
           指定しなければなりません.
           入力データ中に空白がある場合は,ダブルクオートで囲んでください.   ダ
           ブルクオート自身をサーチしたい場合には,  16進数の22がアスキーコード
           で(")を表わすので16進数で指定すれば, サーチできます.

           例: /"Hello World"<ent>
                 [Hello World]  という文字列を前方サーチする.

           例: /22"Hello World"22<ent>
                 ["Hello World"] という文字列を前方サーチする.

           例: ?1b 28 42<ent>
                 iso-2022-jp* のテキスト文書で, ASCII文字列の先頭を後方に
                 サーチする.

           例: /:3.141592,3.141593<ent>
                 データ型がF32(float32bit),D64,L80のいずれかである場合:
                 3.141592 以上 3.141593 以下のデータを前方にサーチする.

       7.6.色にかかわる環境変数
           多くの環境で,環境変数TERMを"xterm"と設定して端末を使用している方が
           多いと思いますが、このxtermは色を8色しか使用できない設定になってい
           ます.        もしそれにもかかわらす,":cmap"で起動するカラーテーブル
           の256色が,ちゃんと区別されて見えるようであれば,環境変数TERM
           を,"xterm-256color" に変更すれば, hxaviでも任意の色を使用することが
           出来るはずです.

       7.7.cmdenter,cmdleave,hxaviendの使用方法について
           コマンド入力行で IME を利用してマルチバイト文字を入力した場合, そこ
           から復帰するときに IME を自動的にオフに出来ると, エディタの使い勝手
           が向上します.
           cmdenter,cmdleave,hxaviend を使用すると, この動作が可能となります.

           - fcitx を使用している場合の設定例:

               :set cmdleave=fcitx-remote -c >/dev/null 2>&1

           - fcitx5 を使用している場合の設定例:

               :set cmdleave=fcitx5-remote -c >/dev/null 2>&1

           - ibus-mozc を使用している場合の設定例:

               (日本語キーボードの場合)
               :set cmdenter=ibus engine mozc-jp      >/dev/null 2>&1
               :set cmdleave=ibus engine xkb:jp::jpn  >/dev/null 2>&1
               :set hxaviend=ibus engine mozc-jp      >/dev/null 2>&1

               (英語キーボードの場合)
               :set cmdenter=ibus engine mozc-jp      >/dev/null 2>&1
               :set cmdleave=ibus engine xkb:us::eng  >/dev/null 2>&1
               :set hxaviend=ibus engine mozc-jp      >/dev/null 2>&1

           これらの設定は .hxavirc に書いておくことが出来ます. .hxavirc の中で
           は, 先頭の':'(コロン)は不要です.


           cmdenter が動作するタイミングは下記のとおりとなります.

           - i や R コマンドで文字列入力のため " をタイプした直後
           - / や ? コマンドで文字列入力のため / ? /" ?" をタイプした直後

           cmdleave が動作するタイミングは下記のとおりとなります.

           - コマンド入力行から抜けるすべての場合
           - 一般的なコマンド入力で : をタイプした直後
           - i や R コマンドで10進数入力のため : をタイプした直後
           - i や R コマンドで2進数入力のため # をタイプした直後
           - / や ? コマンドで10進数入力のため /: ?: をタイプした直後
           - 数式入力で = をタイプした直後

       7.8.-b オプションでの巨大ファイルの取扱いについて
           hxavi は通常は対象ファイルをメモリ上に全て読み込み,ファイルの編集作
           業はメモリ上で実施します.  しかし使用出来るメモリのサイズを超える巨
           大なファイルを扱う場合,   この方法では動作が極端に遅くなってしまい,
           使用に耐えません.
           そのため -b オプションでは mmap(2) というシステムの機能を使用し, 表
           示・編集を行っているごく一部の範囲のデータだけを参照/変更すること
           で, 動作が遅くなることを回避しています.
           この方法では,  データの参照と上書き修正については高速な動作が可能で
           すが、 ファイルの長さを変更する挿入・削除・追記を行おうとするとファ
           イルの広範囲のデータへのアクセスや書き換えが発生してしまい,  極端に
           動作が遅くなるため実用になりません.
           このため, -b オプションでは下記のとおり使用出来るコマンドが制限され
           ます.

           - 使用出来ない編集コマンド:
              i | I | a | A | o | O | x | X | d | dd | D | p | P | y | yy | Y |
              :insert | :delete

           - 使用可能な編集コマンド:
              R | r | . | u | ^R

           - 使用可能だが長い時間がかかるコマンド:
              / | ? | n | N | :histogram |
              :wq! altname | :wq altname | :w! altname | :w altname

           - その他の使用出来ないコマンド:
              :file newname

           また,編集の途中で不測のタイミングで編集中のファイルへの実際の書き込
           みが発生するため, 編集途中で同期保存せずに終了することは出来ません.

           - 禁止される終了方法:
              Modifiedが点灯している状態での
              :wq! altname | :wq altname | :q! | :q | ZQ

           - 許可される終了方法:
              :wq! | :wq | ZZ

             (undoで最初に戻るか,:w を実施するなどして,)
              Modifiedが点灯していない状態での
              :wq! altname | :wq altname | :q! | :q | ZQ

       7.9.個人設定ファイル (~/.hxavirc) について
           ":set"  コマンドでは  hxavi  の動作にかかわる様々なオプションのパラ
           メータを設定することが出来ますが,この設定値はホームディレクトリの
           ファイル ".hxavirc" にあらかじめ書いておくことで,コマンドの起動時に
           いつもその値を有効にすることが出来ます.
           このファイル内では, コマンドの最初の":" は必要ありません.
           このファイルのサンプルは,後述するドキュメントのディレクトリにありま
           す.


ENVIRONMENTS
       端末のエンコーディングはUTF-8専用です.

       環境変数:TERMはxterm-256color を推奨します.


FILES

    (FreeBSD)
       /usr/local/bin/hxavi               実行形式
       /usr/local/share/doc/hxavi/*       ドキュメント. 個人設定ファイルのサン
                                          プルもここにあります.
       /usr/local/lib/hxavi/hxavi*/*      各種リソース.
       ~/.hxavirc                         個人設定ファイル.

    (Ubuntu)
       /usr/bin/hxavi                     実行形式
       /usr/share/doc/hxavi/*             ドキュメント. 個人設定ファイルのサン
                                          プルもここにあります.
       /usr/share/hxavi/hxavi*/*          各種リソース.
       ~/.hxavirc                         個人設定ファイル.

VERSION
       バージョンは,コマンド名hxaviだけで起動した場合に表示されます.

SEE ALSO
       vi(1), vim(1), less(1), ncurses(3)

BUGS
       - 使用出来る端末の環境はUTF-8だけです.
         コントロールコードのキャラクタ表示,  ビットマップやヒストグラムのグラ
         フィック表示などにlaten1や日本語以外の文字を使用しているためです.  但
         し,  キャラクタで表示出来るデータのエンコーディング・スキームはこれに
         限りません.

       - 通常ファイル以外(ディレクトリ,  デバイスファイル等)は読み書きが出来ま
         せん.

       - 扱えるファイルのサイズの論理的上限は16テラバイト(0x100000000000バイ
         ト= 17,592,186,044,416バイト)です. これは画面に表示出来るアドレスの桁
         数による制限です.

       - ビットマップビューやヒストグラムには, UnicodeのU+2800~U+28ff(Braille
         Patterns:点字パターン)を使用しています.  これら文字のデザインによって
         は, きれいに表示されない場合があるかもしれません.

AUTHOR
       佐藤道弘, "Michihiro Satoh", <satoumc(at_sign)hxavi.net>
       https://hxavi.net/

COPYRIGHT
       いわゆる2項BSDライセンスで提供します.  このプログラムは役立つことを意図
       して作成されていますが無保証です. 著作権は留保しますが, 利用/改変は自由
       です.  詳細はドキュメントのディレクトリの"COPYRIGHT" を参照してください.

 hxavi-1.2.0.20260301               2026-03-01                           HXAVI(1)