File: vim-01-beginner.tutor

package info (click to toggle)
vim 2%3A9.2.0218-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 96,428 kB
  • sloc: ansic: 435,795; cpp: 6,445; makefile: 4,644; sh: 2,569; java: 2,488; xml: 2,099; python: 1,716; perl: 1,419; awk: 730; lisp: 501; cs: 458; objc: 369; sed: 35; csh: 9; haskell: 1
file content (907 lines) | stat: -rw-r--r-- 30,824 bytes parent folder | download
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
#             欢   迎   来   到   VIM   教   程

#                       第   一   章

Vim 是一个功能非常强大的编辑器,有很多命令,多得没法在这样的教程里全部讲完。
本教程旨在介绍足够多的命令,让你能轻松把 Vim 当作通用编辑器使用。
**重要提示**:请记住,本教程是通过实际操作来教学的。这意味着你需要做练习才能正
确掌握。如果只是阅读文字,很快你就会忘记最重要的部分!

现在,请确保你的大写锁定键**没有**被按下,然后多次按 j 键,移动光标,直到 “第 0 课”
完全填满屏幕。

# 第 0 课

注意:课程中的命令会修改文本,但这些改动**不会**被保存。不用担心搞乱内容;只需记住,
按 [<Esc>](<Esc>) 然后按 [u](u) 可以撤销最新的修改。

本教程是交互式的,有几件事你需要知道:
- 在[像这样的链接](holy-grail)上按 [<Enter>](<Enter>) 可以打开链接的帮助部分。
- 或者直接在任何一个单词上按 [K](K) 来查找它的文档!
- 有时会要求你修改
这样的文本。
当你正确完成更改,左侧的 ✗ 标志会变成 ✓。我想你已经能感觉到 Vim 有多棒了。;)
其他时候,系统会提示你运行一个命令(稍后会解释):
~~~ cmd
    :help <Enter>
~~~
或者按一系列键
~~~ normal
    <Esc>0f<Space>d3wP$P
~~~

在 < 和 > 之间的文本(比如 `<Enter>`{normal})描述的是需要按下的键,而不是要输入的文本。

现在,移动到下一课(用 `j`{normal} 键向下滚动)。

# 第 1.1 课:移动光标

** 要移动光标,请按照指示按 `h`、`j`、`k`、`l` 键。 **

         k          提示:`h`{normal} 键在左边,向左移动。
     ← h   l →            `l`{normal} 键在右边,向右移动。
         j                `j`{normal} 键看起来像一个向下的箭头。

  1. 在屏幕上随意移动光标,直到你感觉熟练为止。

  2. 按住向下键(`j`{normal}),直到它开始重复移动。
     现在你知道如何进入下一课了。

  3. 使用向下键,移动到第 1.2 课。

注意:如果你不确定自己输入了什么,按 <Esc> 进入普通模式。然后重新输入你想输入的
      命令。

注意:方向键也应该能用。但是一旦你习惯了使用 hjkl,你就能移动得更快。真的!

# 第 1.2 课:退出 Vim

!!注意:在执行下面的任何步骤之前,请先阅读完整课内容!!

 1. 按 <Esc> 键(以确保你处于普通模式)。

 2. 输入:

    `:q!`{vim} `<Enter>`{normal}.

     这会退出编辑器,并**丢弃**你所做的任何更改。

 3. 打开 vim,并通过执行将你带入此教程的命令回到这里。那可能是:

     :Tutor <Enter>

 4. 如果你记住了这些步骤并且有信心,请执行步骤 1 到 3 来退出并重新进入编辑器。

注意:[:q!](:q) <Enter> 会丢弃你所做的任何更改。在后面的课程中,你将学习如何将
      更改保存到文件。

 5. 将光标向下移动到第 1.3 课。

# 第 1.3 课:文本编辑 - 删除

** 按 `x`{normal} 删除光标下的字符。 **

 1. 将光标移动到下面标记为 ✗ 的那一行。

 2. 要修正错误,移动光标直到它位于要删除的字符上。

 3. 按 [x 键](x) 删除不需要的字符。

 4. 重复步骤 2 到 4,直到句子正确为止。

The ccow jumpedd ovverr thhe mooon.

 5. 现在这一行已经正确,继续第 1.4 课。

注意:在学习本教程时,不要试图死记硬背,要通过使用来学习。

# 第 1.4 课:文本编辑:插入

