Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

   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
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
.\" Copyright (c) 1980, 1993
.\"	The Regents of the University of California.  All rights reserved.
.\"
.\" %sccs.include.redist.roff%
.\"
.\"	Id: vi.apwh.ms,v 8.3 2001/01/28 13:48:01 skimo Exp  (Berkeley) Date: 2001/01/28 13:48:01 
.\"
.nr LL 6.5i
.nr FL 6.5i
.TL
Vi Command & Function Reference
.AU
Alan P.W. Hewett
.sp
Revised for version 2.12 by Mark Horton
.NH 1
Author's Disclaimer
.LP
This document does not claim to be 100% complete.  There are a
few commands listed in the original document that I was unable
to test either because I do not speak \fBlisp\fR, because they
required programs we don't have, or because I wasn't able to make
them work.  In these cases I left the command out.  The commands
listed in this document have been tried and are known to work.
It is expected that prospective users of this document will read
it once to get the flavor of everything that \fBvi\fR can do
and then use it as a reference document.  Experimentation is
recommended.  If you don't understand a command, try it and
see what happens.
.LP
[Note: In revising this document, I have attempted to make it
completely reflect version 2.12 of
.B vi .
It does not attempt to document the VAX version (version 3),
but with one or two exceptions (wrapmargin, arrow keys)
everything said about 2.12 should apply to 3.1.
.I "Mark Horton" ]
.NH 1
Notation
.LP
\fB[option]\fR is used to denote optional parts of a command.
Many \fBvi\fR commands have an optional count.  \fB[cnt]\fR
means that an optional number may precede the command to
multiply or iterate the command.
\fB{variable item}\fR is used to denote parts of the command
which must appear, but can take a number of different values.
\fB<character [-character]>\fR means that the character or
one of the characters in the range described between the
two angle brackets is to be typed.
For example \fB<esc>\fR means
the \fBescape\fR key is to be typed.  \fB<a-z>\fR means that a
lower case letter is to be typed.  \fB^<character>\fR means that
the character is to be typed as a \fBcontrol\fR character, that is,
with the \fB<cntl>\fR key held down while simultaneously typing
the specified character.  In this document control characters will
be denoted using the \fIupper case\fR character, but
^<uppercase chr> and ^<lowercase chr> are equivalent.  That is, for
example, \fB<^D>\fR is equal to \fB<^d>\fR.
The most common character abbreviations
used in this list are as follows:
.IP <esc> 8
escape, octal 033
.IP <cr> 8
carriage return, ^M, octal 015
.IP <lf> 8
linefeed ^J, octal 012
.IP <nl> 8
newline, ^J, octal 012 (same as linefeed)
.IP <bs> 8
backspace, ^H, octal 010
.IP <tab> 8
tab, ^I, octal 011
.IP <bell> 8
bell, ^G, octal 07
.IP <ff> 8
formfeed, ^L, octal 014
.IP <sp> 8
space, octal 040
.IP <del> 8
delete, octal 0177
.sp 1
.NH 1
Basics
.LP
To run \fBvi\fR the shell variable \fBTERM\fR must be defined and
exported to your environment.
How you do this depends on which shell you are using.
You can tell which shell you have by the character it
prompts you for commands with.
The Bourne shell prompts with `$', and the C shell prompts with `%'.
For these examples, we will suppose
that you are using an HP 2621 terminal, whose termcap name is ``2621''.
.NH 2
Bourne Shell
.LP
To manually set your terminal type to 2621 you would type:
.DS
TERM=2621
export TERM
.DE
.PP
There are various ways of having this automatically or
semi-automatically done when you log in.
Suppose you usually dial in on a 2621.
You want to tell this to the machine, but still have it
work when you use a hardwired terminal.
The recommended way, if you have the
.B tset
program, is to use the sequence
.DS
tset \-s \-d 2621 > tset$$
\&. tset$$
rm tset$$
.DE
in your .login (for csh) or the same thing using `.' instead of `source'
in your .profile (for sh).
The above line says that if you are dialing in you are on a 2621,
but if you are on a hardwired terminal it figures out your terminal
type from an on-line list.
.NH 2
The C Shell
.LP
To manually set your terminal type to 2621 you would type:
.DS
setenv TERM 2621
.DE
.PP
There are various ways of having this automatically or
semi-automatically done when you log in.
Suppose you usually dial in on a 2621.
You want to tell this to the machine, but still have it
work when you use a hardwired terminal.
The recommended way, if you have the
.B tset
program, is to use the sequence
.DS
tset \-s \-d 2621 > tset$$
source tset$$
rm tset$$
.DE
in your .login.*
.FS
* On a version 6 system
without environments, the invocation of tset
is simpler, just add the line ``tset \-d 2621''
to your .login or .profile.
.FE
The above line says that if you are dialing in you are on a 2621,
but if you are on a hardwired terminal it figures out your terminal
type from an on-line list.
.NH 1
Normal Commands
.LP
\fBVi\fR is a visual editor with a window on the file.  What
you see on the screen is \fBvi\fR's current notion of
what your file will contain,
(at this point in the file),
when it is written out.
Most commands do not cause any change in the screen until the
complete command is typed.  Should you get confused while
typing a command, you can abort the command by typing an
<del> character.  You will know you are back to command level
when you hear a <bell>.  Usually typing an <esc> will produce the
same result.  When \fBvi\fR gets an improperly formatted command
it rings the <bell>.
Following are the \fBvi\fR commands broken down by function.
.NH 2
Entry and Exit
.LP
To enter
.B vi
on a particular
.I file ,
type
.DS
\fBvi\fP \fIfile\fP
.DE
The file will be read in and the cursor will be placed at the beginning
of the first line.
The first screenfull of the file will be displayed on the terminal.
.PP
To get out of the editor, type
.DS
ZZ
.DE
If you are in some special mode, such as input mode
or the middle of a multi-keystroke command, it may
be necessary to type <esc> first.
.NH 2
Cursor and Page Motion
.LP
.B NOTE:
The arrow keys (see the next four commands)
on certain kinds of terminals will not work with the
PDP-11 version of vi.  The control versions or the hjkl versions will
work on any terminal.  Experienced users prefer the hjkl keys because
they are always right under their fingers.  Beginners often prefer
the arrow keys, since they do not require memorization of which hjkl
key is which.
The mnemonic value of hjkl is clear from looking at the keyboard of an adm3a.
.sp
.IP "[cnt]<bs> or [cnt]h or [cnt]\(<-" 16
.br
Move the cursor to the left one character.  Cursor stops at the left
margin of the page.
If cnt is given, these commands move that many spaces.
.IP "[cnt]^N or [cnt]j or [cnt]\(da or [cnt]<lf>" 16
.br
Move down one line.
Moving off the screen scrolls the window to force a new line
onto the screen.
Mnemonic: \fBN\fRext
.IP "[cnt]^P or [cnt]k or [cnt]\(ua" 16
.br
Move up one line.
Moving off the top of the screen forces new text onto the screen.
Mnemonic: \fBP\fRrevious
.IP "[cnt]<sp> or [cnt]l or [cnt]\(->" 16
.br
Move to the right one character.
Cursor will not go beyond the end of the line.
.IP [cnt]- 16
Move the cursor up the screen to the beginning of the next line.
Scroll if necessary.
.IP "[cnt]+ or [cnt]<cr>" 16
.sp 1
Move the cursor down the screen to the beginning of the next line.
Scroll up if necessary.
.IP "[cnt]$" 16
Move the cursor to the end of the line.
If there is a count, move to the end of the line "cnt" lines
forward in the file.
.IP "^" 16
Move the cursor to the beginning of the first word on the line.
.IP "0" 16
Move the cursor to the left margin of the current line.
.IP "[cnt]|" 16
Move the cursor to the column specified by the count.  The default is
column zero.
.IP "[cnt]w" 16
Move the cursor to the beginning of the next word. If there
is a count, then move forward that many words and
position the cursor at the beginning of the word.
Mnemonic: next-\fBw\fRord
.IP "[cnt]W" 16
Move the cursor to the beginning of the next word which follows
a "white space" (<sp>,<tab>, or <nl>).  Ignore other punctuation.
.IP "[cnt]b" 16
Move the cursor to the preceding word.  Mnemonic: \fBb\fRackup-word
.IP "[cnt]B" 16
Move the cursor to the preceding word that is separated from the
current word by a "white space" (<sp>,<tab>, or <nl>).
.IP "[cnt]e" 16
Move the cursor to the end of the current word or the end of the
"cnt"'th word hence.  Mnemonic: \fBe\fRnd-of-word
.IP "[cnt]E" 16
Move the cursor to the end of the current word which is delimited by
"white space" (<sp>,<tab>, or <nl>).
.IP "[line number]G" 16
.br
Move the cursor to the line specified.  Of particular use are the
sequences "1G" and "G", which move the cursor to the beginning and
the end of the file respectively.  Mnemonic: \fBG\fRo-to
.LP
.B NOTE:
The next four commands (^D, ^U, ^F, ^B)
are not true motion commands, in that they
cannot be used as the object of commands such as delete or change.
.IP "[cnt]^D" 16
Move the cursor down in the file by "cnt" lines (or the last "cnt"
if a new count isn't given.  The initial default is half a page.)  The
screen is simultaneously scrolled up.  Mnemonic: \fBD\fRown
.IP "[cnt]^U" 16
Move the cursor up in the file by "cnt" lines.  The screen is simultaneously
scrolled down.  Mnemonic: \fBU\fRp
.IP "[cnt]^F" 16
Move the cursor to the next page.  A count moves that many pages.
Two lines of the previous page are kept on the screen for continuity if
possible.  Mnemonic: \fBF\fRorward-a-page
.IP "[cnt]^B" 16
Move the cursor to the previous page.  Two lines of the current page
are kept if possible.  Mnemonic: \fBB\fRackup-a-page
.IP "[cnt](" 16
Move the cursor to the beginning of the next sentence.
A sentence is defined as ending with a ".", "!", or "?"
followed by two spaces or a <nl>.
.IP "[cnt])" 16
Move the cursor backwards to the beginning of a sentence.
.IP "[cnt]}" 16
Move the cursor to the beginning of the next paragraph.  This command
works best inside \fBnroff\fR documents.  It understands two sets of
\fBnroff\fR macros, \fB\-ms\fR and \fB\-mm\fR, for which the
commands ".IP", ".LP", ".PP", ".QP", "P", as well as the nroff command ".bp"
are considered to be paragraph delimiters.
A blank line also delimits a paragraph.
The \fBnroff\fR macros that it accepts as paragraph delimiters is
adjustable.  See \fBparagraphs\fR under the \fBSet Commands\fR section.
.IP "[cnt]{" 16
Move the cursor backwards to the beginning of a paragraph.
.IP "]]" 16
Move the cursor to the next "section", where a section is defined by
two sets of \fBnroff\fR macros, \fB\-ms\fR and \fB\-mm\fR, in which
".NH", ".SH", and ".H" delimit a section.  A line beginning with a <ff><nl>
sequence, or a line beginning with a "{" are also considered to
be section delimiters.  The last option makes it
useful for finding the beginnings of C functions.
The \fBnroff\fR macros that are used for section delimiters can be adjusted.
See \fBsections\fR under the \fBSet Commands\fR section.
.IP "[[" 16
Move the cursor backwards to the beginning of a section.
.IP "%" 16
Move the cursor to the matching parenthesis
or brace.  This is very useful in C or lisp code.  If the
cursor is sitting on a \fB( ) {\fR or \fB}\fR the cursor
is moved to the matching character at the other end of the
section.  If the cursor is not sitting on a brace or a
parenthesis, \fBvi\fR searches forward until it finds one
and then jumps to the match mate.
.IP "[cnt]H" 16
If there is no count move the cursor to the top left position on the screen.
If there is a count, then move the cursor to the beginning of the line
"cnt" lines from the top of the screen.  Mnemonic:  \fBH\fRome
.IP "[cnt]L" 16
If there is no count move the cursor to the beginning
of the last line on the screen.
If there is a count, then move the cursor to the beginning of the line
"cnt" lines from the bottom of the screen.  Mnemonic: \fBL\fRast
.IP "M" 16
Move the cursor to the beginning of the middle line on the screen.
Mnemonic: \fBM\fRiddle
.IP "m<a-z>" 16
This command does not move the cursor, but it \fBmarks\fR the place
in the file and the character "<a-z>" becomes the label for referring
to this location in the file.  See the next two commands.  Mnemonic:
\fBm\fRark
.B NOTE:
The mark command is not a motion, and cannot be used as the target
of commands such as delete.
.IP "\(aa<a-z>" 16
Move the cursor to the beginning of the line that is marked with the label
"<a-z>".
.IP "\(ga<a-z>" 16
Move the cursor to the exact position on the line that was marked with
with the label "<a-z>".
.IP "\(aa\(aa" 16
Move the cursor back to the beginning of the line where it was before the
last "non-relative" move.  A "non-relative" move is something such as a
search or a jump to a specific line in the file, rather than moving the
cursor or scrolling the screen.
.IP "\(ga\(ga" 16
Move the cursor back to the exact spot on the line where it was located
before the last "non-relative" move.
.NH 2
Searches
.LP
The following commands allow you to search for items in a file.
.IP [cnt]f{chr} 16
.sp 1
Search forward on the line for the next or "cnt"'th occurrence of
the character "chr".  The cursor is placed \fBat\fR the character
of interest.  Mnemonic: \fBf\fRind character
.IP [cnt]F{chr} 16
.sp 1
Search backwards on the line for the next or "cnt"'th occurrence of
the character "chr".  The cursor is placed \fBat\fR the character
of interest.
.IP [cnt]t{chr} 16
.sp 1
Search forward on the line for the next or "cnt"'th occurrence of
the character "chr".  The cursor is placed \fBjust preceding\fR
the character of interest.  Mnemonic: move cursor up \fBt\fRo character
.IP [cnt]T{chr} 16
.sp 1
Search backwards on the line for the next or "cnt"'th occurrence of
the character "chr".  The cursor is placed \fBjust preceding\fR
the character of interest.
.IP "[cnt];" 16
Repeat the last "f", "F", "t" or "T" command.
.IP "[cnt]," 16
Repeat the last "f", "F", "t" or "T" command, but in the opposite
search direction.  This is useful if you overshoot.
.IP "[cnt]/[string]/<nl>" 16
.br
Search forward for the next occurrence of "string".
Wrap around at the end of the file
does occur.
The final \fB</>\fR is not required.
.IP "[cnt]?[string]?<nl>" 16
.br
Search backwards for the next occurrence of "string".  If a count is
specified, the count becomes the new window size.  Wrap around at the beginning
of the file does occur.
The final \fB<?>\fR is not required.
.IP n 16
Repeat the last /[string]/ or ?[string]? search.  Mnemonic: \fBn\fRext
occurrence.
.IP N 16
Repeat the last /[string]/ or ?[string]? search, but in the reverse
direction.
.IP ":g/[string]/[editor command]<nl>" 16
.sp 1
Using the \fB:\fR syntax it is possible to do global searches ala the
standard UNIX "ed" editor.
.NH 2
Text Insertion
.LP
The following commands allow for the insertion of text.  All multicharacter
text insertions are terminated with an <esc> character.
The last change
can always be \fBundone\fR by typing a \fBu\fR.
The text insert in insertion mode can contain newlines.
.IP a{text}<esc> 16
Insert text immediately following the cursor position.
Mnemonic: \fBa\fRppend
.IP A{text}<esc> 16
Insert text at the end of the current line.
Mnemonic: \fBA\fRppend
.IP i{text}<esc> 16
Insert text immediately preceding the cursor position.
Mnemonic: \fBi\fRnsert
.IP I{text}<esc> 16
Insert text at the beginning of the current line.
.IP o{text}<esc> 16
Insert a new line after the line on which the cursor appears and
insert text there.  Mnemonic:  \fBo\fRpen new line
.IP O{text}<esc> 16
Insert a new line preceding the line on which the cursor appears
and insert text there.
.NH 2
Text Deletion
.LP
The following commands allow the user to delete text in various ways.
All changes can always be \fBundone\fR by typing the \fBu\fR command.
.IP "[cnt]x" 16
Delete the character or characters starting at the cursor position.
.IP "[cnt]X" 16
Delete the character or characters starting at the character preceding
the cursor position.
.IP "D" 16
Deletes the remainder of the line starting at the cursor.
Mnemonic: \fBD\fRelete the rest of line
.IP "[cnt]d{motion}" 16
.br
Deletes one or more occurrences of the specified motion.
Any motion from sections 4.1 and 4.2 can be used here.
The d can be stuttered (e.g. [cnt]dd) to delete cnt lines.
.NH 2
Text Replacement
.LP
The following commands allow the user to simultaneously delete and
insert new text.  All such actions can be \fBundone\fR by typing
\fBu\fR following the command.
.IP "r<chr>" 16
Replaces the character at the current cursor position with <chr>.  This
is a one character replacement.  No <esc> is required for termination.
Mnemonic:  \fBr\fReplace character
.IP "R{text}<esc>" 16
Starts overlaying the characters on the screen with whatever you type.
It does not stop until an <esc> is typed.
.IP "[cnt]s{text}<esc>" 16
Substitute for "cnt" characters beginning at the current cursor
position.  A "$" will appear at the position in the text where the
"cnt"'th character appears so you will know how much you are erasing.
Mnemonic: \fBs\fRubstitute
.IP "[cnt]S{text}<esc>" 16
Substitute for the entire current line (or lines).  If no count is given,
a "$" appears at the end of the current line.  If a count of more than
1 is given, all the lines to be replaced are deleted before the insertion
begins.
.IP "[cnt]c{motion}{text}<esc>" 16
.br
Change the specified "motion" by replacing it with the
insertion text.  A "$" will appear at the end of the last item
that is being deleted unless the deletion involves whole lines.
Motion's can be any motion from sections 4.1 or 4.2.
Stuttering the c (e.g. [cnt]cc) changes cnt lines.
.NH 2
Moving Text
.LP
\fBVi\fR provides a number of ways of moving chunks of text around.
There are nine buffers into which each piece of text which is deleted
or "yanked" is put in addition to the "undo" buffer.
The most recent deletion or yank is in the "undo" buffer and also
usually in buffer
1, the next most recent in buffer 2, and so forth.  Each new deletion
pushes down all the older deletions.  Deletions older than 9
disappear.  There is also
a set of named registers, a-z, into which text can optionally
be placed.  If any delete or replacement type command is preceded
by \fB"<a-z>\fR, that named buffer will contain the text deleted
after the command is executed.  For example, \fB"a3dd\fR will delete
three lines starting at the current line and put them in buffer \fB"a\fR.*
.FS
* Referring to an upper case letter as a buffer name (A-Z) is the
same as referring to the lower case letter, except that text placed
in such a buffer is appended to it instead of replacing it.
.FE
There are two more basic commands and
some variations useful in getting and putting text into a file.
.IP ["<a-z>][cnt]y{motion} 16
.sp 1
Yank the specified item or "cnt" items and put in the "undo" buffer or
the specified buffer.  The variety of "items" that can be yanked
is the same as those that can be deleted with the "d" command or
changed with the "c" command.  In the same way that "dd" means
delete the current line and "cc" means replace the current line,
"yy" means yank the current line.
.IP ["<a-z>][cnt]Y 16
Yank the current line or the "cnt" lines starting from the current
line.  If no buffer is specified, they will go into the "undo" buffer,
like any delete would.  It is equivalent to "yy".
Mnemonic:  \fBY\fRank
.IP ["<a-z>]p 16
Put "undo" buffer or the specified buffer down \fBafter\fR the cursor.
If whole lines were yanked or deleted into the buffer, then they will be
put down on the line following the line the cursor is on.  If
something else was deleted, like a word or sentence, then it will
be inserted immediately following the cursor.
Mnemonic:  \fBp\fRut buffer
.IP
It should be noted that text in the named buffers remains there when you
start editing a new file with the \fB:e file<esc>\fR command.  Since
this is so, it is possible to copy or delete text from one file and
carry it over to another file in the buffers.
However, the undo buffer and the ability to undo are lost when
changing files.
.IP ["<a-z>]P 16
Put "undo" buffer or the specified buffer down \fBbefore\fR the cursor.
If whole lines where yanked or deleted into the buffer, then they will be
put down on the line preceding the line the cursor is on.  If
something else was deleted, like a word or sentence, then it will
be inserted immediately preceding the cursor.
.IP [cnt]>{motion} 16
The shift operator will right shift all the text from the line on which
the cursor is located to the line where the \fBmotion\fR is located.
The text is shifted by one \fBshiftwidth\fR.  (See section 6.)
\fB>>\fR means right shift the current line or lines.
.IP [cnt]<{motion} 16
The shift operator will left shift all the text from the line on which
the cursor is located to the line where the \fBitem\fR is located.
The text is shifted by one \fBshiftwidth\fR.  (See section 6.)
\fB<<\fR means left shift the current line or lines.
Once the line has reached the left margin it is not further affected.
.IP [cnt]={motion} 16
Prettyprints the indicated area according to
.B lisp
conventions.
The area should be a lisp s-expression.
.NH 2
Miscellaneous Commands
.LP
\fBVi\fR has a number of miscellaneous commands that are very
useful.  They are:
.IP ZZ 16
This is the normal way to exit from vi.
If any changes have been made, the file is written out.
Then you are returned to the shell.
.IP ^L 16
Redraw the current screen.  This is useful if someone "write"s you
while you are in "vi" or if for any reason garbage gets onto the
screen.
.IP ^R 16
On dumb terminals, those not having the "delete line" function
(the vt100 is such a terminal), \fBvi\fR saves redrawing the
screen when you delete a line by just marking the line with an
"@" at the beginning and blanking the line.  If you want to
actually get rid of the lines marked with "@" and see what the
page looks like, typing a ^R will do this.
.IP \s+4.\s0 16
"Dot" is a particularly useful command.  It repeats the last
text modifying command.  Therefore you can type a command once and
then to another place and repeat it by just typing ".".
.IP u 16
Perhaps the most important command in the editor,
u undoes the last command that changed the buffer.
Mnemonic:  \fBu\fRndo
.IP U 16
Undo all the text modifying commands performed on the current line
since the last time you moved onto it.
.IP [cnt]J 16
Join the current line and the following line.  The <nl> is deleted
and the two lines joined, usually with a space between the
end of the first line and the beginning of what was the second
line.  If the first line ended with a "period", then two spaces
are inserted.
A count joins the next cnt lines.
Mnemonic: \fBJ\fRoin lines
.IP Q 16
Switch to \fBex\fR editing mode.
In this mode \fBvi\fR will behave very much like \fBed\fR.
The editor in this mode will operate on single lines normally and
will not attempt to keep the "window" up to date.
Once in this mode it is also possible to switch to the \fBopen\fR
mode of editing.  By entering the command \fB[line number]open<nl>\fR
you enter this mode.  It is similar to the normal visual mode
except the window is only \fBone\fR line long.
Mnemonic: \fBQ\fRuit visual mode
.IP ^] 16
An abbreviation for a tag command.
The cursor should be positioned at the beginning of a word.
That word is taken as a tag name, and the tag with that
name is found as if it had been typed in a :tag command.
.IP [cnt]!{motion}{UNIX\ cmd}<nl> 16
.br
Any UNIX filter
(e.g. command that reads the standard input and outputs something
to the standard output) can be sent a section of the current file and
have the output of the command replace the original text.  Useful
examples are programs like \fBcb\fR, \fBsort\fR, and
\fBnroff\fR.  For instance, using \fBsort\fR it would be possible to
sort a section of the current file into a new list.
Using \fB!!\fR means take a line or lines starting at the line the
cursor is currently on and pass them to the UNIX command.
.B NOTE:
To just escape to the shell for one command,
use :!{cmd}<nl>, see section 5.
.IP z{cnt}<nl> 16
This resets the current window size to "cnt" lines and redraws the screen.
.NH 2
Special Insert Characters
.LP
There are some characters that have special meanings during
insert modes.  They are:
.IP ^V 16
During inserts, typing a ^V allows you to quote control characters
into the file.  Any character typed after the ^V will be inserted
into the file.
.IP [^]^D\ or\ [0]^D 16
<^D> without any argument backs up one \fBshiftwidth\fR.  This is necessary
to remove indentation that was inserted by the \fBautoindent\fR feature.
^<^D> temporarily removes all the autoindentation, thus placing the cursor
at the left margin.  On the next line, the previous indent level will be
restored.  This is useful for putting "labels" at the left margin.
0<^D> says remove all autoindents and stay that way.  Thus the cursor
moves to the left margin and stays there on successive lines until
<tab>'s are typed.  As with the <tab>, the <^D> is only effective before
any other "non-autoindent" controlling characters are typed.
Mnemonic: \fBD\fRelete a shiftwidth
.IP ^W 16
If the cursor is sitting on a word, <^W> moves the cursor back to the beginning
of the word, thus erasing the word from the insert.
Mnemonic: erase \fBW\fRord
.IP <bs> 16
The backspace always serves as an erase during insert modes in addition
to your normal "erase" character.  To insert a <bs> into your file, use
the <^V> to quote it.
.NH 1
\fB:\fR Commands
.LP
Typing a ":" during command mode causes \fBvi\fR to put the cursor at
the bottom on the screen in preparation for a command.  In the
":" mode, \fBvi\fR can be given most \fBed\fR commands.  It is
also from this mode that you exit from \fBvi\fR or switch to different
files.  All commands of this variety are terminated by a <nl>, <cr>,
or <esc>.
.IP ":w[!] [file]" 16
Causes \fBvi\fR to write out the current text to the disk.  It is
written to the file you are editing unless "file" is supplied.  If
"file" is supplied, the write is directed to that file instead.  If
that file already exists, \fBvi\fR will not perform the write unless
the "!" is supplied indicating you
.I really
want to destroy the older copy of the file.
.IP :q[!] 16
Causes \fBvi\fR to exit.  If you have modified the file you are
looking at currently and haven't written it out, \fBvi\fR will
refuse to exit unless the "!" is supplied.
.IP ":e[!] [+[cmd]] [file]" 16
.sp 1
Start editing a new file called "file" or start editing the current
file over again.  The command ":e!" says "ignore the changes I've made
to this file and start over from the beginning".  It is useful if
you really mess up the file.  The optional "+" says instead of starting
at the beginning, start at the "end", or,
if "cmd" is supplied, execute "cmd" first.
Useful cases of this are where cmd is "n" (any integer) which starts
at line number n,
and "/text", which searches for "text" and starts at the line where
it is found.
.IP "^^" 16
Switch back to the place you were before your last tag command.
If your last tag command stayed within the file, ^^ returns to that tag.
If you have no recent tag command, it will return to the
same place in the previous file that it was showing when you switched
to the current file.
.IP ":n[!]" 16
Start editing the next file in the argument list.  Since \fBvi\fR
can be called with multiple file names, the ":n" command tells it to
stop work on the current file and switch to the next file.  If the
current file was modifies, it has to be written out before the ":n"
will work or else the "!" must be supplied, which says discard the
changes I made to the current file.
.IP ":n[!] file [file file ...]" 16
.sp
Replace the current argument list with a new list of files and start
editing the first file in this new list.
.IP ":r file" 16
Read in a copy of "file" on the line after the cursor.
.IP ":r !cmd" 16
Execute the "cmd" and take its output and put it into the file after
the current line.
.IP ":!cmd" 16
Execute any UNIX shell command.
.IP ":ta[!] tag" 16
.B Vi
looks in the file named
.B tags
in the current directory.
.B Tags
is a file of lines in the format:
.sp 1
.ti +8
tag filename \fBvi\fR-search-command
.sp 1
If \fBvi\fR finds the tag you specified in the \fB:ta\fR command,
it stops editing the current file if necessary and if the current file is
up to date on the disk and switches to the file specified and uses the
search pattern specified to find the "tagged" item of interest.  This
is particularly useful when editing multi-file C programs such as the
operating system.  There is a program called \fBctags\fR which will
generate an appropriate \fBtags\fR file for C and f77
programs so that by saying
\fB:ta function<nl>\fR you will be switched to that function.
It could also be useful when editing multi-file documents, though the
\fBtags\fR file would have to be generated manually.
.NH 1
Special Arrangements for Startup
.PP
\fBVi\fR takes the value of \fB$TERM\fR and looks up the characteristics
of that terminal in the file \fB/etc/termcap\fR.
If you don't know \fBvi\fR's name for the terminal you are working
on, look in \fB/etc/termcap\fR.
.PP
When \fBvi\fR starts, it attempts to read the variable EXINIT
from your environment.*
If that exists, it takes the values in it as the default values
for certain of its internal constants.  See the section on "Set Values"
for further details.
If EXINIT doesn't exist you will get all the normal defaults.
.FS
* On version 6 systems
Instead of EXINIT, put the startup commands in the file .exrc
in your home directory.
.FE
.PP
Should you inadvertently hang up the phone while inside
.B vi ,
or should the computer crash,
all may not be lost.
Upon returning to the system, type:
.DS
vi \-r file
.DE
This will normally recover the file.  If there is more than one
temporary file for a specific file name, \fBvi\fR recovers the
newest one.  You can get an older version by recovering the
file more than once.
The command "vi -r" without a file name gives you the list of files
that were saved in the last system crash
(but
.I not
the file just saved when the phone was hung up).
.NH 1
Set Commands
.LP
\fBVi\fR has a number of internal variables and switches which can be
set to achieve special affects.
These options come in three forms, those that are switches, which toggle
from off to on and back, those that require a numeric value, and those
that require an alphanumeric string value.
The toggle options are set by a command of the form:
.DS
:set option<nl>
.DE
and turned off with the command:
.DS
:set nooption<nl>
.DE
Commands requiring a value are set with a command of the form:
.DS
:set option=value<nl>
.DE
To display the value of a specific option type:
.DS
:set option?<nl>
.DE
To display only those that you have changed type:
.DS
:set<nl>
.DE
and to display the long table of all the settable parameters and
their current values type:
.DS
:set all<nl>
.DE
.PP
Most of the options have a long form and an abbreviation.  Both are
listed in the following table as well as the normal default value.
.PP
To arrange to have values other than the default used every time you
enter
.B vi ,
place the appropriate
.B set
command in EXINIT in your environment, e.g.
.DS
EXINIT='set ai aw terse sh=/bin/csh'
export EXINIT
.DE
or
.DS
setenv EXINIT 'set ai aw terse sh=/bin/csh'
.DE
for
.B sh
and
.B csh ,
respectively.
These are usually placed in your .profile or .login.
If you are running a system without environments (such as version 6)
you can place the set command in the file .exrc in your home
directory.
.IP autoindent\ ai 16
Default: noai Type: toggle
.br
When in autoindent mode, vi helps you indent code by starting each
line in the same column as the preceding line.
Tabbing to the right with <tab> or <^T> will move this boundary to
the right, and it can be moved to the left with <^D>.
.IP autoprint\ ap 16
Default: ap Type: toggle
.br
Causes the current line to be printed after each ex text modifying command.
This is not of much interest in the normal \fBvi\fR visual mode.
.IP autowrite\ aw 16
Default: noaw type: toggle
.br
Autowrite causes an automatic write to be done if there are unsaved
changes before certain commands which change files or otherwise
interact with the outside world.
These commands are :!, :tag, :next, :rewind, ^^, and ^].
.IP beautify\ bf 16
Default: nobf Type: toggle
.br
Causes all control characters except <tab>, <nl>, and <ff> to be discarded.
.IP directory\ dir 16
Default: dir=/tmp Type: string
.br
This is the directory in which \fBvi\fR puts its temporary file.
.IP errorbells\ eb 16
Default: noeb Type: toggle
.br
Error messages are preceded by a <bell>.
.IP hardtabs\ ht 16
Default: hardtabs=8 Type: numeric
.br
This option contains the value of hardware tabs in your terminal, or
of software tabs expanded by the Unix system.
.IP ignorecase\ ic 16
Default: noic Type: toggle
.br
All upper case characters are mapped to lower case in regular expression
matching.
.IP lisp 16
Default: nolisp Type: toggle
.br
Autoindent for \fBlisp\fR code.  The commands \fB( ) [[\fR and \fB]]\fR
are modified appropriately to affect s-expressions and functions.
.IP list 16
Default: nolist Type: toggle
.br
All printed lines have the <tab> and <nl> characters displayed visually.
.IP magic 16
Default: magic Type: toggle
.br
Enable the metacharacters for matching.  These include \fB. * < > [string]
[^string]\fR and \fB[<chr>-<chr>]\fR.
.IP number\ nu 16
Default: nonu Type: toggle
.br
Each line is displayed with its line number.
.IP open 16
Default: open Type: toggle
.br
When set, prevents entering open or visual modes from ex or edit.
Not of interest from vi.
.IP optimize\ opt 16
Default: opt Type: toggle
.br
Basically of use only when using the \fBex\fR capabilities.  This
option prevents automatic <cr>s from taking place,
and speeds up output of indented lines,
at the expense of losing typeahead on some versions of UNIX.
.IP paragraphs\ para 16
Default: para=IPLPPPQPP\ bp Type: string
.br
Each pair of characters in the string indicate \fBnroff\fR macros
which are to be treated as the beginning of a paragraph for the
\fB{\fR and \fB}\fR commands.  The default string is for the \fB-ms\fR
and \fB-mm\fR macros.
To indicate one letter \fBnroff\fR macros, such as \fB.P\fR or \fB.H\fR,
quote a space in for the second character position.  For example:
.sp 1
.ti +8
:set paragraphs=P\e bp<nl>
.sp 1
would cause \fBvi\fR to consider \fB.P\fR and \fB.bp\fR as paragraph
delimiters.
.IP prompt 16
Default: prompt Type: toggle
.br
In
.B ex
command mode the prompt character \fB:\fR will be printed when
\fBex\fR is waiting for a command.  This is not of interest from vi.
.IP redraw 16
Default: noredraw Type: toggle
.br
On dumb terminals, force the screen to always be up to date,
by sending great amounts of output.  Useful only at high speeds.
.IP report 16
Default: report=5 Type: numeric
.br
This sets the threshold for the number of lines modified.  When
more than this number of lines are modified, removed, or yanked,
\fBvi\fR will report the number of lines changed at the bottom of
the screen.
.IP scroll 16
Default: scroll={1/2 window} Type: numeric
.br
This is the number of lines that the screen scrolls up or down when
using the <^U> and <^D> commands.
.IP sections 16
Default: sections=SHNHH HU Type: string
.br
Each two character pair of this string specify \fBnroff\fR macro names
which are to be treated as the beginning of a section by the
\fB]]\fR and \fB[[\fR commands.  The default string is for the \fB-ms\fR
and \fB-mm\fR macros.
To enter one letter \fBnroff\fR macros, use a quoted space as the
second character.
See \fBparagraphs\fR for a fuller explanation.
.IP shell\ sh 16
Default: sh=from environment SHELL or /bin/sh   Type: string
.br
This is the name of the \fBsh\fR to be used for "escaped" commands.
.IP shiftwidth\ sw 16
Default: sw=8 Type: numeric
.br
This is the number of spaces that a <^T> or <^D> will move over for
indenting, and the amount < and > shift by.
.IP showmatch\ sm 16
Default: nosm Type: toggle
.br
When a \fB)\fR or \fB}\fR is typed, show the matching \fB(\fR or \fB{\fR
by moving the cursor to it for one second if it is on the current screen.
.IP slowopen\ slow 16
Default: terminal dependent Type: toggle
.br
On terminals that are slow and unintelligent, this option prevents the
updating of the screen some of the time to improve speed.
.IP tabstop\ ts 16
Default: ts=8 Type: numeric
.br
<tab>s are expanded to boundaries that are multiples of this value.
.IP taglength\ tl 16
Default: tl=0 Type: numeric
.br
If nonzero, tag names are only significant to this many characters.
.IP term 16
Default: (from environment \fBTERM\fP, else dumb) Type: string
.br
This is the terminal and controls the visual displays.  It cannot be
changed when in "visual" mode,
you have to Q to command mode, type a
set term command, and do ``vi.'' to get back into visual.
Or exit vi, fix $TERM, and reenter.
The definitions that drive a particular
terminal type are found in the file \fB/etc/termcap\fR.
.IP terse 16
Default: terse Type: toggle
.br
When set, the error diagnostics are short.
.IP warn 16
Default: warn Type: toggle
.br
The user is warned if she/he tries to escape to
the shell without writing out the current changes.
.IP window 16
Default: window={8 at 600 baud or less, 16 at 1200 baud, and screen
size \- 1 at 2400 baud or more} Type: numeric
.br
This is the number of lines in the window whenever \fBvi\fR must redraw
an entire screen.  It is useful to make this size smaller if you are
on a slow line.
.IP w300,\ w1200,\ w9600
.br
These set window, but only within the corresponding speed ranges.
They are useful in an EXINIT to fine tune window sizes.
For example,
.DS
set w300=4 w1200=12
.DE
causes a 4 lines window at speed up to 600 baud, a 12 line window at 1200
baud, and a full screen (the default) at over 1200 baud.
.IP wrapscan\ ws 16
Default: ws Type: toggle
.br
Searches will wrap around the end of the file when is option is set.  When
it is off, the search will terminate when it reaches the end or the
beginning of the file.
.IP wrapmargin\ wm 16
Default: wm=0 Type: numeric
.br
\fBVi\fR will automatically insert a <nl> when it finds a natural
break point (usually a <sp> between words) that occurs within
"wm" spaces of the right margin.
Therefore with "wm=0" the option is off.  Setting it to 10 would
mean that any time you are within 10 spaces of the right margin
\fBvi\fR would be looking for a <sp> or <tab> which it could
replace with a <nl>.  This is convenient for people who forget
to look at the screen while they type.
(In version 3, wrapmargin behaves more like nroff, in that the
boundary specified by the distance from the right edge of the screen
is taken as the rightmost edge of the area where a break is allowed,
instead of the leftmost edge.)
.IP writeany\ wa 16
Default: nowa Type: toggle
.br
\fBVi\fR normally makes a number of checks before it writes out a file.
This prevents the user from inadvertently destroying a file.  When the
"writeany" option is enabled, \fBvi\fR no longer makes these checks.