MG(1) BSD General Commands Manual MG(1)NAMEmg — emacs-like text editor
SYNOPSISmg [-n] [-f mode] [+number] [file ...]
DESCRIPTIONmg is intended to be a small, fast, and portable editor for people who
can't (or don't want to) run emacs for one reason or another, or are not
familiar with the vi(1) editor. It is compatible with emacs because
there shouldn't be any reason to learn more editor types than emacs or
vi(1).
The options are as follows:
+number
Go to the line specified by number (do not insert a space between
the ‘+’ sign and the number). If a negative number is specified,
the line number counts backwards from the end of the file i.e.
+-1 will be the last line of the file, +-2 will be second last,
and so on.
-f mode
Run the mode command for all buffers created from arguments on
the command line, including the scratch buffer and all files.
-n Turn off backup file generation.
WINDOWS AND BUFFERS
When a file is loaded into mg, it is stored in a buffer. This buffer may
be displayed on the screen in more than one window. At present, windows
may only be split horizontally, so each window is delineated by a mode‐
line at the bottom. If changes are made to a buffer, it will be
reflected in all open windows.
If a file is changed outside mg and its buffer is about to be changed, mg
prompts if the change should go ahead (y), not go ahead (n) or if the
buffer should be reverted (r) to the latest file on disk.
If a buffer name begins and ends with an asterisk, the buffer is consid‐
ered throwaway; i.e. the user will not be prompted to save changes when
the buffer is killed.
POINT AND MARK
The current cursor location in mg is called the point (or dot). It is
possible to define a window-specific region of text by setting a second
location, called the mark. The region is the text between point and mark
inclusive. Deleting the character at the mark position leaves the mark
at the point of deletion.
Note: The point and mark are window-specific in mg, not buffer-specific,
as in other emacs flavours.
BACKUP FILES
Backup files have a ‘~’ character appended to the file name and are cre‐
ated in the current working directory by default. Whether to create
backup files or not can be toggled with the make-backup-file command.
The backup file location can either be in the current working directory,
or all backups can be moved to a ~/.mg.d directory where files retain
their path name to retain uniqueness. Use the backup-to-home-directory
to alternate between these two locations. Further, if any application
creates backup files in the TMPDIR, these can be left with the leave-
tmpdir-backups command.
TAGSmg supports tag files created by ctags(1), allowing the user to quickly
locate various object definitions. Note though that emacs uses etags,
not ctags.
CSCOPEmg supports navigating source code using cscope. However, mg requires
cscope and cscope-indexer executables to be present in PATH for it to
work.
DEFAULT KEY BINDINGS
Normal editing commands are very similar to GNU Emacs. In the following
examples, C-x means Control-x, and M-x means Meta-x, where the Meta key
may be either a special key on the keyboard or the ALT key; otherwise ESC
followed by the key X works as well.
C-SPC set-mark-command
C-a beginning-of-line
C-b backward-char
C-c s c cscope-find-functions-calling-this-function
C-c s d cscope-find-global-definition
C-c s e cscope-find-egrep-pattern
C-c s f cscope-find-this-file
C-c s i cscope-find-files-including-file
C-c s n cscope-next-symbol
C-c s p cscope-prev-symbol
C-c s s cscope-find-this-symbol
C-c s t cscope-find-this-text-string
C-d delete-char
C-e end-of-line
C-f forward-char
C-g keyboard-quit
C-h C-h help-help
C-h a apropos
C-h b describe-bindings
C-h c describe-key-briefly
C-j newline-and-indent
C-k kill-line
C-l recenter
RET newline
C-n next-line
C-o open-line
C-p previous-line
C-q quoted-insert
C-r isearch-backward
C-s isearch-forward
C-t transpose-chars
C-u universal-argument
C-v scroll-up
C-w kill-region
C-x C-b list-buffers
C-x C-c save-buffers-kill-emacs
C-x C-f find-file
C-x C-g keyboard-quit
C-x C-l downcase-region
C-x C-o delete-blank-lines
C-x C-q toggle-read-only
C-x C-r find-file-read-only
C-x C-s save-buffer
C-x C-u upcase-region
C-x C-v find-alternate-file
C-x C-w write-file
C-x C-x exchange-point-and-mark
C-x ( start-kbd-macro
C-x ) end-kbd-macro
C-x 0 delete-window
C-x 1 delete-other-windows
C-x 2 split-window-vertically
C-x 4 C-f find-file-other-window
C-x 4 C-g keyboard-quit
C-x 4 b switch-to-buffer-other-window
C-x 4 f find-file-other-window
C-x = what-cursor-position
C-x ^ enlarge-window
C-x ` next-error
C-x b switch-to-buffer
C-x d dired
C-x e call-last-kbd-macro
C-x f set-fill-column
C-x g goto-line
C-x h mark-whole-buffer
C-x i insert-file
C-x k kill-buffer
C-x n other-window
C-x o other-window
C-x p previous-window
C-x s save-some-buffers
C-x u undo
C-y yank
C-z suspend-emacs
M-C-v scroll-other-window
M-SPC just-one-space
M-! shell-command
M-. find-tag
M-* pop-tag-mark
M-% query-replace
M-< beginning-of-buffer
M-> end-of-buffer
M-\ delete-horizontal-space
M-^ join-line
M-b backward-word
M-c capitalize-word
M-d kill-word
M-f forward-word
M-l downcase-word
M-m back-to-indentation
M-q fill-paragraph
M-r search-backward
M-s search-forward
M-u upcase-word
M-v scroll-down
M-w copy-region-as-kill
M-x execute-extended-command
M-{ backward-paragraph
M-| shell-command-on-region
M-} forward-paragraph
M-~ not-modified
M-DEL backward-kill-word
C-_ undo
) blink-and-insert
DEL delete-backward-char
For a complete description of mg commands, see MG COMMANDS. To see the
active keybindings at any time, type “M-x describe-bindings”.
MG COMMANDS
Commands are invoked by “M-x”, or by binding to a key. Many commands
take an optional numerical parameter, n. This parameter is set either by
M-<n> (where n is the numerical argument) before the command, or by one
or more invocations of the universal argument, usually bound to C-u.
When invoked in this manner, the value of the numeric parameter to be
passed is displayed in the minibuffer before the M-x. One common use of
the parameter is in mode toggles (e.g. make-backup-files). If no parame‐
ter is supplied, the mode is toggled to its alternate state. If a posi‐
tive parameter is supplied, the mode is forced to on. Otherwise, it is
forced to off.
apropos
Help Apropos. Prompt the user for a string, open the *help* buf‐
fer, and list all mg commands that contain that string.
audible-bell
Toggle the audible system bell.
auto-execute
Register an auto-execute hook; that is, specify a filename pattern
(conforming to the shell's filename globbing rules) and an associ‐
ated function to execute when a file matching the specified pat‐
tern is read into a buffer.
auto-fill-mode
Toggle auto-fill mode (sometimes called mail-mode), where text
inserted past the fill column is automatically wrapped to a new
line.
auto-indent-mode
Toggle indent mode, where indentation is preserved after a new‐
line.
back-to-indentation
Move the dot to the first non-whitespace character on the current
line.
backup-to-home-directory
Save backup copies to a ~/.mg.d directory instead of working
directory. Requires make-backup-files to be on.
backward-char
Move cursor backwards one character.
backward-kill-word
Kill text backwards by n words.
backward-paragraph
Move cursor backwards n paragraphs. Paragraphs are delimited by
<NL><NL> or <NL><TAB> or <NL><SPACE>.
backward-word
Move cursor backwards by the specified number of words.
beginning-of-buffer
Move cursor to the top of the buffer.
beginning-of-line
Move cursor to the beginning of the line.
blink-and-insert
Self-insert a character, then search backwards and blink its
matching delimiter. For delimiters other than parenthesis, brack‐
ets, and braces, the character itself is used as its own match.
bsmap-mode
Toggle bsmap mode, where DEL and C-h are swapped.
c-mode
Toggle a KNF-compliant mode for editing C program files.
call-last-kbd-macro
Invoke the keyboard macro.
capitalize-word
Capitalize n words; i.e. convert the first character of the word
to upper case, and subsequent letters to lower case.
cd Change the global working directory. See also global-wd-mode.
column-number-mode
Toggle whether the column number is displayed in the modeline.
copy-region-as-kill
Copy all of the characters in the region to the kill buffer,
clearing the mark afterwards. This is a bit like a kill-region
followed by a yank.
count-matches
Count the number of lines matching the supplied regular expres‐
sion.
count-non-matches
Count the number of lines not matching the supplied regular
expression.
cscope-find-this-symbol
List the matches for the given symbol.
cscope-find-global-definition
List global definitions for the given literal.
cscope-find-called-functions
List functions called from the given function.
cscope-find-functions-calling-this-function
List functions calling the given function.
cscope-find-this-text-string
List locations matching the given text string.
cscope-find-egrep-pattern
List locations matching the given extended regular expression pat‐
tern.
cscope-find-this-file
List filenames matching the given filename.
cscope-find-files-including-file
List files that #include the given filename.
cscope-next-symbol
Navigate to the next match.
cscope-prev-symbol
Navigate to the previous match.
cscope-next-file
Navigate to the next file.
cscope-prev-file
Navigate to the previous file.
cscope-create-list-of-files-to-index
Create cscope's List and Index in the given directory.
define-key
Prompts the user for a named keymap (mode), a key, and an mg com‐
mand, then creates a keybinding in the appropriate map.
delete-backward-char
Delete backwards n characters. Like delete-char, this actually
does a kill if presented with an argument.
delete-blank-lines
Delete blank lines around dot. If dot is sitting on a blank line,
this command deletes all the blank lines above and below the cur‐
rent line. Otherwise, it deletes all of the blank lines after the
current line.
delete-char
Delete n characters forward. If any argument is present, it kills
rather than deletes, saving the result in the kill buffer.
delete-horizontal-space
Delete any whitespace around the dot.
delete-leading-space
Delete leading whitespace on the current line.
delete-trailing-space
Delete trailing whitespace on the current line.
delete-matching-lines
Delete all lines after dot that contain a string matching the sup‐
plied regular expression.
delete-non-matching-lines
Delete all lines after dot that contain a string matching the sup‐
plied regular expression.
delete-other-windows
Make the current window the only window visible on the screen.
delete-window
Delete current window.
describe-bindings
List all global and local keybindings, putting the result in the
*help* buffer.
describe-key-briefly
Read a key from the keyboard, and look it up in the keymap. Dis‐
play the name of the function currently bound to the key.
diff-buffer-with-file
View the differences between buffer and its associated file.
digit-argument
Process a numerical argument for keyboard-invoked functions.
downcase-region
Set all characters in the region to lower case.
downcase-word
Set characters to lower case, starting at the dot, and ending n
words away.
emacs-version
Return an mg version string.
end-kbd-macro
Stop defining a keyboard macro.
end-of-buffer
Move cursor to the end of the buffer.
end-of-line
Move cursor to the end of the line.
enlarge-window
Enlarge the current window by shrinking either the window above or
below it.
eval-current-buffer
Evaluate the current buffer as a series of mg commands. Useful
for testing mg startup files.
eval-expression
Get one line from the user, and run it. Useful for testing
expressions in mg startup files.
exchange-point-and-mark
Swap the values of "dot" and "mark" in the current window. Return
an error if no mark is set.
execute-extended-command
Invoke an extended command; i.e. M-x. Call the message line rou‐
tine to read in the command name and apply autocompletion to it.
When it comes back, look the name up in the symbol table and run
the command if it is found, passing arguments as necessary. Print
an error if there is anything wrong.
fill-paragraph
Justify a paragraph, wrapping text at the current fill column.
find-file
Select a file for editing. First check if the file can be found
in another buffer; if it is there, just switch to that buffer. If
the file cannot be found, create a new buffer, read in the file
from disk, and switch to the new buffer.
find-file-read-only
Same as find-file, except the new buffer is set to read-only.
find-alternate-file
Replace the current file with an alternate one. Semantics for
finding the replacement file are the same as find-file, except the
current buffer is killed before the switch. If the kill fails, or
is aborted, revert to the original file.
find-file-other-window
Opens the specified file in a second buffer. Splits the current
window if necessary.
find-tag
Jump to definition of tag at dot.
forward-char
Move cursor forwards (or backwards, if n is negative) n charac‐
ters. Returns an error if the end of buffer is reached.
forward-paragraph
Move forward n paragraphs. Paragraphs are delimited by <NL><NL>
or <NL><TAB> or <NL><SPACE>.
forward-word
Move the cursor forward by the specified number of words.
global-set-key
Bind a key in the global (fundamental) key map.
global-unset-key
Unbind a key from the global (fundamental) key map; i.e. set it to
'rescan'.
global-wd-mode
Toggle global working-directory mode. When enabled, mg defaults
to opening files (and executing commands like compile and grep)
relative to the global working directory. When disabled, a work‐
ing directory is set for each buffer.
goto-line
Go to a specific line. If an argument is present, then it is the
line number, else prompt for a line number to use.
help-help
Prompts for one of (a)propos, (b)indings, des(c)ribe key briefly.
insert
Insert a string, mainly for use from macros.
insert-buffer
Insert the contents of another buffer at dot.
insert-file
Insert a file into the current buffer at dot.
insert-with-wrap
Insert the bound character with word wrap. Check to see if we're
past the fill column, and if so, justify this line.
isearch-backward
Use incremental searching, initially in the reverse direction.
isearch ignores any explicit arguments. If invoked during macro
definition or evaluation, the non-incremental search-backward is
invoked instead.
isearch-forward
Use incremental searching, initially in the forward direction.
isearch ignores any explicit arguments. If invoked during macro
definition or evaluation, the non-incremental search-forward is
invoked instead.
join-line
Join the current line to the previous. If called with an argu‐
ment, join the next line to the current one.
just-one-space
Delete any whitespace around dot, then insert a space.
keyboard-quit
Abort the current action.
kill-buffer
Dispose of a buffer, by name. If the buffer name does not start
and end with an asterisk, prompt the user if the buffer has been
changed.
kill-line
Kill line. If called without an argument, it kills from dot to
the end of the line, unless it is at the end of the line, when it
kills the newline. If called with an argument of 0, it kills from
the start of the line to dot. If called with a positive argument,
it kills from dot forward over that number of newlines. If called
with a negative argument it kills any text before dot on the cur‐
rent line, then it kills back abs(n) lines.
kill-paragraph
Delete n paragraphs starting with the current one.
kill-region
Kill the currently defined region.
kill-word
Delete forward n words.
leave-tmpdir-backups
Modifies the behaviour of backup-to-home-directory. Backup files
that would normally reside in the system TMPDIR are left there and
not moved to the ~/.mg.d directory.
line-number-mode
Toggle whether the line number is displayed in the modeline.
list-buffers
Display the list of available buffers.
load Prompt the user for a filename, and then execute commands from
that file.
local-set-key
Bind a key mapping in the local (topmost) mode.
local-unset-key
Unbind a key mapping in the local (topmost) mode.
make-backup-files
Toggle generation of backup files.
make-directory
Prompt the user for a path or directory name which is then cre‐
ated.
mark-whole-buffer
Marks whole buffer as a region by putting dot at the beginning and
mark at the end of buffer.
meta-key-mode
When disabled, the meta key can be used to insert extended-ascii
(8-bit) characters. When enabled, the meta key acts as usual.
negative-argument
Process a negative argument for keyboard-invoked functions.
newline
Insert a newline into the current buffer.
newline-and-indent
Insert a newline, then enough tabs and spaces to duplicate the
indentation of the previous line. Assumes tabs are every eight
characters.
next-line
Move forward n lines.
no-tab-mode
Toggle notab mode. In this mode, spaces are inserted rather than
tabs.
not-modified
Turn off the modified flag in the current buffer.
open-line
Open up some blank space. Essentially, insert n newlines, then
back up over them.
other-window
The command to make the next (down the screen) window the current
window. There are no real errors, although the command does noth‐
ing if there is only 1 window on the screen.
overwrite-mode
Toggle overwrite mode, where typing in a buffer overwrites exist‐
ing characters rather than inserting them.
prefix-region
Inserts a prefix string before each line of a region. The prefix
string is settable by using 'set-prefix-string'.
previous-line
Move backwards n lines.
previous-window
This command makes the previous (up the screen) window the current
window. There are no errors, although the command does not do a
lot if there is only 1 window.
pop-tag-mark
Return to position where find-tag was previously invoked.
push-shell
Suspend mg and switch to alternate screen, if available.
pwd Display current (global) working directory in the status area.
query-replace
Query Replace. Search and replace strings selectively, prompting
after each match.
replace-string
Replace string globally without individual prompting.
query-replace-regexp
Replace strings selectively. Does a search and replace operation
using regular expressions for both patterns.
quoted-insert
Insert the next character verbatim into the current buffer; i.e.
ignore any function bound to that key.
re-search-again
Perform a regular expression search again, using the same search
string and direction as the last search command.
re-search-backward
Search backwards using a regular expression. Get a search string
from the user, and search, starting at dot and proceeding toward
the front of the buffer. If found, dot is left pointing at the
first character of the pattern [the last character that was
matched].
re-search-forward
Search forward using a regular expression. Get a search string
from the user and search for it starting at dot. If found, move
dot to just after the matched characters. display does all the
hard stuff. If not found, it just prints a message.
recenter
Reposition dot in the current window. By default, the dot is cen‐
tered. If given a positive argument (n), the display is reposi‐
tioned to line n. If n is negative, it is that line from the bot‐
tom.
redraw-display
Refresh the display. Recomputes all window sizes in case some‐
thing has changed.
revert-buffer
Revert the current buffer to the latest file on disk.
save-buffer
Save the contents of the current buffer if it has been changed,
optionally creating a backup copy.
save-buffers-kill-emacs
Offer to save modified buffers and quit mg.
save-some-buffers
Look through the list of buffers, offering to save any buffer that
has been changed. Buffers that are not associated with files
(such as *scratch*, *grep*, *compile*) are ignored.
scroll-down
Scroll backwards n pages. A two-line overlap between pages is
assumed. If given a repeat argument, scrolls back lines, not
pages.
scroll-one-line-down
Scroll the display down n lines without changing the cursor posi‐
tion.
scroll-one-line-up
Scroll the display n lines up without moving the cursor position.
scroll-other-window
Scroll the next window in the window list window forward n pages.
scroll-up
Scroll forward one page. A two-line overlap between pages is
assumed. If given a repeat argument, scrolls back lines, not
pages.
search-again
Search again, using the same search string and direction as the
last search command.
search-backward
Reverse search. Get a search string from the user, and search,
starting at dot and proceeding toward the front of the buffer. If
found, dot is left pointing at the first character of the pattern
(the last character that was matched).
search-forward
Search forward. Get a search string from the user, and search for
it starting at dot. If found, dot gets moved to just after the
matched characters, if not found, print a message.
self-insert-command
Insert a character.
set-case-fold-search
Set case-fold searching, causing case not to matter in regular
expression searches. This is the default.
set-default-mode
Append the supplied mode to the list of default modes used by sub‐
sequent buffer creation. Built in modes include: fill, indent,
overwrite, and notab.
set-fill-column
Prompt the user for a fill column. Used by auto-fill-mode.
set-mark-command
Sets the mark in the current window to the current dot location.
set-prefix-string
Sets the prefix string to be used by the 'prefix-region' command.
shell-command
Execute external command from mini-buffer.
shell-command-on-region
Provide the text in region to the shell command as input.
shrink-window
Shrink current window by one line. The window immediately below
is expanded to pick up the slack. If only one window is present,
this command has no effect.
space-to-tabstop
Insert enough spaces to reach the next tab-stop position. By
default, tab-stops occur every 8 characters.
split-window-vertically
Split the current window. A window smaller than 3 lines cannot be
split.
start-kbd-macro
Start defining a keyboard macro. Macro definition is ended by
invoking end-kbd-macro.
suspend-emacs
Suspend mg and switch back to alternate screen, if in use.
switch-to-buffer
Prompt and switch to a new buffer in the current window.
switch-to-buffer-other-window
Switch to buffer in another window.
toggle-read-only
Toggle the read-only flag on the current buffer.
transpose-chars
Transpose the two characters in front of and under dot, then move
forward one character. Treat newline characters the same as any
other.
undo Undo the most recent action. If invoked again without an inter‐
vening command, move the undo pointer to the previous action and
undo it.
undo-boundary
Add an undo boundary. This is not usually done interactively.
undo-boundary-toggle
Toggle whether undo boundaries are generated. Undo boundaries are
often disabled before operations that should be considered atomi‐
cally undoable.
undo-enable
Toggle whether undo information is kept.
undo-list
Show the undo records for the current buffer in a new buffer.
universal-argument
Repeat the next command 4 times. Usually bound to C-u. This com‐
mand may be stacked; e.g. C-u C-u C-f moves the cursor forward 16
characters.
upcase-region
Upper case region. Change all of the lower case characters in the
region to upper case.
upcase-word
Move the cursor forward by the specified number of words. As it
moves, convert any characters to upper case.
visible-bell
Toggle the visible bell. If this toggle is on, the modeline will
flash.
visit-tags-table
Record name of the tags file to be used for subsequent find-tag.
what-cursor-position
Display a bunch of useful information about the current location
of dot. The character under the cursor (in octal), the current
line, row, and column, and approximate position of the cursor in
the file (as a percentage) is displayed. The column position
assumes an infinite position display; it does not truncate just
because the screen does.
write-file
Ask for a file name and write the contents of the current buffer
to that file. Update the remembered file name and clear the buf‐
fer changed flag.
yank Yank text from kill-buffer. Unlike emacs, the mg kill buffer con‐
sists only of the most recent kill. It is not a ring.
MG DIRED KEY BINDINGS
Specific key bindings are available in dired mode.
DEL dired-unmark-backward
SPC dired-next-line
! dired-shell-command
+ dired-create-directory
c dired-do-copy
d and C-d dired-flag-file-deletion
e, f and C-m dired-find-file
g dired-revert
n dired-next-line
o dired-find-file-other-window
p dired-previous-line
q quit-window
r dired-do-rename
u dired-unmark
x dired-do-flagged-delete
C-v dired-scroll-down
M-v dired-scroll-up
MG DIRED COMMANDS
The following are a list of the commands specific to dired mode:
dired-create-directory
Create a directory.
dired-do-copy
Copy the file listed on the current line of the dired buffer.
dired-do-flagged-delete
Delete the files that have been flagged for deletion.
dired-do-rename
Rename the file listed on the current line of the dired buffer.
dired-find-file
Open the file on the current line of the dired buffer. If the
cursor is on a directory it will be opened in dired mode.
dired-flag-file-deletion
Flag the file listed on the current line for deletion. This is
indicated in the buffer by putting a D at the left margin. No
files are actually deleted until the function dired-do-deletions
is executed.
dired-find-file-other-window
Open the file on the current line of the dired buffer in a dif‐
ferent window.
dired-next-line
Move the cursor to the next line.
dired-other-window
This function works just like dired, except that it puts the
dired buffer in another window.
dired-previous-line
Move the cursor to the previous line.
dired-revert
Refresh the dired buffer.
dired-scroll-down
Scroll down the dired buffer.
dired-scroll-up
Scroll up the dired buffer.
dired-unmark
Remove the deletion flag for the file on the current line.
dired-unmark-backward
Remove the deletion flag from the file listed on the previous
line of the dired buffer, then move up to that line.
quit-window
Close the current dired buffer.
CONFIGURATION FILES
There are two configuration files, .mg and .mg-TERM. Here, TERM repre‐
sents the name of the terminal type; e.g. if the terminal type is set to
“vt100”, mg will use .mg-vt100 as a startup file. The terminal type
startup file is used first.
The startup file format is a list of commands, one per line, as used for
interactive evaluation. Strings that are normally entered by the user at
any subsequent prompts may be specified after the command name; e.g.:
global-set-key ")" self-insert-command
global-set-key "\^x\^f" find-file
global-set-key "\e[Z" backward-char
set-default-mode fill
set-fill-column 72
auto-execute *.c c-mode
Comments can be added to the startup files by placing “;” or “#” as the
first character of a line.
FILES
~/.mg normal startup file
~/.mg-TERM terminal-specific startup file
~/.mg.d alternative backup file location
/usr/share/doc/mg/tutorial concise tutorial
SEE ALSOctags(1), vi(1)CAVEATS
Since it is written completely in C, there is currently no language in
which extensions can be written; however, keys can be rebound and certain
parameters can be changed in startup files.
In order to use 8-bit characters (such as German umlauts), the Meta key
needs to be disabled via the “meta-key-mode” command.
Multi-byte character sets, such as UTF-8, are not supported.
BSD May 15, 2024 BSD