** 按 `i`{normal} 来插入文本。 **

 1. 将光标移动到下面标记为 ✗ 的第一行。

 2. 为了使第一行与第二行相同,将光标移动到要插入文本的位置之后的**第一个字符**上。

 3. 按 `i`{normal} 并输入必要的添加内容。

 4. 每修正一个错误后,按 `<Esc>`{normal} 返回普通模式。重复步骤 2 到 4 来纠正句子。

There is text misng this .
There is some text missing from this line.

 5. 当你熟悉插入文本后,移动到第 1.5 课。

# 第 1.5 课:文本编辑:追加

** 按 `A`{normal} 来追加文本。 **

 1. 将光标移动到下面标记为 ✗ 的第一行。光标在该行的哪个字符上并不重要。

 2. 按 [A](A) 并输入必要的添加内容。

 3. 文本追加完成后,按 `<Esc>`{normal} 返回普通模式。

 4. 将光标移动到第二个标记为 ✗ 的行,重复步骤 2 和 3 来纠正这个句子。

There is some text missing from th
There is some text missing from this line.
There is also some text miss
There is also some text missing here.

 5. 当你熟悉追加文本后,移动到第 1.6 课。

# 第 1.6 课:编辑文件

** 使用 `:wq`{vim} 来保存文件并退出。 **

!!注意:在执行下面的任何步骤之前,请先阅读完整课内容!!

 1. 像在第 1.2 课中那样退出本教程:`:q!`{vim}
    或者,如果你可以访问另一个终端,请在那里进行以下操作。

 2. 在 shell 提示符下输入以下命令:
~~~ sh
     $ vim tutor
~~~
    'vim' 是启动 Vim 编辑器的命令,'tutor' 是你希望编辑的文件名。使用一个可以更
    改的文件。

 3. 按照前面课程所学插入和删除文本。

 4. 保存更改并退出 Vim:
~~~ cmd
     :wq
~~~

    注意,你需要按 `<Enter>` 来执行命令。

 5. 如果你在步骤 1 中退出了 vimtutor,请重新启动 vimtutor 并向下移动到以下总结
    部分。

 6. 阅读并理解上述步骤后:动手做吧。

# 第 1 课总结

 1. 要移动光标,可以使用方向键或 hjkl 键。
     h (left)   j (down)       k (up)       l (right)

 2. 要从 shell 提示符启动 Vim,输入:
~~~ sh
    $ vim FILENAME
~~~
 3. 要退出 Vim,输入:`<Esc>`{normal} `:q!`{vim} `<Enter>`{normal} 来丢弃所有更改。
                或者输入:`<Esc>`{normal} `:wq`{vim} `<Enter>`{normal} 来保存更改。

 4. 要删除光标处的字符,输入:`x`{normal}

 5. 要插入或追加文本,输入:
    `i`{normal} 插入文本 `<Esc>`{normal}     在光标前插入。
    `A`{normal} 追加文本 `<Esc>`{normal}     在行尾追加。

注意:按 `<Esc>`{normal} 将使你进入普通模式,或取消一个不需要且未完成的命令。

现在继续第 2 课。

# 第 2.1 课:删除命令

** 输入 `dw`{normal} 来删除一个单词。 **

 1. 按 `<Esc>`{normal} 以确保你处于普通模式。

 2. 将光标移动到下面标记为 ✗ 的行。

 3. 将光标移动到需要删除的单词的开头。

 4. 输入 [d](d)[w](w) 让该单词消失。

There are a some words fun that don't belong paper in this sentence.

 5. 重复步骤 3 和 4,直到句子正确,然后前往第 2.2 课。

# 第 2.2 课:更多删除命令

** 输入 `d$`{normal} 来删除到行尾。 **

 1. 按 `<Esc>`{normal} 以确保你处于普通模式。

 2. 将光标移动到下面标记为 ✗ 的行。

 3. 将光标移动到正确行的末尾(在第一个 . 之后)。

 4. 输入 `d$`{normal} 删除到行尾。

Somebody typed the end of this line twice. end of this line twice.

 5. 前往第 2.3 课以了解发生了什么。

# 第 2.3 课:关于操作符和动作

