vi(m)


















1. 准备工作
在一般情况下,无论何种

在一般情况下,无论何种 在一般情况下,无论何种 在一般情况下,无论何种 在一般情况下,无论何种 在一般情况下,无论何种 在一般情况下,无论何种 在一般情况下,无论何种 在一般情况下,无论何种 在一般情况下,无论何种 在一般情况下,无论何种 在一般情况下,无论何种 Linux 发行版本都是包括 Vim 的,并且在默认会安
装它。当然,万一你的主机上还没安装
VIM , 请输入如下命令安装它。
[root@localhost ~]# yum install vim
2. 运行 vim
输入启动 vim 的命令:
[root@localhost ~]# vim file.txt
无论是哪个 Linux 发行版本, 这条命令都会让 Vim 创建名为 file.txt 的文件。
这是个新的文件,所以你会看到一个空白的窗口。 如果这个文件已经存在,那么
vim 将会打开这个文件。
3. vim 模式
Vim 是一个模式编辑器,也就是 vim 会根据所处的模式对不同行为作出不同
反应。
vim 在一般模式( NORMAL ) 会在屏幕的底部显示文件名或者是空白;在
输入模式,底部会显示 –
INSERT –;在可视模式,底部显示的是– VISUAL –。
在打开
vim 时默认处于一般模式。
4. 输入
要输入文字,你要让编辑器进入输入模式。按下
i 键,接着你会发现屏幕左
下方的文字变成了 –
INSERT –(意味着编辑器进入了输入模式)。
现在输入一些文字。这些文字会被输入到文件中。不用怕出错,过一会儿你
就可以改正它们了。输入下面这首程序员的打油诗:
命令序列 错误 ! 文档中没有指定样式的文字。 -1
A very intelligent turtle
Found programming Linux a hurdle
The system, you see,
Ran as slow as did he,
And that’s not saying much for the turtle.
输入完,按下 <Esc> 键, – INSER –消失了,编辑器又回到了命令模式。 此
时你的屏幕应该跟下图相似。

5. 移动
在一般模式中,你可以使用
h (左)、 j (下)、 k( ) l (右)在 vim 里移动。
咋看起来写
vim 的人随意地选取了这些字母。毕竟,谁用 L 键来向右移动?不过
这个做法有它很好的理由:移动是编辑器里最常做的事情,而这些键都在你右手
放在键盘上时手指正对的那一行。换句话说,它们就在你最方便按的地方。
记住这四个命令没有什么好的方法,只有通过不断练习直到形成条件反射为
止。另外一个方式是把下面这个图抄到便贴里,然后贴到显示器上面,直到你熟
悉这四个命令。
vim 中的移动命令
注意
Vim 用户常见的一个问题就是被编辑器的模式所困扰。这常常是因为
不清楚编辑器处在哪个模式,又或者不知道按下了哪个键导致编辑器
进入了另外一个模式引起的。 事实上, 无论编辑器当前在什么模式,
按下
Esc 键,它都会回到一般模式。有时需要按两次<Esc>,如果
Vim 以一声蜂鸣回答你,那说明你已经是在一般模式了
默认情况下, vim 里面的文字不会自动换行。如果你不按回车键而一
直不停地输入文字直到它们到了编辑器的右边栏,你所做的只是输入
了非常长的一行文字,
vim 不会为你自动换行。要换行的话,你必须
按下回车键(这是正常模式的操作,可以通过配置
vim 来要求 vim
你自动换行, 不过如何配置在我们的课程中没有提到)。

注意
你也可以通过方向键来移动。只不过这样做反而会大大地地降低你编
辑文件的速度。因为你按下方向键的时候必然要把你的手从字母键上
移动到方向键上。如果你一个小时内要重复这个动作成百上千遍的
话,使用这四个键会节约数量可观的时间。因此,如果你想高效地编
辑的话,使用
hjk l 吧。


