Vi/Vim编辑器五分钟快速入门

Vi编辑器是目前Linux和Unix上都会内置最基本的文本编辑器,是一种以字符模式工作的多模式编辑器。Vi的功能已经很齐全,而Vim则是Vi的增前版本,可以配置各种插件,代码补全、编译及错误跳转等方便编程的功能特别丰富,是程序猿(媛)不可或缺优良工具。

  • 本文将以Vim编辑器为主,进行一些基本的命令、动作和相关操作的讲解。

基本操作

我们可以通过在命令行“vim”进入到Vim编辑器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[BoCai@iZZ ~]$ vim
~
~ VIM - Vi IMproved
~
~ version 7.4.629
~ by Bram Moolenaar et al.
~ Modified by <bugzilla@redhat.com>
~ Vim is open source and freely distributable
~
~ Help poor children in Uganda!
~ type :help iccf<Enter> for information
~
~ type :q<Enter> to exit
~ type :help<Enter> or <F1> for on-line help
~ type :help version7<Enter> for version info
~
~ 0,0-1 All

使用“vim FileName”命令,我们可以用Vim编辑器打开一个文件。

1
2
3
4
5
[BoCai@iZZ ~]$ vim test
Hello World !
~ # ~ 表示非文件内容
~
~

通过Vi/Vim编辑器打开文件后,除了使用键盘上的方向键外,还可以使用“h”、“j”、“k”、“l”来控制光标。

1
2
3
4
5
6
^
k 记忆要点: “h”在左边所以是光标左移
< h l > “l”在右边所以是光标右移
j “j”像向下箭头所以是光标下移
v 也可直接: 左下上右
假如需要一次移动多行或者多个字符,则在前面加上要移动的行数/字符数,例如:“100j”、“36l”

除了这几个可以从来代替方向键来控制光标以外,我们还可以这个操作光标。

1
2
Ctrl + u # PageUp 向上翻页
Ctrl + d # PageDown 向下翻页

打开文件没有进行编辑修改,当需要关闭文件退出编辑器,直接输入“:q”即可。

三种模式

既然说Vi/Vim是一种多模式编辑器,那就先来说说它的三种模式——命令模式(Command mode)、输入模式(Insert mode)、底线命令模式(Last line mode)。

命令模式(Command mode)

Vi/Vim打开文件的时候,直接进的便是命令模式
命令模式下,我们通过键盘输入的各种字符都是命令,而不是想普通文本编辑器会将字符输入文件内容里。
比如我们用的比较多的切换到输入模式的命令“i”,当我们在命令模式下,通过键盘敲击一下“i”键,Vi/Vim编辑器会切换到输入模式,而我们正在操作的文件文本内容里并不会多出一个字符“i”。
又比如删除操作命令“x”,当在命令模式下,我们敲击一下“x”键,Vi/Vim编辑器中光标所在的字符就会被删除。

  • 温馨提醒:在命令模式下,使用纯英文输入法更开心!

输入模式(Insert mode)

命令模式下,通过输入命令“i”,编辑器进入到输入模式。完成编辑完后,可以通过“Esc”键切换到命令模式
输入模式下,我们可以正常使用键盘上的字符键、方向键、Enter、Shift、Backspace、Delete、Insert、Tab、Home、End、PageUp、PageDown、Esc等。(PS:还有什么键能用自己慢慢探索!)

  • Home/End 移动光标到行首或者行尾
  • PageUp/PageDown 文档内容向上或向下翻页
  • Insert 切换光标输入模式(插入模式、替换模式)
  • Esc 退出输入模式进入命令模式

底线命令模式(Last line mode)

命令模式下,通过输入命令“:”,编辑器进入到底线命令模式。使用“Backspace”键删除“:”即返回到命令模式
在基本操作里面菠菜提到过关闭文件退出编辑器需要输入“:q”,其实这个地方输入“:”就是为了进入到底线命令模式,而“q”则是在底线模式输入的一个退出命令。
底线命令模式下,可以输入单个字符或多个字符组合的命令,例如“q!”(放弃修改强制退出)、“qw”(保存退出)等,可用的命令非常丰富。
但接触到最多的应该就是“q”和“w”命令,而强制命令“!”也用的比较多。

  • q 退出编辑器
  • w 保存编辑内容
  • ! 强制命令

命令简介

