mg — emacs-like
mg 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:
- 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.
- Run the mode command for all buffers created from arguments on the command
line, including the scratch buffer and all files.
- Turn off backup file generation.
When a file is loaded into
mg, it is
stored in a
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 modeline at the bottom. If changes are made to a buffer, it
will be reflected in all open windows.
If a buffer name begins and ends with an asterisk, the buffer is
considered throwaway; i.e. the user will not be prompted to save changes
when the buffer is killed.
The current cursor location in
(or dot). It
is possible to define a window-specific region of text by setting a second
location, called the
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
mg supports tag files created by
ctags(1), allowing the user to
quickly locate various object definitions. Note though that emacs uses
etags, not ctags.
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-h C-h
- C-h a
- C-h b
- C-h c
- C-x C-b
- C-x C-c
- C-x C-f
- C-x C-g
- C-x C-l
- C-x C-o
- C-x C-q
- C-x C-r
- C-x C-s
- C-x C-u
- C-x C-v
- C-x C-w
- C-x C-x
- C-x (
- C-x )
- C-x 0
- C-x 1
- C-x 2
- C-x 4 C-f
- C-x 4 C-g
- C-x 4 b
- C-x 4 f
- C-x =
- C-x ^
- C-x `
- C-x b
- C-x d
- C-x e
- C-x f
- C-x g
- C-x i
- C-x k
- C-x n
- C-x o
- C-x p
- C-x s
- C-x u
For a complete description of
see MG COMMANDS. To see the active
keybindings at any time, type “M-x describe-bindings”.
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 parameter is
supplied, the mode is toggled to its alternate state. If a positive
parameter is supplied, the mode is forced to on. Otherwise, it is forced to
- Help Apropos. Prompt the user for a string, open the *help* buffer, and
mg commands that contain that
- Register an auto-execute hook; that is, specify a filename pattern
(conforming to the shell's filename globbing rules) and an associated
function to execute when a file matching the specified pattern is read
into a buffer.
- Toggle auto-fill mode (sometimes called mail-mode), where text inserted
past the fill column is automatically wrapped to a new line.
- Toggle indent mode, where indentation is preserved after a newline.
- Move the dot to the first non-whitespace character on the current
- Move cursor backwards one character.
- Kill text backwards by n words.
- Move cursor backwards n paragraphs. Paragraphs are
delimited by <NL><NL> or <NL><TAB> or
- Move cursor backwards by the specified number of words.
- Move cursor to the top of the buffer.
- Move cursor to the beginning of the line.
- Self-insert a character, then search backwards and blink its matching
delimeter. For delimeters other than parenthesis, brackets, and braces,
the character itself is used as its own match.
- Toggle bsmap mode, where DEL and c-H are swapped.
- Toggle a KNF-compliant mode for editing C program files.
- Invoke the keyboard macro.
- Capitalize n words; i.e. convert the first character
of the word to upper case, and subsequent letters to lower case.
- Change the global working directory. See also global-wd-mode.
- 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 the number of lines matching the supplied regular expression.
- Count the number of lines not matching the supplied regular
- Prompts the user for a named keymap (mode), a key, and an
mg command, then creates a keybinding in the
- Delete backwards n characters. Like delete-char,
this actually does a kill if presented with an argument.
- Delete blank lines around dot. If dot is sitting on a blank line, this
command deletes all the blank lines above and below the current line.
Otherwise, it deletes all of the blank lines after the current line.
- Delete n characters forward. If any argument is
present, it kills rather than deletes, saving the result in the kill
- Delete any whitespace around the dot.
- Delete leading whitespace on the current line.
- Delete trailing whitespace on the current line.
- Delete all lines after dot that contain a string matching the supplied
- Delete all lines after dot that contain a string matching the supplied
- Make the current window the only window visible on the screen.
- Delete current window.
- List all global and local keybindings, putting the result in the *help*
- Read a key from the keyboard, and look it up in the keymap. Display the
name of the function currently bound to the key.
- Process a numerical argument for keyboard-invoked functions.
- Set all characters in the region to lower case.
- Set characters to lower case, starting at the dot, and ending
n words away.
- Return an
mg version string.
- Stop defining a keyboard macro.
- Move cursor to the end of the buffer.
- Move cursor to the end of the line.
- Enlarge the current window by shrinking either the window above or below
- Evaluate the current buffer as a series of
commands. Useful for testing
- Get one line from the user, and run it. Useful for testing expressions in
mg startup files.
- Swap the values of "dot" and "mark" in the current
window. Return an error if no mark is set.
- Invoke an extended command; i.e. M-x. Call the message line routine 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
- Justify a paragraph, wrapping text at the current fill column.
- 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
- Same as find-file, except the new buffer is set to read-only.
- 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
- Opens the specified file in a second buffer. Splits the current window if
- Jump to definition of tag at dot.
- Move cursor forwards (or backwards, if n is
negative) n characters. Returns an error if the end
of buffer is reached.
- Move forward n paragraphs. Paragraphs are delimited
by <NL><NL> or <NL><TAB> or
- Move the cursor forward by the specified number of words.
- Bind a key in the global (fundamental) key map.
- Unbind a key from the global (fundamental) key map; i.e. set it to
- 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 working directory is set for each buffer.
- Go to a specific line. If an argument is present, then it is the line
number, else prompt for a line number to use.
- Prompts for one of (a)propos, (b)indings, des(c)ribe key briefly.
- Insert a string, mainly for use from macros.
- Insert the contents of another buffer at dot.
- Insert a file into the current buffer at dot.
- Insert the bound character with word wrap. Check to see if we're past the
fill column, and if so, justify this line.
- 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.
- 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 the current line to the previous. If called with an argument, join
the next line to the current one.
- Delete any whitespace around dot, then insert a space.
- Abort the current action.
- 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. 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 current line, then it kills back abs(n) lines.
- Delete n paragraphs starting with the current
- Kill the currently defined region.
- Delete forward n words.
- Toggle whether line and column numbers are displayed in the modeline.
- Display the list of available buffers.
- Prompt the user for a filename, and then execute commands from that
- Bind a key mapping in the local (topmost) mode.
- Unbind a key mapping in the local (topmost) mode.
- Toggle generation of backup files.
- When disabled, the meta key can be used to insert extended-ascii (8-bit)
characters. When enabled, the meta key acts as usual.
- Process a negative argument for keyboard-invoked functions.
- Insert a newline into the current buffer.
- Insert a newline, then enough tabs and spaces to duplicate the indentation
of the previous line. Assumes tabs are every eight characters.
- Move forward n lines.
- Toggle notab mode. In this mode, spaces are inserted rather than
- Turn off the modified flag in the current buffer.
- Open up some blank space. Essentially, insert n
newlines, then back up over them.
- The command to make the next (down the screen) window the current window.
There are no real errors, although the command does nothing if there is
only 1 window on the screen.
- Toggle overwrite mode, where typing in a buffer overwrites existing
characters rather than inserting them.
- Inserts a prefix string before each line of a region. The prefix string is
settable by using 'set-prefix-string'.
- Move backwards n lines.
- 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.
- Return to position where find-tag was previously invoked.
mg and switch to alternate screen, if
- Display current (global) working directory in the status area.
- Query Replace. Search and replace strings selectively, prompting after
- Replace string globally without individual prompting.
- Replace strings selectively. Does a search and replace operation using
regular expressions for both patterns.
- Insert the next character verbatim into the current buffer; i.e. ignore
any function bound to that key.
- Perform a regular expression search again, using the same search string
and direction as the last search command.
- 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].
- 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.
- Reposition dot in the current window. By default, the dot is centered. If
given a positive argument (n), the display is repositioned to line n. If
n is negative, it is that line from the bottom.
- Refresh the display. Recomputes all window sizes in case something has
- Save the contents of the current buffer if it has been changed, optionally
creating a backup copy.
- Offer to save modified buffers and quit
- 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 backwards n pages. A two-line overlap between
pages is assumed. If given a repeat argument, scrolls back lines, not
- Scroll the display down n lines without changing the
- Scroll the display n lines up without moving the
- Scroll the next window in the window list window forward
- Scroll forward one page. A two-line overlap between pages is assumed. If
given a repeat argument, scrolls back lines, not pages.
- Search again, using the same search string and direction as the last
- 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
- 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.
- Insert a character.
- Set case-fold searching, causing case not to matter in regular expression
searches. This is the default.
- Append the supplied mode to the list of default modes used by subsequent
buffer creation. Built in modes include: fill, indent, overwrite, and
- Prompt the user for a fill column. Used by auto-fill-mode.
- Sets the mark in the current window to the current dot location.
- Sets the prefix string to be used by the 'prefix-region' command.
- 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.
- Insert enough spaces to reach the next tab-stop position. By default,
tab-stops occur every 8 characters.
- Split the current window. A window smaller than 3 lines cannot be
- Start defining a keyboard macro. Macro definition is ended by invoking
mg and switch back to alternate screen, if
- Prompt and switch to a new buffer in the current window.
- Switch to buffer in another window.
- Toggle the read-only flag on the current buffer.
- Transpose the two characters on either side of dot. If dot is at the end
of the line, transpose the two characters before it. Return with an error
if dot is at the beginning of line; it seems to be a bit pointless to make
- Undo the most recent action. If invoked again without an intervening
command, move the undo pointer to the previous action and undo it.
- Add an undo boundary. This is not usually done interactively.
- Toggle whether undo boundaries are generated. Undo boundaries are often
disabled before operations that should be considered atomically
- Toggle whether undo information is kept.
- Show the undo records for the current buffer in a new buffer.
- Repeat the next command 4 times. Usually bound to C-u. This command may be
stacked; e.g. C-u C-u C-f moves the cursor forward 16 characters.
- Upper case region. Change all of the lower case characters in the region
to upper case.
- Move the cursor forward by the specified number of words. As it moves,
convert any characters to upper case.
- Record name of the tags file to be used for subsequent find-tag.
- 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.
- Ask for a file name and write the contents of the current buffer to that
file. Update the remembered file name and clear the buffer changed
- Yank text from kill-buffer. Unlike emacs, the
kill buffer consists only of the most recent kill. It is not a ring.
There are two configuration files, .mg,
and .mg-TERM. Here,
represents the name of the terminal type; e.g., if the terminal type is set
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;
global-set-key ")" self-insert-command
global-set-key "\^x\^f" find-file
global-set-key "\e[Z" backward-char
auto-execute *.c c-mode
- normal startup file
- terminal-specific startup file
- concise tutorial
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”