6. 删除
删除的方法是将光标移到想删除的文字上面然后按下
x 1 。例如, 用“ gg
命令将光标移动到第一行头上, 按下
x 7 次以删除“ A very ”。 如所示。然后
按下
i 键进入输入模式, 输入正确的字符 “ A young ”。然后按“ Esc ”键退出
输入模式。 如所示。
删除“ A very ” 后的屏幕 .
插入“ A young ” 后的屏幕
当然你也可以删除一行,删除一整行内容使用 "dd" 命令。删除后下面的行会
移上来填补空缺。接下来我们将光标移到第一行任意一处,按下“
dd ” 把文件的
第一行删除:
删除首行之后的屏幕
我们还可以通过“ J ”命令来删除换行符,如,将光标移到当前第二行任意一
处,按下“
Shift+j ”也即“ J ”来删除当前行的换行符:
1 这是为了兼容以前的打字机的操作方式, 打字机是通过键入 x 来删除文字的
同时,也有些主机上的键盘是没有方向键或者不按常规方式排列方向
键的。所以,知道如何使用这四个键也能在遇到上述情况下对你编辑
文件有所帮助。


删除第二行换行符之后的屏幕
7. 撤销和重复
假如你删除过头了, 当然你可以再输入一次的。不过会有更简单的方法。命
u 会撤销你最后一次的编辑。按下 u 来撤销最后一次的删除操作。最后一次
的编辑删除了第二行的换行符,所以该操作被撤销。文件将回到如删除首行之后
的屏幕所示的状态。 再按一次
u 撤销删除首行的操作,文件将回到如插入“ A
young ”
后的屏幕所示的状态。 每输入一次 u 就会回撤一次操作。 如果你撤销过
头了,可以按下
Ctrl+r (重复)来取消撤销过多带来的效果,按下 Ctrl+r , 在上
面的例子中, 首行将又被删除。
8. 保存退出
你可以使用“
:wq ” 命令来退出 vim 。这个命令会将修改的文件写回硬盘然后
退出。如果你输入了“
:wq ”,你的修改会被提交而且不可以进行撤销和重复操作,
然后退出
vim 。 这个命令有三个部分:冒号( : ),它会让编辑器进入命令模式;
命令
w ,它告诉编辑器保存文件;命令 q ,它告诉编辑器退出程序。
某些时候,你可能会在你改了一大堆东西后,突然意识到你就不应该修改这
个文件。不用担心,
vim 有一个“退出然后放弃所有修改”的命令。它就是“ :q! ”。
这个命令同样有三个部分:冒号(
: ),它会让编辑器进入命令模式;命令 w ,它
告诉编辑器保存文件;命令
q ,它告诉编辑器退出程序;然后是强制命令修饰符
——感叹号(
! )。感叹号是必须的,它告诉 vim 无需保存文件。
我们也可以通过“
ZZ ” 也即“ Shift+z+z ” 命令来退出 vim ,如果文件作过改
动“
ZZ ”命令就保存文件并退出 vim ,如果文件没有作过改动“ ZZ ”命令就直接
退出
vim
9. 帮助
在最后,还有一个重要的命令要提到——帮助命令。要获取帮助,输入“
:help”
或者按下 F1 键。 vim 会显示一个帮助概览的窗口,如帮助所示 2
2 vim 打开了两个文档,上面是新打开的帮助文档,下面是我们例子中的文档,我们会在下一任务中提到
vim 如何打开多个文档。
帮助
:help 会显示一个帮助的概览窗口。在帮助文档中可以使用 vim 的全部命令。
因此,按下
h k j l 会向左、上、下、右移动。 同样可以通过“ zz ” 退出帮
助文档。
帮助文档中有些文字是被竖线封闭的(例如
|usr_01.txt| )。它表示的是这个文
字是一个链接。如果你将鼠标放在两个竖线的中间然后按下
CTRL+] (跳到该标
签), 可以进入相应的主题
3 。 可能在跳了几次后,你可能想要回到原来的位置。
CTRL+T (弹出标签)将你带回到之前的屏幕。
如果要完整地获取某个主题的帮助,使用下面的命令“
:help 主题 。 例如,
要获取
x 命令的帮助就需要键入“ :help x”
10. 小结
现在你知道该怎么使用
vim 编辑器了。虽然不够快也不够好,但你起码可以
完成基本的操作了。花点时间,在完成下一个任务之前先练习下本任务中学习的
内容。在你吸收了这些内容后,你可以步入到下一任务去学习
vim 一些更高级的
特性。