Vim里面很多文本操作命令都是有一个操作符和一个动作组成,中间还可以带上一个计数来表示动作重复的次数。
例如:

1
d [count] motion # count表示计数(可选) motion表示动作

常用动作

“d”是删除操作符,它后面可以跟一个动作,而常用的动作如下:

  • w 直到下一个单词开始,不包含下一个单词首字符
  • e 直到当前单词的结尾,包含当前单词最后一个字符
  • $ 直到当前所在行结尾,包含当前行最后一个字符
  • 0 直到当前所在行开始,包含光标所在字符

命令示例

通过“d”操作符和动作以及计数可以得到非常多的组合,这里简单列举几个,大家可以试试效果。

1
2
3
4
d2w # 从光标所在位置(包含)开始删除直到第二单词首字符(不包含)
d3e # 从光标所在位置(包含)开始删除直到第三单词最末字符(包含)
d$ # 从光标所在位置(包含)开始将该行后面的字符删完
d0 # 从光标所在位置(不包含)开始将该行前面的字符删完

正是基于这样一种组合命令方式,使得Vim编辑器的命令使用起来十分灵活。

常用命令

注意:以下提及的命令如实是“:”开头表示为底线命令模下使用

输入/添加

  • i 进入输入模式,在当前光标前输入内容
  • I 当前光标所在行首输入内容
  • a 进入输入模式,在当前光标后输入内容
  • A 进入输入模式,在当前所在行尾输入内容
  • o 在光标所在行下面新插入一行,并切换到输入模式
  • O 在光标所在行上面新插入一行,并切换到输入模式

删除命令

  • x 删除当前光标所在字符
  • d 删除(功能更丰富,上面已提到)
  • dd 删除光标所在行
1
3dd #删除从光标所在行(包含)开始的三行

替换/更改

  • r 替换字符,按输入顺序依次替换
  • c 更改字符,先删除后补充
1
2
3
rx #将光标处的单个字符替换成x
R #进入替换模式,后面输入的字符依次替换光标后的字符,直至按“Esc”退出替换模式
c3e #从光标除开始删除至第三个单词结尾,并进入到输入模式

底线命令模式下的替换更加强大:

1
2
3
4
5
:s/old/new #用“new”替换“old”(只替换光标后的第一个“old”)
:s/old/new/g #用“new”替换“old”(替换光标所在行所有“old”)
:#1,#2s/olg/new/g #用“new”替换“old”(替换自第#1行(含)起,往后共计#2行中所有“old”)
:%s/old/new/g #用“new”替换“old”(替换文件中所有“old”)
:%s/old/new/gc #用“new”替换“old”(替换文件中所有“old”,替换时提醒)

搜索与设置

  • /xx 向文件尾部方向搜索“xx”
  • ?xx 向文件开始方向搜索“xx”
  • n 搜索下一个匹配处
  • N 向相反方向搜索下一个匹配处
  • % 寻找匹配的“(”、“)”、“[”、“}”、“{”、“}”

常用的一些搜索设置:

1
2
3
4
5
6
7
:set ic #忽略搜索大小写 ignore
:set hls #搜索高亮hlsearch
:set is #显示搜索短语的部分匹配(在输入搜索短语时实时显示)incsearch
# 添加no表示关闭选项
:set noic #本次搜索忽略大小写在搜索短语后加“\c”,例如“/xx\c”
:set nohls #搜索后让结果临时不高亮输入“:noh”
:set nois

选择/复制/粘贴

  • v 进入可视化选择,移动光标或者使用动作选择内容
  • y 复制可视化选择模式选中的字符或其他方式选择的字符
  • p 在光标后粘贴上最近一次复制或删除的内容(如果内容是一行则添加在光标下一行)

提示/完成命令

  • Ctrl + d 提示指定字符开头的命令和文件列表
  • Tab 使用列表第一项完成命令

例如:

1
2
3
4
5
6
7
8
9
10
:e # 输入“:e”后按 Ctrl + d 提示命令列表如下
Explore echo echohl echon else emenu endfunction endtry enew
execute exusage earlier echoerr echomsg edit elseif endfor endif
endwhile ex exit
:ed # 再输入“d”按 Ctrl + d 提示命令列表如下
edit
:edit # 按 Tab 键自动完成
:edit test # 再输入“ test”按 Ctrl + d 提示文件列表如下
testA testB testC
:edit testA # 按 Tab 键自动完成,然后按Enter进入编辑

