HXAVI(1) HXAVI(1)
NAME
hxavi - A binary editor for vi and Vim users
SYNOPSIS
hxavi [-a] [-b] [+[address]] filename
DESCRIPTION
1.ABOUT
Hexvi is a binary editor which shows binary files as dumplist of
hexadecimal numbers, and user can edit binary files. As commands about
cursor movements are almost similar to vi(1) or vim(1), it is easy to
remember.
It must be hard to use if you don't have any experience of vi or vim.
2.OVERVIEW
2.1.System of the editor
It displays the contents of file using hexadecimal numbers and
corresponding characters. Users can scroll this dumplist, and move
cursor freely on it, change, delete and insert the contents.
2.2.Available environments
It works on the terminals which have more than or equal to 80
columns, but only for the envrironments of UTF-8.
2.3.Similarities and differences with vi
The command specifications are as similar as possible to vi and
vim. In particular, the cursor movement, which has a large impact
on the user experience, is the same as vi commands, so you should
be able to operate it almost immediately.
But the units which are important when using vi, like sentence,
word, secton have no meaning for binary editor because the object
treating in binary editor is usually not text files. There are no
commands to process these units.
There are some operations for the line on the screen on the other
hand.
3.TERMINOLOGY
Next notations are used in the explanetions about commands from here.
- Space key ................................. <spc>
- Tab key ................................... <tab>
- Shift+Tab key ............................. <shift+tab>
- Enter key ................................. <ent>
- Escape key ................................ <esc>
- Backspace key ............................. <bs>
- Insert key ................................ <ins>
- Delete key ................................ <del>
- Home key .................................. <home>
- End key ................................... <end>
- PageUp key ................................ <pgup>
- PageDown key .............................. <pgdn>
- Arrow keys ................................ <left>,<right>,
<up>,<down>
- Press A with Control key .................. ^A
- Omissible parts ........................... [ ]
- Separator of similar commands ............. |
- Separator of opposit commands ............. /
4.START AND QUIT
4.1.How to start
hxavi ... (1)
hxavi filename ... (2)
hxavi +[address] filename ... (3)
hxavi -a [+[address]] filename ... (4)
hxavi -b [+[address]] filename ... (5)
In the startup method (1), the explanation of the startup method
(usage) and the version of the program are displayed, and the
program ends.
In (2), the dump list from the beginning of the specified file is
displayed on the initial screen, and the command input wait state
is displayed. This is the normal startup method.
You cannot specify multiple files.
In (3), the cursor will be moved to the position specified by
address when the specified file is first opened. If you omit
address and specify only "+", the cursor will be moved to the end
of the file. Address can be a hexadecimal or decimal number. For
details on how to write it, see Section 7.1.
The "-a" option (4) enables alternate screen if your terminal
software supports it. As a result, when the hxavi command finishes,
the terminal display returns to the state it was in before it was
started.
The "-b" option (5) is used when opening a large file that exceeds
the memory size. Because mmap(2) is used to read and write the
file, it can be used without slowing down the operation, but it
also imposes restrictions on editing. For details, see Section 7.8.
4.2.How to end
You can use ZZ|ZQ|:q<ent>|:q!<ent>|:wq [newname]<ent>|:wq!
[newname]<ent>.
The details will be described later, but it works in the same way
as vim.
5.DESIGN OF SCREEN
When you start it, the following screen will be displayed. The top two
lines are an area that displays information about the entire file, the
lines below that are an area for dumping the file contents, a line beow
that is a command input line, and a line below that is message display
line. Depeiding on the option settings, a decimal interpretation of
the currently displayed data may be displayed below that.
------------------------------------------------------------------------------
ReadOnly NotSaved Modified [-b] [-rwxr-xr-x] [sym-> 3] [2025-11-12 18:01:38]
000001B3CF2/0000036255F, 50%,.......1785074/.......3548511 ,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..
:(omit)
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.....
(Command input line)
(Message display line)
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.File information display area
The first line shows the file status, whether the "-b" option is
used, the file permissions, number of file links, and modification
time. Depending on the status of the file, the status of
"ReadOnly", "NotSaved", "Modified" will be displayed. If the file
is a symbolic link or if the hard link is 2 or more, it may affect
other files, so the number of links is highlighted to alert you.
The next line always shows the address / file length of the current
cursor position in hexadecimal and decimal. If the data at the
cursor position can be interpreted in Unicode, the code number will
be displayed.
At the beginning of the next line, it shows whether the current
edit mode is <COMMAND> / <REPLACE> / <INSERT>.
5.2.File content display area
It consists of a one-line address gauge and a dump list display
area below it. The left 11 digits indicate the address, and the
data is displayed in hexadecimal in the center accordingly. In
addition, there is a display field by character when the data is
regarded as a character code at the right end. In the character
display field, you can change the character code to be recognized
with the ': set encoding ='option described later.
5.3.Command input line,Message display line
The command input line is one line below the dump list display
area. Here, it is used to input commands with parameters. One
line below that is the message display line. Used to display
warnings and messages from the editor.
5.4.Display in decimal
Display the data content at the cursor position in decimal. It
shows the decimal value when interpreted as a 1 to 8 byte signed or
unsigned integer, and a 4 to 10 byte floating point number.
5.5.Help screen
The ':help' command described later temporarily changes the entire
screen to the command help screen.
Scroll with 'j'/'k', and type 'q'|'<esc>' to return to the original
screen.
5.6.Manual Screen
The ':man' command, which will be described later, allows you to
view the same information as in the manual that can be viewed with
man(1). You can scroll using 'j'/'k' etc., and type 'q' to return
to the original screen. Requires the less(1) command to work.
5.7.Colormap Screen
You can view the 256-color color map using the ':cmap' command
described below. You can scroll using 'j'/'k' etc., and type 'q'
to return to the original screen. Requires the less(1) command to
work.
6.COMMANDS
This section describes the commands that can be used with hxavi. Of
the following commands, those with a '*' at the beginning of the
description have different names and functions from the commands vi(1),
vim(1).
6.1.Command for screen scrolling, moving cursor
A group of commands that control the data display range and cursor
position, and does not affect the data contents of the buffer.
(command)(explanation)
h|H|<bs>|<left>
Move the cursor one byte to the left.
l|<spc>|<right>
Move the cursor one byte to the right.
k|^P|<up> Move the cursor one line up to the same column.
j|^N|<down>
Move the cursor down one line to the same column.
0|^
Move the cursor to the position of the data at the left
end of the line.
$
Move the cursor to the position of the data at the right
end of the line.
fHH ("HH" is a 2-digit hexadecimal number)
Search forward for HH in the line and move to that
location if found.
FHH ("HH" is a 2-digit hexadecimal number)
Search backward for HH in the line and move to that
location if found.
tHH ("HH" is a 2-digit hexadecimal number)
Search forward for HH in the line, and if found, move to
just before that location.
THH ("HH" is a 2-digit hexadecimal number)
Search backward for HH in the line, and if found, move to
just after that location.
; Repeated search within the line.
+|<ent> Move the cursor to the beginning of the next line.
- Move the cursor to the beginning of the previous line.
H|<home> Move the cursor to the home position (upper left corner).
M Move the cursor to the left edge of the center line.
L
Move the cursor to the left edge of the bottom line of
the screen.
<end>
Move the cursor to the right edge of the bottom line of
the screen.
zt Moves the line where the cursor is to the top edge.
zz Moves the line where the cursor is to the center.
zb Moves the line where the cursor is to the bottom edge.
z<ent>
Moves the line where the cursor is to the top edge, and
the cursor moves to the left edge.
z.
Moves the line where the cursor is to the center, and the
cursor moves to the left edge.
z-
Moves the line where the cursor is to the bottom edge,
and the cursor moves to the left edge.
^Y/^E
Scroll one line up (towards the smaller address) / down
(towards the larger address).
^U/^D
Scroll up (towards the smaller address) / down (toward
the larger address) by half a page.
^B|<pgup> Display the previous page.
^F|<pgdn> Display the next page.
gg Move the cursor to the top left edge of file.
G Move the cursor to the bottom left edge of the file.
:go <destination address><ent> or
:<destination address><ent>
Move the cursor to the address indicated by
<destination>(Hexadecimal|Decimal|Octal|Binary). Please
refer to 7.1 for how to write address.
/{pattern}<ent>
Searches the data specified in pattern (7.5. Later)
forward (in the direction of the large address). The
pattern can be either an even number of hexadecimal
digits, or a string of text begining with a '"' (double
quote). Do not enclose the pattern with another '/'.
/<ent>
Repeat the forward search with the previously specified
pattern.
?{pattern}<ent>
Searches the data specified by pattern backward (in the
direction of the small address).
?<ent>
Repeat the backward search with the previously specified
pattern.
/:{decimalnumber}<ent>
Specify a decimal number to search forward for data with
that value. Data type can be selected with
<tab>,<shift+tab>.
/:{decimalmin},{decimalmax}<ent>
Given two decimal numbers, search forward for data
between the two values. When searching by specifying
floating point numbers, it is better to specify a range
using two values, as there is a conversion error between
binary and decimal numbers, and it is difficult to match
them with one value.
?:{decimalnumber}<ent>
Specify a decimal number to search backward for data with
that value. Data type can be selected with
<tab>,<shift+tab>.
?:{decimalmin},{decimalmax}<ent>
Given two decimal numbers, search backward for data
between the two values. When searching by specifying
floating point numbers, it is better to specify a range
using two values, as there is a conversion error between
binary and decimal numbers, and it is difficult to match
them with one value.
n Repeated the last search (in the same direction).
N Repeat the last search (reverse direction).
mx (x is one of a-z) Give the cursor position the name x.
'x Jumps to the location of name x and move to the far left.
`x Jump to the location of name x.
The following is a summary of the movements of the main commands.
^
^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.Command to change the contents of the buffer
This is a rewrite operation for the data buffer.
(commands)(explanation)
i|<ins>
Enter insert mode. The mode display changes to <INSERT>. The
commands available in it are:
(commands)(explanation)
!
* Display the help screen in the mode. Press
the'<esc>' or 'q'keys to return to the original
screen.
0-9|a-f|A-F
Enter the hexadecimal value.
"{string}<ent>
* Insert the character string entered in "string" as
data.
:{decimalnumber}<ent>
* Interprets the decimal number entered with
"decimalnumber" and inserts it as data.
You can select which data type (integer/floating
point number, with/without sign, data length) to
interpret the entered decimal number with <tab> or
<shift+tab>. <tab> and <shift+tab> can be used
even while entering a numerical value. (The first
character is a colon':'.)
#{binarynumber}<ent>
* Interprets the binary number entered with
"binarynumber" and inserts it as data.
You can select which data type (integer/floating
point number, with/without sign, data length) to
interpret the entered binary number with <tab> or
<shift+tab>. :set decimalview must be set.
h|^H|<bs> Cancellation, retreat.
^L * Redisplay the screen.
<esc> Exit the mode.
I Move to the beginning of the line and enter insert mode.
a Move one byte ahead of the cursor to enter insert mode.
A Move to the end of the line and enter insert mode.
o Move to the beginning of the next line and enter insert mode.
O Move to the beginning of the line and enter insert mode.
R
Enter overwrite mode. The mode display changes to <REPLACE>.
The commands available in it are:
(commands)(explanation)
!
* Display the help screen in the mode. Press
the'<esc>' or 'q'keys to return to the original
screen.
0-9|a-f|A-F
Enter the hexadecimal value.
"{string}<ent>
* Insert the character string entered in "string" as
data.
:{decimalnumber}<ent>
* Interprets the decimal number entered with
"decimalnumber" and inserts it as data.
You can select which data type (integer/floating
point number, with/without sign, data length) to
interpret the entered decimal number with <tab> or
<shift+tab>. <tab> and <shift+tab> can be used
even while entering a numerical value. (The first
character is a colon':'.)
#{binarynumber}<ent>
* Interprets the binary number entered with
"binarynumber" and inserts it as data.
You can select which data type (integer/floating
point number, with/without sign, data length) to
interpret the entered binary number with <tab> or
<shift+tab>. :set decimalview must be set.
h|^H|<bs> Cancellation, retreat.
^L * Redisplay the screen.
<esc> Exit the mode.
x|<del> Deletes 1 byte at the cursor position.
X Deletes the 1 byte before the cursor position.
rHH Set 1 byte of data at the cursor position to HH.
y{motion}
Copy the data from the current position to the location
you move with motion.
yy|Y Copy the current line of data.
d{motion}
Deletes the data from the current position to the
location moved by motion.
dd Delete the current line of data.
D
Delete the data from the cursor position to the end of
the line.
p
Insert the copied or deleted data just after the cursor
position.
P
Insert the copied or deleted data just before the cursor
position.
. Repeat the last editing command.
:i {start address},{end address},{destination address}<ent>
* Copy the data from {start address} to {end address} and
insert it into {destination address}. {Destination
address} must be outside {start address} to {end
address}. The range includes {start address} but not
includes {end address}. Refer to 7.1 and 7.3. Below for
how to enter the address.
:d {start address},{end address}<ent>
* Delete the data from the start address to the end
address. The specified range includes {start address} but
not includes {end address}. For the input method of the
address, refer to 7.1 and 7.3.
u
For commands that change the contents of the buffer, undo
the changes. There is no limit to the number of times.
^R
For commands that change the contents of the buffer, redo
the retroactive changes with undo. There is no limit to
the number of times.
6.3.Commands for saving and quitting files
(commands)(explanation)
ZZ
Exit the editor. Export only if the file has been
modified.
ZQ Exit the editor without exporting.
:w [{altname}]<ent>
Export to a file. The editor will continue editing. If
altname is specified, export to altname instead of the
original file.
:w! [{altname}]<ent>
Force export to a file. The editor will continue editing.
:q<ent>
Cancel edit + Exit editor. If there is a change in the
file, it will only give a warning to that effect and will
not exit.
:q!<ent>
Cancel edit + Exit editor. Exit without checking for file
changes. Same as ZQ.
:wq [{altname}]<ent>
Export to file + end. If export fails, it will not end.
:wq! [{altname}]<ent>
Export to file + Finish.
6.4.Other commands
(commands)(explanation)
^L Redraw the screen.
^G Displays the name of the file being edited.
={formula}<ent>
* Calculates a formula and displays the result. Addition,
subtraction, multiplication, division and remainder
calculation of integers (hexadecimal, decimal, octal,
binary) can be performed. Parentheses can also be used.
See 7.3 for how to write integers.
:!{command}<ent>
Start a shell and execute command. Enter the <ent> key
etc. to return to the original screen.
:bytemap<ent>
* Switch the screen to display the data in a graphical
bytemap view. The commands available in it are:
(commads)(explanation)
^F/^B|^D/^U|^E/^Y|j/k|^N/^P|<pgdn>|<pgup>|<down>|<up>
Scroll the display.
+/-
Increases / decreases the number of bytes
displayed on one line.
(/)
Rotate the data column displayed in one row to
the left / right.
<tab>/<shift+tab>
Switch between the following modes.
-Mode to display 0x00 as a blue dots
-Mode to display 0x01-0x1f with a light blue dots
-Mode to display 0x20-0x7f with a red dots
-Mode to display 0x80-0xff with black dots
^L
Redisplay the screen.
q|<esc>
Exits the bytemap view and returns to the dump
screen.
g
Exits the bytemap view and returns to the dump
screen, jumping to the address in the top left
of the view.
:bitmap<ent>
* Switch the screen to display the data in a graphical
bitmap view. The commands available in it are:
(commads)(explanation)
^F/^B|^D/^U|^E/^Y|j/k|^N/^P|<pgdn>|<pgup>
Scroll the display.
+/-
Increases / decreases the number of bytes
displayed on one line.
(/)
Rotate the data column displayed in one row to
the left / right.
</>
If the number of bytes displayed on one line
exceeds the width of the screen, the screen is
shifted left or right.
zt/zz/zb
Moves the line with the cursor to the top /
center / bottom line
z<ent>/z./z-
Moves the line where the cursor is to the top /
center / bottom line, and the cursor moves to
the left end.
j/k|h/l|H/M/L|0/$|^H|<bs>|<left>|<right>|<down>|<up>
Move the cursor.
U Flip the image upside down.
W Inverts the black and white of the image.
s/r Set / reset 1-bit data at the cursor location.
u Undo 1-bit set, reset.
^R Redo 1-bit set, reset.
^L Redraw the screen.
q|<esc>
Exit the bitmap view and jump to the address
where the cursor is currently displaying.
:cmap<ent>
* Displays a sample of the 256 colors that can be used in
the editor. The color number of each color shown here can
be used with the ':set color' commoand or in the
~/.hxavirc file. The 256 ANSI standard colors that are
thought to be available on most terminals these days are
sorted in the HSV color space rather than the usual RGB,
so it should be easy to find the color you're looking
for.
Less(1) is used for display, so you can search for
numbers. Exit the display with 'q' or ':q'.
:file [{newname}]<ent>
Rename the file to newname. This name will be used when
saving the file from now on. If newname is not specified,
the current file name will be displayed (same as ^ G).
:help<ent>
* Switch the screen to display the list of commands.
Scroll by typing'j','k', and return to the original
screen by typing the'q'key.
:histogram<ent>
* Switch the screen and display the distribution of data
values (0x00 to 0xff) in a graphical histogram. The
commands that can be used in it are as follows.
(commands)(explanation)
h/l Moves the histogram left/right.
j/k Enlarges/reduces the vertical axis.
q|<esc> Ends the histogram display.
:logo<ent>
* Displays the logo and version of this program.
:man<ent>
* Displays the online manual for this program.
It uses less(1) for display, so you can search for txt.
Exit with q or :q.
:set<ent> or
:set all<ent>
Shows a list of current values for options that can be
specified with ":set".
:set ambiwidth[=(single|double)]<ent>
Among UTF-8 characters, characters whose width is
ambiguous are displayed in half-width/full-width. Double
is appropriate when using in Japanese. If the parameter
is omitted, the current setting value Is displayed.
:set biblen[=N]<ent>
* Specifies the cursor Blinking Interval in milliseconds on
the Bitmap displayed by the: bi[tmap] command.
:set bidlen[=N]<ent>
* Specifies the cursor Blinking Interval in milliseconds on
the Dump screen.
:set bytes[=N]<ent>
* Change the number of bytes displayed on one line of the
dump list to N bytes. The minimum value is 4. If you
omit the parameter, the number of bytes in the current
dump list is displayed.
:set cmdenter[=commands]<ent>
* Sepcify the command you want to execute when you enter
the command line. it is intended to control IME.
:set cmdleave[=commands]<ent>
* Specify the command to be executed when exiting the
command line. It is intended to control IME.
:set color<ent>
* This shows the current settings for the editor's color
usage. Colors are used in bitmap, bytemap, histogram,
logo, marks on dumplist, and search highlights. If the
terminal has color capabilities, it shows the color
swatches for each color directly.
:set color {place} {part}=N<ent>
* Updates the editor color setting to N. The following list
shows where {place} and {part} can be used.
bitmap scale :Bitmap scale color
bitmap data :Bitmap data color
bytemap scale :Bytemap scale color
bytemap zero :Bytemap data color at 0x00
bytemap ctrl :Bytemap color at 0x01-0x1F,0x7F
bytemap ascii :Bytemap color at 0x20-0x7E
bytemap high :Bytemap color at 0x80-0xFF
histogram scale :Histogram scale color
histogram data :Histogram data color
logo letter :Logo text color
logo cat :Logo cat color
dump mark :Mark color added with the mx comand
search hl :Search highlihgt color
N specifies the color number of one of the 256 ANSI
standard colors. Each {place} {part} can be abbreviated
as long as it remains distinct. For example,
":set color bytemap scale=23"
can be effectively enterd as
":s co by s=23"
However, since you cannnot use the :cmap color sample
while entering the settings, this interface can be
difficult to use. Therefore, it is better to enter the
settings in ~/.hxavirc with a text editor while viewing
the colors in :cmap.
:set [no]decimalview<ent>
* The numerical value obtained by interpreting the data at
the cursor position in multiple data formats and data
length is displayed in decimal.
Display types are 8-bit unsigned integer(U08), signed
integer(S08), 16-bit unsigned integer(U16), signed
integer(S16), 32-bit unsigned integer(U32), signed
integer(S32), 64-bit unsigned integer(U64), signed
integer(S64), 32-bit floating point number(F32), 64-bit
floating point number(D64), 80-bit floating point
number(L80).
The result of bit representation of any of the above data
is also displayed. Which data to display can be selected
by pressing the <tab> key or <shift+tab> key.
:set encoding[={name}]<ent>
Specifies the encoding that interprets the data when
displaying characters. If the parameter is omitted, the
current settings and a list of selectable encodings are
displayed.
The supported encoding names and their abbreviations are
as follows:
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>
* Specifies the endianness when interpreting the data with
decimalview.
:set [no]flash<ent>
* Specifies whether to flip the screen momentarily to warn
(visible bell) when an impossible action is performed.
:set helplang[=(ja_JP|en_US|...)]<ent>
Select the display language for help and messages. If you
omit the parameter, the current settings and a list of
selectable languages are displayed.
:set [no]hideescseq<ent>
When displaying characters in iso-2022-jp-2004, it is
easier to read the dump list if the escape sequence part
is not displayed as characters. By setting this option,
the data in the escape sequence part will be displayed as
blank.
:set hxaviend[=commands]<ent>
* Specify the command to be executed when hxavi is
terminated. It is intended to control IME.
:set lines[=N]<ent>
Change the display area of the dump list to N lines. The
minimum value is 3. If you omit the parameter, the
current number of rows in the dump list is displayed.
:set ttimeoutlen[=N]<ent>
When a special key input is performed and an escape
sequence occurs, the time to wait for its completion is
specified in milliseconds.
:set [no]usecolor<ent>
* Specifies whether to use color for highlighting search
results and displaying bitmaps and histograms.
:set [no]wrapscan<ent>
When searching for a pattern, specify whether to continue
the search beyond the end or beginning of the file.
7.MISCELLANEOUS
7.1.About the count of each command
For many commands, if you enter a number just before entering a
command, the command repeats that number of times. You can count
decimal, hexadecimal, octal, or binary.
- Enter the exact digit string (0-9) as the decimal number.
Example: 180, 32767
-* Hexadecimal numbers are "16#" followed by a string of digits
(0-9,a-f,A-F), and finally "#".
Example: 16#ABC#, 16#123f#
-* For octal numbers, enter a digit string (0 to 7) after "8#".
Example: 8#1777, 8#0123
-* For binary numbers, enter a digit string (0 to 1) after "2#".
Example: 2#10101011
When entering the count, the recognized value is displayed at the
bottom of the screen.
Count in command mode:
Count-enabled commands:
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
Count-disabled command:
"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>
Count in :bitmap:
Count-enabled commands:
^F <pgdn> ^B <pgup> ^D ^U ^E ^Y ^N ^P < > ( ) + -
h <left> ^H <bs> l <right> j <down> k <up> H L u ^R
Count-disabled command:
^C zt zz zb z<ent> z. z- 0 $ M s r U W ^L q <esc>
Count in :bytemap:
Count-enabled commands:
^F <pgdn> ^B <pgup> ^D ^U ^E ^Y ^N ^P ( ) + -
j <down> k <up>
Count-disabled command:
^C <tab> <shift+tab> ^L g q <esc>
Count in :histogram:
Count-enabled commands:
h <left> l <right> j <down> k <up>
Count-disabled command:
q <esc>
7.2.Shortening commands
For commands beginning with ":", you can enter the minimum string
of characters necessary to distinguish it from other commands. For
example,
For ":set ambiwidth=double<ent>", ":s am=d<ent>" is sufficient.
For ":set nowrapscan<ent>", ":s now<ent>" is sufficient.
7.3.About entering formulas
Mathematical expressions can be written as parameters of :i, :d, :g
and = commands. Addition, subtraction, multiplication, division,
remainder calculation, and parentheses can be used in mathematical
expressions. You can use hexadecimal, decimal, octal, and binary
numbers in formulas. The input method for each number is the same
as for "count" in 7.1. Also, the address where the cursor is
currently located can be expressed with '.' (dot).
Example: =(16#7f+8)*27%16<ent>
Example: :i .,.+16#100,.+16#200<ent>
Example: :g 16#ab00+128<ent>
7.4.About the register
The copy, delete, and paste commands (y yy d dd p P) allow you to
specify a register before the command.
Registers include 26 named registers from ["a] to ["z] and
anonymous registers that are used if no name is specified.
- If you do not specify a register, the copied or deleted data will
be in the anonymous register. When you paste the data, you do not
need to specify the register.
Example: 10yy{motion}p :
Copy 10 lines of data to the destination moved by {motion}.
- If you specify a register, the copied or deleted data will be
stored in the named register as well as the anonymous register.
After that, the data in the named register will be saved even if
you edit file by inserting or deleting.
Example: "a10yy(various edits){motion}"ap :
Copy 10 lines of data to the destination moved by {motion}.
7.5.How to specify pattern in search command
The data that can be specified with the search command is:
- a hexadecimal string, a literal string, or a mixture of both.
- decimal number (1 or 2) specified after detaermining the data
length.
Hexadecimal strings represent 1 byte as a double-digit number, and
literal strings are specified by enclosing both ends in double
quotes (").
Both can be arranged alternately within one line.
/ <"literal"> <hexadecimal> <"literal"> <hexadecimal> ...
? <Hexadecimal> <"literal"> <hexadecimal> <"literal"> ...
It doesn't support regular expressions, so there's no metacharacter
other than double quotes. You can search for a fixed string of data
as you type it. For hexadecimal columns, you must enter even
digits correctly and specify integer bytes.
Ignore whitespace in the input data that is not enclosed in double
quotes. If you want to search the double quote itself, you can
search by specifying the hexadecimal number 22 because 22 in
hexadecimal represents (") in ASCII code.
example: /"Hello World"<ent>
Search forward for the character string [Hello World].
example: /22"Hello World"22<ent>
Search forward for the character string ["Hello World"].
example: ?1b 28 42<ent>
Search backwards for the beginning of an ASCII string
in an iso-2022-jp* text document.
example: /:3.141592,3.141593<ent>
If the data type is F32(float 32bit),D64 or L80:
Search forward for data greater than or equal to 3.141592
and less than or equal to 3.141593.
7.6.Color-related environment variables
In many environments, many people use a terminal with ther TERM
environent variable set to "xterm",but this xterm is configured to
use only 8 colors. If you can still see the 256 colors in the color
table with :cmap, you should be able to use any color you like with
hxavi by changing the TERM environment variable to
"xterm-256colors".
7.7.How to use cmdenter,cmdleave,hxaviend
If you use IME to enter multibyte characters on the command line,
it would be more convenient to use the editor if you could
automatically turn off IME when returning from the command line.
You can achive this by using cmdenter,cmdleave, and hxaviend.
- Example configuration when using fcitx:
:set cmdleave=fcitx-remote -c >/dev/null 2>&1
- Example configuration when using fcitx5:
:set cmdleave=fcitx5-remote -c >/dev/null 2>&1
- Example configuration when using ibus-mozc:
(for Japanese keyboard)
: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
(for English keyboard)
: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
This setting can be written in .hxavirc. The leading ':' (colon)
is not required in .hxavi.
The timing of cmdenter operation is as follows:
- Immediately after typing " to enter a string in i or R command
- Immediately after typing / ? /" or ?" to enter a string in
/ or ? command
The timing of cmdleave operation is as follows:
- In all cases, exit the command line
- Immediately after typing : in a general command
- Immediately after typing : to enter a decimal number in the i
or R command
- Immediately after typing # to enter a bynary number in the i
or R command
- Immediately after typing /: ?: to enter a decimal number with
the / or ? command
- Immediately after typing = to enter a formula
7.8.Handling large files with the -b option
Normally, hxavi loads the entire file into memory and performs
editing operations in memory. However, if you are working with a
huge file that exceeds the available memory size, this method will
make operation extremely slow and unusable.
Therefore, the -b option uses a system function called mmap(2) to
view and change only the small portion of the data being displayed
or edited, thereby avoiding slow operation.
This method allows for fast data reference and overwrite
modifications, but when you try to change the length of a file by
inserting, deleting, or appending, it requires accessing or
rewriting a wide range of data in the file, making it extremely
slow and therefore impractical.
For this reason, the -b option restricts the commands that can be
used as follows:
- Unavailable editing commands:
i | I | a | A | o | O | x | X | d | dd | D | p | P | y | yy | Y |
:insert | :delete
- Available editing commands:
R | r | . | u | ^R
- Commands that are available but take a long time:
/ | ? | n | N | :histogram |
:wq! altname | :wq altname | :w! altname | :w altname
- Other commands that cannnot be used:
:file newname
Also, because actual writing to the file being edited occurs at
unexpected times during editing, you cannot quit editing without
synchronously saving.
- Prohibited termination methods:
When Modified is lit
:wq! altname | :wq altname | :q! | :q | ZQ
- Allowed termination methods:
:wq! | :wq | ZZ
(Use undo to return to the beginning, or use :w.)
When Modified is not lit
:wq! altname | :wq altname | :q! | :q | ZQ
7.9.About the personal configuration file (~/.hxavirc)
The ":set" command allows you to set various optional parameters
related to the operation of hxavi. By writing these setting values
in advance to the file ".hxavirc" in your home directory, you can
always enable the values when starting the command. In this file,
the initial ":" of the command is not required. A sample of this
file is located in the documentation directory described below.
ENVIRONMENTS
Terminal encoding is UTF-8 only.
The recommended environment variable for TERM is "xterm-256color".
FILES
(FreeBSD)
/usr/local/bin/hxavi Executable
/usr/local/share/doc/hxavi/* Location of Documents. Sample of
Personal configuration file can be
found here.
/usr/local/lib/hxavi/hxavi*/* Location of various resources
~/.hxavirc Personal configuration file.
(Linux)
/usr/bin/hxavi Executable
/usr/share/doc/hxavi/* Location of Documents. Sample of
Personal configuration file can be
found here.
/usr/share/hxavi/hxavi*/* Location of various resources
~/.hxavirc Personal configuration file.
VERSION
The version is displayed when started only with the command name hxavi.
SEE ALSO
vi(1), vim(1), less(1), ncurses(3)
BUGS
* UTF-8 is the only terminal environment that can be used.
This is because characters other than laten1 and Japanese are used
for character display of control code, graphic display of bitmap and
histogram. However, the encoding scheme of data that can be
displayed as a character is not limited to this.
* Files other than normal files (directories, device files, etc.)
cannot be read or written.
* The logical upper limit of the file size that can be handled is 16
terabytes (0x100000000000 bytes = 17,592,186,044,416 bytes). This is
due to the limit on the number of digits that can be displayed on the
screen.
* Unicode U+2800 to U+28ff (Braille Patterns) are used for bitmap and
bytemap views and histograms. Depending on the design of these
characters, they may not look beautiful.
* Because the author is not a native English speaker The English text
of this manual may not be fluent. If you find any problems with the
translation in this manual or help messages, I hope you fix them and
let me know.
AUTHOR
"Michihiro Satoh", <satoumc(at_sign)hxavi.net>
https://hxavi.net/
COPYRIGHT
It is provided under the BSD 2-Clause License.
This program is designed to be useful but is not guaranteed. Copyright
is reserved, but it is free to use/modify. For details, see
(directory of documents)/COPYRIGHT.
hxavi 1.2.0.20260301 2026-03-01 HXAVI(1)