3由于一个我们不在这里深究的原因, 在 vim 中用术语 tag 而不是 link 或者其他什么术语来表示链接。


接下来,我们来完成一个稍稍复杂一点的任务,当然这个任务也将涉及到 vim
更加高级的一些命令。 我们要完成的任务是这样的:
1. 请在 /tmp 这个目录下建立一个名为 vimtest 的目录, 进入 vimtest 这个目
录当中, 将
/etc/man.config 拷贝到本目录底下, 使用 vim 打开这个文本文
件;
2. vim 中设定一下行号;
3. 移动到第 58 行行首, 再向右移动 30 个字符,移动到第 8 行行尾,再向左
移动
3 个单词;
4. 移动到第一行行首,并且向下搜寻一下『man 』这个字符串;
5. 50 100 行之间的 man 改为 MAN,并且一个一个挑选是否需要修

6. 复制 51 60 行这十行的内容,并且贴到最后一行之后;
7. 删除 11 30 行之间的 20 行;
8. 去第 29 行首,并且删除 15 个字符;
9. 修改完之后,突然反悔了,要全部复原;
10. 将这个文件另存成一个 名为 man.config.bak 的文件;
11. 在最后一行后插入错误!未找到引用源。 中所示的字样,并保存;
12. 在不关闭 man.config.bak 的文件情况下,再次打开 man.config
13. 将步骤 11 中在 man.config.bak 中输入的字样的第 1 列到第 10 列拷贝并粘
贴到
man.config 中;
14. 储存两个文件后离开 vim
1. 打开文件
[root@localhost ~]# mkdir /tmp/vimtest
[root@localhost ~]# cd /tmp/vimtest
[root@localhost ~]# cp /etc/man.config .
[root@localhost ~]# vim /tmp/vimtest/man.config
2. 设置行号
用“
:set nu”命令来设置行号,设置后应如下所示, 可以用“:set nonu”来
取消行号设置。
3. 移动
用“数字
+移动方向”来进行快捷移动,如我们可以用“3j” 来从当前行向下
移动
3 行,也可以用“数字+G”或者“数字+$”指定移动到某行行首或者行尾,
如我们可以用“
3G”来移动到第 3 行行首。
用“gg”移动到首行行首,再用“57j”移动到第 58 行行首;也可以使
用“58G”直接移动到第 58 行行首;
用“40l”向右移动 40 个字符;
用“7G”移动到第 7 行行首,用“$”移动到本行行尾,“3b”向左移动
3 个单词。
vim 移动命令

命令键 命令用途
h (←) 光标向左移动一个字符
j (↓) 光标向下移动一个字符
k (↑) 光标向上移动一个字符
l (→) 光标向右移动一个字符
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键
(常用)
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键
(常用)
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
0 光标移动到这一行的最前面字符处 (常用)
$ 光标移动到这一行的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一行
M 光标移动到这个屏幕的中央那一行
L 光标移动到这个屏幕的最下方那一行
G 光标移动到这个文件的最后一行(常用)
gg 光标移动到这个文件的第一行 (常用)
<Enter> 光标向下移动 1 (常用)
w 光标向右移动 1 个单词
b 光标向左移动 1 个单词
其中 hjkl$<Enter>Gwb 均可以与数字组成组合键,如
30j”表示向下移动 30 行, 30G 表示移动到本文件的第 30 行。