撤销操作

  • u 撤销最后一步操作
  • U 撤销当前行的所有修改
  • Ctrl + r 撤销刚才的撤销操作

文档状态位置/跳转

  • gg 跳转到文件开始
  • G 跳转到文件结尾
  • Ctrl + g 显示文件状态和当前所处文件位置
1
500gg #跳转到至500行

读写存

  • :w FileName 将内容另存为FileName
  • :e FileName 编辑FileName内容
  • :r FileName 将FileName文件内容(或外部命令执行结果)插入到光标的下一行

例如使用这几个命令编辑Vim配置文件

1
2
3
4
5
6
7
8
9
10
# Vim比Vi拥有更多功能,但是大部分都是禁用的,所以我们需要进行配置
#编辑当前用户配置文件
:e ~/.vimrc #Unix
#:e $VIM/_vimrc # MS-Windows
#将配置模板内容读取出来,写入当前用户配置文件
:r $VIMRUNTIME/vimrc_example.vim
#保存到当前文件
:w
#退出
:q

执行外部命令

  • :!shell 执行外部shell命令,执行完按“Enter”返回回来
1
2
3
:!ls #查看当前目录下文件
:!rm Test #删除Test文件
:r!ls #与读命令结合将执行结果写入文件

官方文档

Vim官方提供了非常详尽的文档,当我在命令行直接输入“vim”进入Vim编辑器以后,Vim就提示我们可以通过输入“:help”回车或者输入“F1”进入到在线文档。

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
help.txt For Vim version 7.4. Last change: 2012 Dec 06
VIM - main help file
k
Move around: Use the cursor keys, or "h" to go left, h l
"j" to go down, "k" to go up, "l" to go right. j
Close this window: Use ":q<Enter>".
Get out of Vim: Use ":qa!<Enter>" (careful, all changes are lost!).
Jump to a subject: Position the cursor on a tag (e.g. bars) and hit CTRL-].
With the mouse: ":set mouse=a" to enable the mouse (in xterm or GUI).
Double-click the left mouse button on a tag, e.g. bars.
Jump back: Type CTRL-T or CTRL-O (repeat to go further back).
Get specific help: It is possible to go directly to whatever you want help
on, by giving an argument to the :help command.
It is possible to further specify the context:
help-context
WHAT PREPEND EXAMPLE
Normal mode command (nothing) :help x
Visual mode command v_ :help v_u
Insert mode command i_ :help i_<Esc>
Command-line command : :help :quit
Command-line editing c_ :help c_<Del>
Vim command argument - :help -r
Option ' :help 'textwidth'
Search for help: Type ":help word", then hit CTRL-D to see matching
help entries for "word".
Or use ":helpgrep word". :helpgrep

  • 当我们正在编辑文件的时候,也可以使用“:help”查看帮助文档。
  • 此时,可以使用“Ctrl + w”切换帮助文档窗口和编辑窗口。
  • 同时,当光标在帮助文档窗口时,我们可以使用“:q”单独关闭文档窗口。

Vim文档还是非常详细的,大家可以按照说明的提示来寻找自己需要文档。
假如是初次上手想快速入门,建议大家参照“:help tutor”来启动vimtutor,边学边练,实战上手!

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
[BoCai@iZZ ~]$ vimtutor #Linux直接在命令行输入vitutor即可
===============================================================================
= W e l c o m e t o t h e V I M T u t o r - Version 1.7 =
===============================================================================
Vim is a very powerful editor that has many commands, too many to
explain in a tutor such as this. This tutor is designed to describe
enough of the commands that you will be able to easily use Vim as
an all-purpose editor.
The approximate time required to complete the tutor is 25-30 minutes,
depending upon how much time is spent with experimentation.
ATTENTION:
The commands in the lessons will modify the text. Make a copy of this
file to practise on (if you started "vimtutor" this is already a copy).
It is important to remember that this tutor is set up to teach by
use. That means that you need to execute the commands to learn them
properly. If you only read the text, you will forget the commands!
Now, make sure that your Shift-Lock key is NOT depressed and press
the j key enough times to move the cursor so that Lesson 1.1
completely fills the screen.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

如果想通过浏览器直接查询Vim文档,可以访问Vim documentation