1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
|
.\" $OpenBSD: mg.1,v 1.40 2008/06/29 08:28:01 sobrado Exp $
.\" This file is in the public domain.
.\"
.Dd $Mdocdate: June 29 2008 $
.Dt MG 1
.Os
.Sh NAME
.Nm mg
.Nd emacs-like text editor
.Sh SYNOPSIS
.Nm mg
.Op Fl n
.Op Fl f Ar mode
.Op + Ns Ar number
.Op Ar
.Sh DESCRIPTION
.Nm
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
.Xr vi 1
editor.
It is compatible with emacs because there shouldn't
be any reason to learn more editor types than emacs or
.Xr vi 1 .
.Pp
The options are as follows:
.Bl -tag -width Ds
.It + Ns Ar number
Go to the line specified by number (do not insert
a space between the
.Sq +
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.
.It Fl f Ar mode
Run the mode command for all buffers created from
arguments on the command line, including the
scratch buffer and all files.
.It Fl n
Turn off backup file generation.
.El
.Sh WINDOWS AND BUFFERS
When a file is loaded into
.Nm ,
it is stored in a
.Em 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 modeline at the bottom.
If changes are made to a buffer, it will be reflected in all open windows.
.Sh POINT AND MARK
The current cursor location in
.Nm
is called the
.Em point
(or
.Em dot ) .
It is possible to define a window-specific region of text by setting a second
location, called the
.Em mark .
The
.Em region
is the text between point and mark inclusive.
Deleting the character at the mark position leaves
the mark at the point of deletion.
.Pp
Note: The point and mark are window-specific in
.Nm ,
not buffer-specific, as in other emacs flavours.
.Sh 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 your keyboard
or the ALT key; otherwise ESC followed by the key X works as well.
.Pp
.Bl -tag -width xxxxxxxxxx -compact
.It C-SPC
set-mark-command
.It C-a
beginning-of-line
.It C-b
backward-char
.It C-d
delete-char
.It C-e
end-of-line
.It C-f
forward-char
.It C-g
keyboard-quit
.It C-h C-h
help-help
.It C-h a
apropos
.It C-h b
describe-bindings
.It C-h c
describe-key-briefly
.It C-j
newline-and-indent
.It C-k
kill-line
.It C-l
recenter
.It RET
newline
.It C-n
next-line
.It C-o
open-line
.It C-p
previous-line
.It C-q
quoted-insert
.It C-r
isearch-backward
.It C-s
isearch-forward
.It C-t
transpose-chars
.It C-u
universal-argument
.It C-v
scroll-up
.It C-w
kill-region
.It C-x C-b
list-buffers
.It C-x C-c
save-buffers-kill-emacs
.It C-x C-f
find-file
.It C-x C-g
keyboard-quit
.It C-x C-l
downcase-region
.It C-x C-o
delete-blank-lines
.It C-x C-q
toggle-read-only
.It C-x C-r
find-file-read-only
.It C-x C-s
save-buffer
.It C-x C-u
upcase-region
.It C-x C-v
find-alternate-file
.It C-x C-w
write-file
.It C-x C-x
exchange-point-and-mark
.It C-x (
start-kbd-macro
.It C-x )
end-kbd-macro
.It C-x 0
delete-window
.It C-x 1
delete-other-windows
.It C-x 2
split-window-vertically
.It C-x 4 C-f
find-file-other-window
.It C-x 4 C-g
keyboard-quit
.It C-x 4 b
switch-to-buffer-other-window
.It C-x 4 f
find-file-other-window
.It C-x =
what-cursor-position
.It C-x ^
enlarge-window
.It C-x `
next-error
.It C-x b
switch-to-buffer
.It C-x d
dired
.It C-x e
call-last-kbd-macro
.It C-x f
set-fill-column
.It C-x g
goto-line
.It C-x i
insert-file
.It C-x k
kill-buffer
.It C-x n
other-window
.It C-x o
other-window
.It C-x p
previous-window
.It C-x s
save-some-buffers
.It C-x u
undo
.It C-y
yank
.It C-z
suspend-emacs
.It M-C-v
scroll-other-window
.It M-SPC
just-one-space
.It M-%
query-replace
.It M-<
beginning-of-buffer
.It M->
end-of-buffer
.It M-\e
delete-horizontal-space
.It M-b
backward-word
.It M-c
capitalize-word
.It M-d
kill-word
.It M-f
forward-word
.It M-l
downcase-word
.It M-q
fill-paragraph
.It M-r
search-backward
.It M-s
search-forward
.It M-u
upcase-word
.It M-v
scroll-down
.It M-w
copy-region-as-kill
.It M-x
execute-extended-command
.It M-{
backward-paragraph
.It M-}
forward-paragraph
.It M-~
not-modified
.It M-DEL
backward-kill-word
.It C-_
undo
.It )
blink-and-insert
.It DEL
delete-backward-char
.El
.Pp
For a complete description of
.Nm
commands, see
.Sx MG COMMANDS .
To see the active keybindings at any time, type
.Dq M-x describe-bindings .
.Sh MG COMMANDS
Commands are invoked by
.Dq M-x ,
or by binding to a key.
Many commands take an optional numerical parameter,
.Va n .
This parameter is set either by
M-<n> (where
.Va 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 off.
.\"
.Bl -tag -width xxxxx
.It apropos
Help Apropos.
Prompt the user for a string, open the *help* buffer,
and list all
.Nm
commands that contain that string.
.It auto-execute
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.
.It 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.
.It auto-indent-mode
Toggle indent mode, where indentation is preserved after a newline.
.It backward-char
Move cursor backwards one character.
.It backward-kill-word
Kill text backwards by
.Va n
words.
.It backward-paragraph
Move cursor backwards
.Va n
paragraphs.
Paragraphs are delimited by <NL><NL> or <NL><TAB> or <NL><SPACE>.
.It backward-word
Move cursor backwards by the specified number of words.
.It beginning-of-buffer
Move cursor to the top of the buffer.
.It beginning-of-line
Move cursor to the beginning of the line.
.It blink-and-insert
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.
.It bsmap-mode
Toggle bsmap mode, where DEL and c-H are swapped.
.It call-last-kbd-macro
Invoke the keyboard macro.
.It capitalize-word
Capitalize
.Va n
words; i.e. convert the first character of the word to
upper case, and subsequent letters to lower case.
.It cd
Change the global working directory.
See also global-wd-mode.
.It 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.
.It count-matches
Count the number of lines matching the supplied regular expression.
.It count-non-matches
Count the number of lines not matching the supplied regular expression.
.It define-key
Prompts the user for a named keymap (mode),
a key, and an
.Nm
command, then creates a keybinding in the appropriate
map.
.It delete-backward-char
Delete backwards
.Va n
characters.
Like delete-char, this actually does a kill if presented
with an argument.
.It 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 current line.
Otherwise, it deletes all of the blank lines after the current line.
.It delete-char
Delete
.Va n
characters forward.
If any argument is present, it kills rather than deletes,
saving the result in the kill buffer.
.It delete-horizontal-space
Delete any whitespace around the dot.
.It delete-leading-space
Delete leading whitespace on the current line.
.It delete-trailing-space
Delete trailing whitespace on the current line.
.It delete-matching-lines
Delete all lines after dot that contain a string matching
the supplied regular expression.
.It delete-non-matching-lines
Delete all lines after dot that contain a string matching
the supplied regular expression.
.It delete-other-windows
Make the current window the only window visible on the screen.
.It delete-window
Delete current window.
.It describe-bindings
List all global and local keybindings, putting the result in
the *help* buffer.
.It describe-key-briefly
Read a key from the keyboard, and look it up in the keymap.
Display the name of the function currently bound to the key.
.It digit-argument
Process a numerical argument for keyboard-invoked functions.
.It downcase-region
Set all characters in the region to lower case.
.It downcase-word
Set characters to lower case, starting at the dot, and ending
.Va n
words away.
.It emacs-version
Return an
.Nm
version string.
.It end-kbd-macro
Stop defining a keyboard macro.
.It end-of-buffer
Move cursor to the end of the buffer.
.It end-of-line
Move cursor to the end of the line.
.It enlarge-window
Enlarge the current window by shrinking either the window above
or below it.
.It eval-current-buffer
Evaluate the current buffer as a series of
.Nm
commands.
Useful for testing
.Nm
startup files.
.It eval-expression
Get one line from the user, and run it.
Useful for testing expressions in
.Nm
startup files.
.It exchange-point-and-mark
Swap the values of "dot" and "mark" in the current window.
Return an error if no mark is set.
.It execute-extended-command
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 wrong.
.It fill-paragraph
Justify a paragraph, wrapping text at the current fill column.
.It find-file
Select a file for editing.
First check if you can find the file
in another buffer; if you can find it, just switch to the buffer.
If you cannot find the file, create a new buffer, read in the
file from disk, and switch to the new buffer.
.It find-file-read-only
Same as find-file, except the new buffer is set to read-only.
.It 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.
.It find-file-other-window
Opens the specified file in a second buffer.
Splits the current window if necessary.
.It forward-char
Move cursor forwards (or backwards, if
.Va n
is negative)
.Va n
characters.
Returns an error if the end of buffer is reached.
.It forward-paragraph
Move forward
.Va n
paragraphs.
Paragraphs are delimited by <NL><NL> or <NL><TAB> or <NL><SPACE>.
.It forward-word
Move the cursor forward by the specified number of words.
.It global-set-key
Bind a key in the global (fundamental) key map.
.It global-unset-key
Unbind a key from the global (fundamental) key map; i.e. set it to 'rescan'.
.It global-wd-mode
Toggle global working-directory mode.
When enabled,
.Nm
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.
.It 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.
.It help-help
Prompts for one of (a)propos, (b)indings, des(c)ribe key briefly.
.It insert
Insert a string, mainly for use from macros.
.It insert-buffer
Insert the contents of another buffer at dot.
.It insert-file
Insert a file into the current buffer at dot.
.It 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.
.It 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.
.It 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.
.It just-one-space
Delete any whitespace around dot, then insert a space.
.It keyboard-quit
Abort the current action.
.It kill-buffer
Dispose of a buffer, by name.
Prompt the user if the buffer
has been changed.
.It 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 current line, then it kills back
abs(n) lines.
.It kill-paragraph
Delete
.Va n
paragraphs starting with the current one.
.It kill-region
Kill the currently defined region.
.It kill-word
Delete forward
.Va n
words.
.It line-number-mode
Toggle whether line and column numbers are displayed in the modeline.
.It list-buffers
Display the list of available buffers.
.It load
Prompt the user for a filename, and then execute commands
from that file.
.It local-set-key
Bind a key mapping in the local (topmost) mode.
.It local-unset-key
Unbind a key mapping in the local (topmost) mode.
.It make-backup-files
Toggle generation of backup files.
.It 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.
.It negative-argument
Process a negative argument for keyboard-invoked functions.
.It newline
Insert a newline into the current buffer.
.It 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.
.It next-line
Move forward
.Va n
lines.
.It no-tab-mode
Toggle notab mode.
In this mode, spaces are inserted rather than tabs.
.It not-modified
Turn off the modified flag in the current buffer.
.It open-line
Open up some blank space.
Essentially, insert
.Va n
newlines, then back up over them.
.It other-window
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.
.It overwrite-mode
Toggle overwrite mode, where typing in a buffer overwrites
existing characters rather than inserting them.
.It prefix-region
Inserts a prefix string before each line of a region.
The prefix string is settable by using 'set-prefix-string'.
.It previous-line
Move backwards
.Va n
lines.
.It 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.
.It push-shell
Suspend
.Nm
and switch to alternate screen, if available.
.It pwd
Display current (global) working directory in the status area.
.It query-replace
Query Replace.
Search and replace strings selectively, prompting after each match.
.It replace-string
Replace string globally without individual prompting.
.It query-replace-regexp
Replace strings selectively.
Does a search and replace operation using regular
expressions for both patterns.
.It quoted-insert
Insert the next character verbatim into the current buffer; i.e. ignore
any function bound to that key.
.It re-search-again
Perform a regular expression search again, using the same search
string and direction as the last search command.
.It 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].
.It 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.
.It recenter
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
.Va n
is negative, it is that line from the bottom.
.It redraw-display
Refresh the display.
Recomputes all window sizes in case something has changed.
.It save-buffer
Save the contents of the current buffer if it has been changed,
optionally creating a backup copy.
.It save-buffers-kill-emacs
Offer to save modified buffers and quit
.Nm .
.It 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.
.It scroll-down
Scroll backwards
.Va n
pages.
A two-line overlap between pages is
assumed.
If given a repeat argument, scrolls back lines, not pages.
.It scroll-one-line-down
Scroll the display down
.Va n
lines without changing the cursor position.
.It scroll-one-line-up
Scroll the display
.Va n
lines up without moving the cursor position.
.It scroll-other-window
Scroll the next window in the window list window forward
.Va n
pages.
.It scroll-up
Scroll forward one page.
A two-line overlap between pages is
assumed.
If given a repeat argument, scrolls back lines, not pages.
.It search-again
Search again, using the same search string and direction as the last
search command.
.It 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).
.It 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.
.It self-insert-command
Insert a character.
.It set-case-fold-search
Set case-fold searching, causing case nopt to matter
in regular expression searches.
This is the default.
.It set-default-mode
Append the supplied mode to the list of default modes
used by subsequent buffer creation.
Built in modes include: fill, indent, overwrite, and notab.
.It set-fill-column
Prompt the user for a fill column.
Used by auto-fill-mode.
.It set-mark-command
Sets the mark in the current window to the current dot location.
.It set-prefix-string
Sets the prefix string to be used by the 'prefix-region' command.
.It 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.
.It space-to-tabstop
Insert enough spaces to reach the next tab-stop position.
By default, tab-stops occur every 8 characters.
.It split-window-vertically
Split the current window.
A window smaller than 3 lines cannot be split.
.It start-kbd-macro
Start defining a keyboard macro.
Macro definition is ended by invoking end-kbd-macro.
.It suspend-emacs
Suspend
.Nm
and switch back to alternate screen, if in use.
.It switch-to-buffer
Prompt and switch to a new buffer in the current window.
.It switch-to-buffer-other-window
Switch to buffer in another window.
.It toggle-read-only
Toggle the read-only flag on the current buffer.
.It transpose-chars
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 this work.
.It undo
Undo the most recent action.
If invoked again without an intervening command,
move the undo pointer to the previous action and undo it.
.It undo-list
Show the undo records for the current buffer in a new buffer.
.It universal-argument
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.
.It upcase-region
Upper case region.
Change all of the lower case characters in the region to
upper case.
.It upcase-word
Move the cursor forward by the specified number of words.
As you move, convert any characters to upper case.
.It 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.
.It 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 buffer
changed flag.
.It yank
Yank text from kill-buffer.
Unlike emacs, the
.Nm
kill buffer consists only
of the most recent kill.
It is not a ring.
.El
.Sh CONFIGURATION FILES
There are two configuration files,
.Pa .mg ,
and
.Pa .mg-TERM .
Here,
.Ev TERM
represents the name of your terminal type; e.g., if your terminal type
is set to
.Dq vt100 ,
.Nm
will use
.Pa .mg-vt100
as a startup file.
The terminal type startup file is used first.
.Pp
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.:
.Bd -literal -offset indent
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
.Ed
.Sh FILES
.Bl -tag -width ~/.mg-TERM -compact
.It Pa ~/.mg
normal startup file
.It Pa ~/.mg-TERM
terminal-specific startup file
.El
.Sh SEE ALSO
.Xr vi 1
.Sh CAVEATS
Since it is written completely in C, there is currently no
language in which you can write extensions;
however, you can rebind keys and change certain parameters
in startup files.
.Pp
In order to use 8-bit characters (such as German umlauts), the Meta key
needs to be disabled via the
.Dq meta-key-mode
command.
|