许多更改文本的命令由一个[操作符](operator)和一个[动作](navigation)组成。
使用 [d](d) 删除操作符的删除命令格式如下:

    d   动作

  其中:
    d      - 是删除操作符。
    动作   - 是操作符将要操作的对象(见下文)。

  动作的简短列表:
    [w](w) - 直到下一个单词的开头,**不包括**其第一个字符。
    [e](e) - 到当前单词的结尾,**包括**最后一个字符。
    [$]($) - 到行尾,**包括**最后一个字符。

  因此,输入 `de`{normal} 将从光标删除到单词末尾。

注意:在普通模式下,只按动作键(不带操作符)将按指定方式移动光标。

# 第 2.4 课:对动作使用计数

** 在动作前输入数字可以使其重复多次。 **

 1. 将光标移动到下面标记为 ✓ 的行的开头。

 2. 输入 `2w`{normal} 将光标向前移动两个单词。

 3. 输入 `3e`{normal} 将光标移动到向前第三个单词的末尾。

 4. 输入 `0`{normal} ([0](0)) 移动到行首。

 5. 用不同的数字重复步骤 2 和 3。

This is just a line with words you can move around in.

 6. 前往第 2.5 课。

# 第 2.5 课:使用计数来删除更多

** 在操作符前输入数字可以使其重复多次。 **

在上面提到的删除操作符和动作的组合中,你可以在动作前插入一个计数来删除更多:
     d   数字   动作

 1. 将光标移动到标记为 ✗ 的行中的第一个大写单词上。

 2. 输入 `d2w`{normal} 删除两个大写单词。

 3. 使用不同的计数重复步骤 1 和 2,用一个命令删除连续的大写单词。

This ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.

# 第 2.6 课:对整行进行操作

** 输入 `dd`{normal} 删除整行。 **

由于删除整行的频率很高,Vi 的设计者认为简单地输入两个 d 来删除一行会更方便。

 1. 将光标移动到下面短语的第二行。
 2. 输入 [dd](dd) 删除该行。
 3. 现在移动到第四行。
 4. 输入 `2dd`{normal} 删除两行。

1)  Roses are red,
2)  Mud is fun,
3)  Violets are blue,
4)  I have a car,
5)  Clocks tell time,
6)  Sugar is sweet
7)  And so are you.

# 第 2.7 课:撤销命令

** 按 `u`{normal} 撤销上一个命令,按 `U`{normal} 修复整行。 **

 1. 将光标移动到下面标记为 ✗ 的行,并将其放在第一个错误上。
 2. 输入 `x`{normal} 删除第一个不需要的字符。
 3. 现在输入 `u`{normal} 撤销最后执行的命令。
 4. 这次使用 `x`{normal} 命令修复该行上的所有错误。
 5. 现在输入大写的 `U`{normal} 将该行恢复到原始状态。
 6. 现在多次输入 `u`{normal} 来撤销 `U`{normal} 及之前的命令。
 7. 现在多次输入 `<C-r>`{normal} (Control + R) 来重做命令(撤销撤销操作)。

Fiix the errors oon thhis line and reeplace them witth undo.

 8. 这些是非常有用的命令。现在前往第 2 课总结。

# 第 2 课总结

 1. 要从光标删除到下一个单词,输入:     `dw`{normal}
 2. 要从光标删除到行尾,输入:           `d$`{normal}
 3. 要删除整行,输入:                   `dd`{normal}
 4. 要重复一个动作,在其前面加上数字:   `2w`{normal}

 5. 更改命令的格式是:
               操作符   [数字]   动作
    where:
       操作符 -   是要做什么,例如 [d](d) 表示删除
       [数字] -   是可选的计数,用于重复动作
       动作   -   指定操作要覆盖的文本范围,例如:
                        [w](w) (单词),
                        [$]($) (到行尾), 等等。

 6. 要移动到行首,使用零:[0](0)

 7. 要撤销之前的操作,输入:            `u`{normal}  (小写 u)
    要撤销一行上的所有更改,输入:       `U`{normal}  (大写 U)
    要重做(撤销撤销操作),输入:        `<C-r>`{normal}

# 第 3.1 课:放置命令

** 输入 `p`{normal} 将先前删除的文本放到光标之后。 **

 1. 将光标移动到下面第一个标记为 ✓ 的行。

 2. 输入 `dd`{normal} 删除该行并将其存储在 Vim 寄存器中。

 3. 将光标移动到 c) 行,放在被删除行应该放置的位置**之上**。

 4. 输入 `p`{normal} 将行放在光标下方。

 5. 重复步骤 2 到 4,将所有行按正确顺序放置。