4. 查找替换
用“ gg ”移动到首行行首,用键入“ /man ” 来查找“ man ”字符串,用
n ”和“ N ”来遍历所有的“ man ”字符串;
用“ :50,100s/man/MAN/gc ”来用 MAN 替换 50 100 行之间的 man
vim 会逐个在替换前询问你是否替换。
替换字符串
vim 查找和替换命令
命令键 命令用途
/word从光标所在往下查找一个名为 “word” 的字符串。
如要在文件内查找“
man”这个字符串,就输入
/man (常用)
?word 向光标所在往上查找一个名为 “word” 的字符串。
n表示重复前一次查找。如果刚刚我们执行 /man
向下查找“
man”这个字符串,则按下 n 后,会向
下继续查找下一个名为“
man”的字符串“。如果
是执行
?man 的话,那么按下 n 则会向上继续查
找名为“
man”的字符串
N 表示“反向”执行前一次查找。 例如 /man 后,
按下
N 则表示从光标处向上查找 “man” 。
:n1,n2s/word1/word2/gn1 n2 为数字。在第 n1 n2 行之间查找
word1 这个字符串,并用 word2 来替代, 例如在
100 200 行之间搜寻 man 并取代为 MAN 则可
以写作:“
:100,200s/man/MAN/g”。 (常用)
:1,$s/word1/word2/g 在整个文件中查找 word1 这个字符串,并用
word2 来替代(常用)
:1,$s/word1/word2/gc在整个文件中查找 word1 这个字符串,并用
word2 来替代, 且在取代前显示提示字符给使用者
确认
(conform) 是否需要取代! (常用)

5. 复制粘贴
用“ 50G ”来到文本的第 50 行,再用“ 10yy ”复制 51 行到 60 行;
用“ G ”来到文件的最后 1 行,再用“ p ”进行粘贴。
在最后粘贴了 51 60 行之间的内容
vim 复制和粘贴命令
命令键 命令用途
yy 复制游标所在的那一行(常用)
nyyn 为数字。复制光标所在的向下 n 列,例如 20yy 则是复制
20 (常用)
p, P p 为将已复制的数据在光标下一行贴上, P 则为贴在游标上
一行! 举例来说,我目前光标在第
20 行,且已经复制了


10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20
行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么
原本的第
20 行会被推到变成 30 行。 (常用)

6. 删除
用“ 10G ”来到文本的第 10 行,再用“ 20dd ”复制 11 行到 30- 行;
用“ 29G ”来到文本的第 29 行首,再用“ 15x ”删除 15 个字符。
vim 删除命令
命令键 命令用途
x, X在一行字当中, x 为向后删除一个字符 (相当于 [del]
)X 为向前删除一个字符(相当于 [backspace] 亦即是
退格键
) (常用)
nxn 为数字,连续向后删除 n 个字符。举例来说,我要连续
删除
10 个字符, 『10x』。
dd 删除游标所在的那一整列(常用)
ndd n 为数字。删除光标所在的向下 n 列,例如 20dd 则是删
20 (常用)

7. 撤销和重复
用“ u ”来撤销直到所有操作都被恢复(或者直接用“ :e! ”来恢复);
vim 撤销和重复命令
命令键 命令用途
u 撤销前一个动作。 (常用)
[Ctrl]+r 重做上一个动作。 (常用)
:e! 将文件还原到最原始的状态

8. 打开、保存和退出
用“ :w man.config.bak ” 将文件另存;
用“ i ”切换到编辑模式, 将错误 ! 未找到引用源。 中所示的字样输入,用“ w
保存
;
vim 打开、保存和退出命令
命令键 命令用途
:w 将编辑的数据写入硬盘档案中(常用)
:w! 若档案属性为『只读』时,强制写入该档案。不过,到底能
不能写入, 还是跟您对该档案的档案权限有关啊!
:q 离开 vi (常用)
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存
档案。
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 若文件没有更动,则不储存离开,若文件已经经过更动,则
储存后离开
:w [filename] 将编辑的数据储存成另一个文件(类似另存新文件)


:r [filename] 在编辑的数据中,读入另一个文件的数据。亦即将
filename』 这个档案内容加到游标所在行后面
:n1,n2 w
[filename]
n1 n2 的内容储存成 filename 这个文件。