d) Can you learn too?
b) Violets are blue,
c) Intelligence is learned,
a) Roses are red,

# 第 3.2 课:替换命令

** 输入 `rx`{normal} 用 x 替换光标处的字符。 **

 1. 将光标移动到下面标记为 ✗ 的第一行。

 2. 移动光标,使其位于第一个错误上。

 3. 输入 `r`{normal},然后输入应该在那里的字符。

 4. 重复步骤 2 和 3,直到第一行与第二行相同。

Whan this lime was tuoed in, someone presswd some wrojg keys!
When this line was typed in, someone pressed some wrong keys!

 5. 现在前往第 3.3 课。

注意:记住你应该通过动手做来学习,而不是死记硬背。

# 第 3.3 课:更改操作符

** 要更改到单词末尾,输入 `ce`{normal}。 **

 1. 将光标移动到下面标记为 ✗ 的第一行。

 2. 将光标放在 "lubw" 的 "u" 上。

 3. 输入 `ce`{normal} 和正确的单词(在这里,输入 "ine")。

 4. 按 `<Esc>`{normal} 并移动到下一个需要更改的字符。

 5. 重复步骤 3 和 4,直到第一个句子与第二个相同。

This lubw has a few wptfd that mrrf changing usf the change operator.
This line has a few words that need changing using the change operator.

注意:[c](c)e 会删除单词并使你进入插入模式。

# 第 3.4 课:使用 `c`{normal} 进行更多更改

** 更改操作符与删除使用相同的动作。 **

 1. 更改操作符的工作方式与删除相同。格式是:

         c    [数字]   动作

 2. 动作是相同的,例如 `w`{normal} (单词) 和 `$`{normal} (行尾)。

 3. 移动到下面标记为 ✗ 的第一行。

 4. 将光标移动到第一个错误。

 5. 输入 `c$`{normal} 并像第二行那样输入该行的其余部分,然后按 `<Esc>`{normal}。

The end of this line needs some help to make it like the second.
The end of this line needs to be corrected using the c$ command.

注意:你可以在输入时使用退格键来纠正错误。

# 第 3 课总结

 1. 要放回刚刚删除的文本,输入 [p](p)。这会将删除的文本放在光标**之后**(如果删除了一行,
    它将放在光标下方的那一行)。

 2. 要替换光标下的字符,输入 [r](r),然后输入你想要的字符。

 3. [更改操作符](c) 允许你从光标处更改到动作指定的位置。输入 `ce`{normal} 从光标更改到单词末尾,
    `c$`{normal} 更改到行尾。

 4. 更改的格式是:

     c   [数字]   动作

现在前往下一课。

# 第 4.1 课:光标位置和文件状态

** 输入 `<C-g>`{normal} 以显示你在文件中的位置和文件状态。
 输入 `{行号}G`{normal} 以移动到文件中的第 {行号} 行。 **

注意:在执行任何步骤之前,请阅读完整课内容!!

 1. 按住 `<Ctrl>`{normal} 键并按下 `g`{normal}。我们称之为 `<C-g>`{normal}。页面底部会出现一条消息,显示文件
    名和文件中的位置。记住步骤 3 所需的行号。

注意:你可能会在屏幕右下角看到光标位置。当 ['ruler']('ruler') 选项被设置
时,就会发生这种情况。
 2. 按 [G](G) 移动到文件底部。
    输入 [gg](gg) 移动到文件开头。

 3. 输入你所在的行号,然后输入 `G`{normal}。这将使你返回到第一次按 `<C-g>`{normal} 时所在的行。

 4. 如果你有信心,请执行步骤 1 到 3。

# 第 4.2 课:搜索命令

** 输入 `/`{normal} 后跟短语以搜索该短语。 **

 1. 在普通模式下输入 `/`{normal} 字符。注意它和光标会像 `:`{normal} 命令一样出现在屏幕底部。

 2. 现在输入 'errroor' `<Enter>`{normal}。这是你要搜索的单词。

 3. 要再次搜索相同的短语,只需输入 [n](n)。
    要朝相反方向搜索相同的短语,输入 [N](N)。

 4. 要向后搜索短语,使用 [?](?) 代替 `/`{normal}。

 5. 要返回到你来的地方,按 `<C-o>`{normal}(按住 `<Ctrl>`{normal} 同时按下字母 `o`{normal})。重复按可以返回
 更早的位置。`<C-i>`{normal} 向前移动。

"errroor" is not the way to spell error; errroor is an error.

注意:当搜索到达文件末尾时,除非 ['wrapscan']('wrapscan') 选项被重置,否则它会从文件开头继续。


# 第 4.3 课:匹配括号搜索

** 输入 `%`{normal} 以找到匹配的 )、] 或 }。 **

 1. 将光标放在下面标记为 ✓ 的行中的任意 (、[ 或 { 上。

 2. 现在输入 [%](%) 字符。

 3. 光标将移动到匹配的括号或方括号。

 4. 输入 `%`{normal} 将光标移动到另一个匹配的括号。

 5. 将光标移动到另一个 (, ), [, ], { 或 } 上,看看 `%`{normal} 会做什么。

This ( is a test line with ('s, ['s ] and {'s } in it. ))

注意:这对于调试括号不匹配的程序非常有用!

# 第 4.4 课:替换命令

** 输入 `:s/旧文本/新文本/g` 以用“新文本”替换“旧文本”。 **

 1. 将光标移动到下面标记为 ✗ 的行。

 2. 输入
~~~ cmd
    :s/thee/the/
~~~
    注意 [:s](:s) 命令只更改了行中第一个 "thee" 的出现。

 3. 现在输入
~~~ cmd
     :s/thee/the/g
~~~
    添加 g [标志](:s_flags) 意味着在行中全局替换,更改行中所有 "thee" 的出现。

Usually thee best time to see thee flowers is in thee spring.

 4. 要更改两行之间的每个字符串出现,输入
~~~ cmd
     :#,#s/旧文本/新文本/g
~~~
    其中 #,# 是要进行替换的行范围的行号。

    输入
~~~ cmd
    :%s/旧文本/新文本/g
~~~
    以更改整个文件中的每个出现。

    输入
~~~ cmd
    :%s/旧文本/新文本/gc
~~~
    以查找整个文件中的每个匹配,并提示是否替换。

# 第 4 课总结

 1. `<C-g>`{normal}     显示你的位置和文件状态。
    `G`{normal}         移动到文件末尾。
    行号 `G`{normal}    移动到该行号。
    `gg`{normal}        移动到第一行。

 2. 输入 `/`{normal} 后跟短语向前搜索该短语。
    输入 `?`{normal} 后跟短语向后搜索该短语。
    搜索后输入 `n`{normal} 以在同一方向查找下一个出现,或输入 `N`{normal} 以朝相反方向搜索。
    `<C-o>`{normal} 带你回到较早的位置,`<C-i>`{normal} 到较新的位置。

 3. 当光标在 (, ), [, ], {, 或 } 上时,输入 `%`{normal} 会跳转到其匹配项。

 4. 要用新文本替换行中的第一个旧文本,输入
~~~ cmd
        :s/旧文本/新文本
~~~
    要用新文本替换行中的所有旧文本,输入
~~~ cmd
        :s/旧文本/新文本/g
~~~
    要替换两个行号之间的短语,输入
~~~ cmd
        :#,#s/旧文本/新文本/g
~~~
    要替换文件中的所有出现,输入
~~~ cmd
        :%s/旧文本/新文本/g
~~~
    要每次询问确认,添加 'c'
~~~ cmd
        :%s/旧文本/新文本/gc
~~~

# 第 5.1 课:如何执行外部命令

** 输入 `:!`{vim} 后跟外部命令以执行该命令。 **

 1. 输入熟悉的命令 `:`{normal} 将光标设置在屏幕底部。这允许你输入命令行命令。

 2. 现在输入 [!](!cmd)(感叹号)字符。这允许你执行任何外部 shell 命令。

 3. 例如,在 "!" 后面输入 "ls",然后按 `<Enter>`{normal}。这将显示你目录的列表,
    就像你在 shell 提示符下一样。

注意:可以通过这种方式执行任何外部命令,也可以带参数。

注意:所有 `:`{vim} 命令必须通过按 `<Enter>`{normal} 来完成。从现在起,我们不会总是提到这一点。

# 第 5.2 课:关于写入文件的更多内容

** 要保存对文本所做的更改,输入 `:w`{vim} 文件名。 **

 1. 输入 `:!ls`{vim} 获取你目录的列表。你已经知道之后必须按 `<Enter>`{normal}。

 2. 选择一个尚不存在的文件名,例如 TEST。

 3. 现在输入:
~~~ cmd
        :w TEST
~~~
   (其中 TEST 是你选择的文件名。)

 4. 这将整个文件(Vim 教程)以 TEST 为名保存。要验证这一点,再次输入 `:!ls`{vim} 查看
    你的目录。

注意:如果你退出 Vim 并用 `vim TEST` 重新启动,该文件将是你保存时教程的精确副本。

 5. 现在通过输入以下命令删除该文件:
~~~ cmd
        :!rm TEST
~~~

# 第 5.3 课:选择要写入的文本

** 要保存文件的一部分,输入 `v`{normal} 动作 `:w 文件名`{vim}。 **

 1. 将光标移动到本行。

 2. 按 [v](v) 并将光标移动到下面第五个项目。注意文本被高亮显示。

 3. 按 `:`{normal} 字符。屏幕底部会出现

        :'<,'>

 4. 输入

        `:w TEST`{vim}

    其中 TEST 是一个尚不存在的文件名。验证在按 `<Enter>`{normal} 之前你看到的是

        `:'<,'>w TEST`{vim}

 5. Vim 会将选定的行写入文件 TEST。使用 `:!ls`{vim} 查看它。先不要删除它!我们
    将在下一课中使用它。

注意:按 [v](v) 启动[可视选择](visual-mode)。你可以移动光标来扩大或缩小选择范围。
然后你可以使用操作符对文本执行操作。例如,`d`{normal} 删除文本。

# 第 5.4 课:检索和合并文件

** 要插入文件的内容,输入 `:r 文件名`{vim}。 **

 1. 将光标放在本行上方。

注意:执行步骤 2 后,你将看到第 5.3 课的文本。然后向下移动以再次看到本课。

 2. 现在使用以下命令检索你的 TEST 文件

        `:r TEST`{vim}

     其中 TEST 是你使用的文件名。检索到的文件放在光标行的下方。

 3. 要验证文件已被检索,将光标移回并注意现在有两个第 5.3 课的副本,原始版本和文
    件版本。

注意:你也可以读取外部命令的输出。例如,

        `:r !ls`{vim}

     读取 `ls` 命令的输出并将其放在光标下方。

# 第 5 课总结

 1. [:!命令](:!cmd) 执行外部命令。

     一些有用的例子是:
     `:!ls`{vim}              - 显示目录列表
     `:!rm 文件名`{vim}       - 删除文件 FILENAME

 2. [:w](:w) 文件名            将当前 Vim 文件以文件名保存到磁盘。

 3. [v](v)  动作  :w 文件名   将可视选择的行保存到文件 FILENAME。

 4. [:r](:r) 文件名            从磁盘检索文件 FILENAME 并将其放在光标位置下方。

 5. [:r !dir](:r!)              读取 dir 命令的输出并将其放在光标位置下方。

# 第 6.1 课:打开命令

** 输入 `o`{normal} 以在光标下方打开一行并使你进入插入模式。 **

 1. 将光标移动到下面标记为 ✓ 的行。

 2. 输入小写字母 `o`{normal} 以在光标**下方**[打开](o)一行并使你进入插入模式。

 3. 现在输入一些文本并按 `<Esc>`{normal} 退出插入模式。

输入 `o`{normal} 后,光标被置于打开的行上,处于插入模式。

 4. 要在光标**上方**打开一行,只需输入[大写 O](O),而不是小写 `o`{normal}。在下面一行试试。

在此行上方打开一行,在光标位于此行时输入 O。

# 第 6.2 课:追加命令

** 输入 `a`{normal} 以在光标**之后**插入文本。 **

 1. 将光标移动到下面标记为 ✗ 的行的开头。

 2. 按 `e`{normal} 直到光标位于 "li" 的末尾。

 3. 输入小写字母 `a`{normal} 以在光标**之后**[追加](a)文本。

 4. 像下面那行一样完成单词。按 `<Esc>`{normal} 退出插入模式。

 5. 使用 `e`{normal} 移动到下一个不完整的单词,重复步骤 3 和 4。

This li will allow you to pract appendi text to a line.
This line will allow you to practice appending text to a line.

注意:[a](a)、[i](i) 和 [A](A) 都进入相同的插入模式,唯一的区别是字符插入的位置。

# 第 6.3 课:另一种替换方式

** 输入大写 `R`{normal} 以替换多个字符。 **

 1. 将光标移动到下面标记为 ✗ 的第一行。将光标移动到第一个 "xxx" 的开头。

 2. 现在按 `R`{normal} ([大写 R](R)) 并输入第二行中它下面的数字,以替换 "xxx"。

 3. 按 `<Esc>`{normal} 离开[替换模式](mode-replace)。注意该行的其余部分保持不变。

 4. 重复步骤以替换剩余的 "xxx"。

Adding 123 to xxx gives you xxx.
Adding 123 to 456 gives you 579.

注意:替换模式类似于插入模式,但每个键入的字符都会删除一个现有字符。

# 第 6.4 课:复制和粘贴文本

** 使用 `y`{normal} 操作符复制文本,使用 `p`{normal} 粘贴它。 **

 1. 转到下面标记为 ✓ 的行,将光标放在 "a)" 之后。

 2. 用 `v`{normal} 启动可视模式,并将光标移动到 "first" 之前。

 3. 输入 `y`{normal} 以[复制](yank)(复制)高亮的文本。

 4. 将光标移动到下一行的末尾:`j$`{normal}

 5. 输入 `p`{normal} 以[放置](put)(粘贴)文本。

 6. 按 `a`{normal},然后输入 "second"。按 `<Esc>`{normal} 离开插入模式。

 7. 使用可视模式选择 "item.",用 `y`{normal} 复制它,用 `j$`{normal} 移动到下一
    行的末尾,并用 `p`{normal} 将文本放在那里。

a) This is the first item.
b)

注意:你可以将 `y`{normal} 用作操作符:`yw`{normal} 复制一个单词。

# 第 6.5 课:设置选项

** 设置选项以使搜索或替换忽略大小写。 **

 1. 通过输入搜索 'ignore':`/ignore`
    通过按 `n`{normal} 重复几次。

 2. 通过输入设置 'ic'(忽略大小写)选项:
~~~ cmd
        :set ic
~~~
 3. 现在再次通过按 `n`{normal} 搜索 'ignore'。
    注意现在 Ignore 和 IGNORE 也被找到了。

 4. 设置 'hlsearch' 和 'incsearch' 选项:
~~~ cmd
        :set hls is
~~~
 5. 现在再次输入搜索命令,看看会发生什么:/ignore <Enter>

 6. 要禁用忽略大小写,输入:
~~~ cmd
        :set noic
~~~
 7. 要切换设置的开关,在前面加上 "inv":
~~~ cmd
        :set invic
~~~
注意:要移除匹配项的高亮显示,输入:
~~~ cmd
        :nohlsearch
~~~
注意:如果你只想对一次搜索命令忽略大小写,在短语中使用 [\c](/\c):/ignore\c <Enter>

# 第 6 课总结

 1. 输入 `o`{normal} 在光标**下方**打开一行并启动插入模式。
    输入 `O`{normal} 在光标**上方**打开一行。

 2. 输入 `a`{normal} 在光标**之后**插入文本。
    输入 `A`{normal} 在行尾之后插入文本。

 3. `e`{normal} 命令移动到单词末尾。

 4. `y`{normal} 操作符复制文本,`p`{normal} 粘贴它。

 5. 输入大写 `R`{normal} 进入替换模式,直到按 `<Esc>`{normal}。

 6. 输入 "[:set](:set) xxx" 设置选项 "xxx"。一些选项是:

        'ic' 'ignorecase'   搜索时忽略大小写
        'is' 'incsearch'    显示搜索短语的部分匹配
        'hls' 'hlsearch'    高亮所有匹配的短语

     你可以使用完整或简短的选项名。

 7. 在前面加上 "no" 来关闭选项:
~~~ cmd
        :set noic
~~~
 8. 在前面加上 "inv" 来切换选项:
~~~ cmd
        :set invic
~~~

# 第 7.1 课:获取帮助

** 使用在线帮助系统。 **

Vim 有一个全面的在线帮助系统。要开始使用,试试以下三种方法之一:
    - 按 `<HELP>`{normal} 键(如果你有的话)
    - 按 `<F1>`{normal} 键(如果你有的话)
    - 输入
        `:help`{vim}

阅读帮助窗口中的文本以了解帮助的工作原理。
输入 `<C-w><C-w>`{normal} 从一个窗口跳转到另一个窗口。
输入 `:q`{vim} 关闭帮助窗口。

你可以通过给 ":help" 命令一个参数来找到几乎所有主题的帮助。试试这些(别忘了按
<Enter>):
~~~ cmd
    :help w
    :help c_CTRL-D
    :help insert-index
    :help user-manual
~~~
# 第 7.2 课:创建启动脚本

** 启用 Vim 功能。 **

Vim 比 Vi 有更多的功能,但大多数默认是禁用的。要开始使用更多功能,你必须创建一
个 "vimrc" 文件。

 1. 开始编辑 "vimrc" 文件。这取决于你的系统:
    对于类 UNIX              对于 Windows
    `:e ~/.vimrc`{vim}               `:e ~/_vimrc`{vim}

 2. 现在读取示例 "vimrc" 文件的内容:
    `:r $VIMRUNTIME/vimrc_example.vim`{vim}

 3. 写入文件:
    `:w`{vim}

  下次你启动 Vim 时,它将使用语法高亮。
  你可以将你所有偏好的设置添加到此 "vimrc" 文件中。
  更多信息请输入 `:help vimrc-intro`{vim}。

# 第 7.3 课:补全

** 使用 `<C-d>`{normal} 和 `<Tab>`{normal} 进行命令行补全。 **

 1. 查看目录中存在哪些文件:`:!ls`{vim}

 2. 输入一个命令的开头:`:e`{vim}

 3. 按 `<C-d>`{normal},Vim 将显示以 "e" 开头的命令列表。

 4. 按 `<Tab>`{normal},Vim 将显示一个包含可能补全项的菜单(或者,如果输入的命
    令是唯一的,例如 ":ed`<Tab>`{normal}" 将被补全为 ":edit")。

 5. 使用 `<Tab>`{normal} 或 `<C-n>`{normal} 转到下一个匹配项。或者使用 `<S-Tab>`{normal} 或 `<C-p>`{normal} 转到上一个匹配项。

 6. 选择 `edit`{vim} 条目。现在你可以看到 `edit`{vim} 这个词已自动插入到命令行。

 7. 现在添加一个空格和一个现有文件名的开头:`:edit FIL`{vim}

 8. 按 `<Tab>`{normal}。Vim 将显示一个补全菜单,列出以 `FIL` 开头的文件名。

注意:补全适用于许多命令。对于 `:help`{vim} 尤其有用。

# Lesson 7 SUMMARY

# 第 7 课总结

 1. 输入 `:help`{vim}
    或按 `<F1>`{normal} 或 `<Help>`{normal} 打开帮助窗口。

 2. 输入 `:help 主题`{vim} 查找关于该主题的帮助。

 3. 输入 `<C-w><C-w>`{normal} 跳转到另一个窗口。

 4. 输入 `:q`{vim} 关闭帮助窗口。

 5. 创建一个 vimrc 启动脚本来保存你偏好的设置。

 6. 在命令模式下,按 `<C-d>`{normal} 查看可能的补全项。按 `<Tab>`{normal} 使用补全菜单并选择匹配项。

# 结束语

Vim 教程的第一章到此结束。请考虑继续学习[第二章](@tutor:vim-02-beginner)。

本章旨在对 Vim 编辑器进行简要概述,让你能够相当容易地使用该编辑器。由于 Vim 有
非常多的命令,本章内容远非完整。请经常查阅帮助。

网上有许多资源可以帮助你了解更多关于 Vim 的知识。这里列出了一些:

- *Learn Vim Progressively*: http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/
- *Learning Vim in 2014*: http://benmccormick.org/learning-vim-in-2014/
- *Vimcasts*: http://vimcasts.org/
- *Vim Video-Tutorials by Derek Wyatt*: http://derekwyatt.org/vim/tutorials/
- *Learn Vimscript the Hard Way*: http://learnvimscriptthehardway.stevelosh.com/
- *7 Habits of Effective Text Editing*: http://www.moolenaar.net/habits.html
- *vim-galore*: https://github.com/mhinz/vim-galore

如果你更喜欢看书,Drew Neil 所著的 *Practical Vim* 及其续作 *Modern Vim* 常被推荐。

本教程由科罗拉多矿业大学的 Michael C. Pierce 和 Robert K. Ware 编写,使用了科罗
拉多州立大学的 Charles Smith 提供的想法。邮箱:bware@mines.colorado.edu。

由 Mao-Yining <mao.yining@outlook.com> 翻译
由 Bram Moolenaar 为 Vim 修改。
由 Felipe Morales 为 vim-tutor-mode 修改。