9. 同时编辑多个文件
vim 提供了同时编辑多个文件的功能,在 vim 后面同时可以接多个文件名,
用户来同时打开多个文件。
vim 同时提供了在多个窗口打开文件的功能,输入
:sp 文件名”命令即可在不关闭当前文件的情况下打开新文件。
可用“ ZZ ” 先退出 vim ,然后用“ vim 文件名 1 文件名 2… 文件名 n
打开多个文件,如这里可以用“
vim man.config.bak man.config ”同时打
开这两个文件,然后用“
:n ”和“ :N ”在这两个文件间切换。
或者用“ :sp man.config ”直接打开此文件,并用“ [ctrl]+wj ”和“ [ctrl]+wk ”,
在这两个文件间切换。
vim 打开多个文件命令
命令键 命令用途
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个 vim 的打开的所有文件
:sp [filename]开启一个新窗口,如果有加 filename, 表示在新窗口开启
一个新文件,否则表示两个窗口为同一个文件内容
(同步显
)
[ctrl]+wj 按键的按法是:先按下 [ctrl] 不放, 再按下 w 后放开所有
的按键,然后再按下
j ,则光标可移动到下方的窗口。
[ctrl]+wk 同上,不过光标移动到上面的窗口。
[ctrl]+wq 要结束下方窗口,那么利用 [ctrl]+wj 移动到下方窗口,按
:q 即可, 也可以按下 [ctrl]+wq

10. 可视模式
vim 提供了一种可视模式,按 Esc 键,然后按 Ctrl+v 就进入可视模式。可视
模式为我们提供了极为友好的选取文本范围,以高亮显示;在屏幕的最下方显示
-- 可视 -- --VISUAL-- 进入可视模式,我们就可以用前面所说的命令行模式
中的光标移动指令,可以进行文本范围的选取。
切换到 man.config.bak 中;
按下“ ctrl+v ” 进入可视模式下的区块选择模式,用光标选中要拷贝的区
域(这些区域会反白);
按下“ y ”进行拷贝;
切换到 man.config 中,按“ G ”来到最后一行,按下“ p ”进行粘贴。
vim 可视模式下的选择、复制和删除命令
命令键 命令用途
v 字符选择,会将光标经过的地方反白选择
V 行选择,会将光标经过的行反白选择
[Ctrl]+v 区块选择,可以用长方形的方式选择文本
y 将反白的地方复制起来


d 将反白的地方删除掉

可视模式下的区块选择和粘贴
11. 环境配置
vim 提供了环境设定功能,利用 vim 的环境设定,可以给我们的工作提供非
常大的一个帮助。
vim 的环境设定参数有很多,可以在一般模式时输入:“ :set
all
” 来查阅,这里仅列出一些平时比较常用的一些简单的设定值。
vim 的环境配置命令
命令键 命令用途
:set nu 设定行号,取消的话,就是 :set nonu
:set hlsearch 是否将搜寻的字符串反白。 默认值就是 hlsearch ,如果
不想要反白,就
:set nohlsearch
:set autoindent autoindent 就是自动缩排, 不想要缩排就 :set
noautoindent
:set backup是否自动储存备份档,一般是 nobackup 的, 如果设定
backup 的话,那么当你更动任何一个档案时,则源文件会
被另存成一个档名为
filename~ 的档案。
:set ruler 右下角是否显示状态列说明
:set
showmode
这个则是,是否要显示 --INSERT-- 之类的字眼在左下角的
状态列。
:set all 显示目前所有的环境参数设定值。
:syntax (off|on)是否依据程序相关语法显示不同颜色? 举例来说,在编辑
一个纯文字文件时,如果开头是以
# 开始,那么该行就会
变成蓝色。 但是, 如果您仅是编写纯文本文件,要避免颜
色对您的屏幕产生的干扰,则可以取消这个设定
:syntax
off

12. 暂时存档文件和恢复
当编辑一个文件时,在这个文件所处的目录底下就会有一个临时文件,文件
名为“编辑的文件名
.swp” 这是一个隐藏文件, 所有修改都会暂时存在这个文件
中。 在编辑过程中,系统或者 vi 非正常关闭了,那么再重新用 vi 打开这个文件
时时,系统就会询问要回复『
Recovery 』。按下 (R) ,就可以将数据回复到修改
过程的样子,再将
swp 文件删除。
vim 在编辑文件时发生意外崩溃或者退出后再打开同一文件








  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值