一、文本编辑工具 Vim
若你的虚拟机系统没有Vim工具,可以输入如下命令安装:
#yum install -y vim-enhanced
Vim 的三种常用模式
1. 一般模式
当我们使用命令 vim filename 编辑文件时,默认进入该文件的一般模式。在这个模式下,你可以做的操作有:上下移动光标、删除某个字符、删除某行以及复制或粘贴一行或者多行。
移动光标,操作方法如表所示:
按键 | 作用 |
---|---|
h或者向左的方向键 | 光标向左移动一个字符 |
l(小写字母l)或者向右的方向键 | 光标向右移动一个字符 |
k或者向上的方向键 | 光标向上移动一个字符 |
j或者向下的方向键 | 光标向下移动一个字符 |
Ctrl+B | 文本页面向前翻一页 |
Ctrl+F | 文本页面向后翻一页 |
数字0或者Shift+6 | 移动到本行行首 |
Shift+4 | 移动到本行行尾 |
gg | 移动到首行 |
G | 移动到尾行 |
nG(n是任意数字) | 移动到第n行 |
删除、复制、粘贴,操作方法如表所示:
按键 | 作用 |
---|---|
x和X | x表示向后删除一个字符,X表示向前删除一个字符 |
nx | 向后删除n个字符 |
dd | 删除/剪切光标所在的那一行 |
ndd(n为number的缩写) | 删除/剪切光标所在行之后的n行 |
yy | 复制光标所在行 |
p | 从光标所在行开始,向下粘贴已经复制或者粘贴的内容 |
P | 从光标所在行开始,向上粘贴已经复制或者粘贴的内容 |
nyy | 从光标所在行开始,向下复制n行 |
u | 还原上一步操作 |
V | 按v后移动光标会选中指定字符,然后可以实现复制、粘贴等操作 |
2. 编辑模式
在一般模式下不可以修改某一个字符,如果要修改字符,只能进入编辑模式。从一般模式进入编辑模式,只需按i、I、a、A、o、O、r和R中的某一个键即可。当进入编辑模式时,在屏幕的尾行会显示INSERT或REPLACE的字样(如果你的CentOS支持中文,则会显示“插入”)。从编辑模式回到一般模式,只需按Esc键即可。
编辑模式操作如表所示:
命令 | 作用 |
---|---|
i | 在当前字符前插入 |
I | 在光标所在行的行首插入 |
a | 在当前字符后插入 |
A | 在光标所在行的行尾插入 |
o | 在当前行的下一行插入新的一行 |
O | 在当前行的上一行插入新的一行 |
3. 命令模式
在一般模式下,输入:或者/即可进入命令模式。在该模式下,我们可以搜索某个字符或者字符串,也可以实现保存、替换、退出、显示行号等操作。
如表所示:
命令 | 作用 |
---|---|
/word | 在光标之后查找一个字符串word,按n向后继续搜索 |
?word | 在光标之前查找一个字符串word,按n向前继续搜索 |
:n1,n2s/word1/word2/g | 在nl和n2行之间查找word1并替换为word2,不加g则只替换每行的第一个word1 |
:1,$s/word1/word2/g | 将文档中所有的worda替换为word2,不加g则只替换每行的第一个word1 |
:w | 保存文本 |
:q | 退出Vim |
:w! | 强制保存,在root用户下,即使文本只读也可以完成保存 |
:q! | 强制退出,所有改动不生效 |
:wq | 保存并退出 |
:set nu | 显示行号 |
:set nonu | 不显示行号 |
二、课后习题
(1)vi与Vim有什么区别?它们之间有什么关系?
答:Vim是从Vi发展出来的一个文本编辑器,可以看作是vi的升级版。Vim的主要功能与原始的Vi完全兼容,与Vi不同的是,vi不会显示颜色,而vim会根据文件内容显示不同颜色,方便阅读和编辑。而且Vim具有代码补完、编译及错误跳转等方便编程的丰富功能,在程序员中被广泛使用。( Vim和Emacs并列成为类Unix系统用户最喜欢的编辑器。)
(2)如何查看当前系统的Vim版本?
答:如图:
(3)如何把文档中出现的全部abc替换成def?如何只替换每行中出现的第一个abc?
答:
:n1,$s/abc/def/g
:n1,$s/abc/def/
(4)当搜索某个关键词时,光标定位的关键词所在的行是如何决定的?也就是说,光标是定位到
出现关键词的最顶端那行还是最底端那行,还是另外的情况?如何从当前关键词移动到下一个关键词?如何从当前关键词移动到上一个关键词呢?
答:根据vim进入文档时,光标所在的位置,在哪个位置就是定位到靠近关键词最近的地方;如果使用 / 搜索关键词,则按 n 向下移动,按shift + n 向上,如果使用 ?搜索关键词,和前者正好相反。
(5)当编辑完文档后,按Esc键进人命令模式,此时输入命令:x,会怎么样?
答:
- 如果修改了内容就保存退出,并更新文件修改时间。
- 如果没有修改内容,一样会保存退出,不过不会更新文件修改时间。
(6)在一般模式下,如何把光标快速向右或向左移动10个字符?
答:向右:10l 向左:10h
(7)vim + filename表示什么含义?执行vim +10 filename将会发生什么?
答:进入文档后光标在尾行;进入文档光标在第十行。
(8)用Vim打开文档后,如何使光标跳转到第20行?如何使光标跳到最后一行呢?
答:输入20G ; 输入G
(9)用Vim打开文档后,默认是不显示行号的,如何才能显示行号呢?
答:
:set nu
(10)用Vim打开文档后,如何把第20行至第50行中的第一个abc替换为efg?如果想替换所有的abc
呢?
答:
:20,50s/abc/efg
:20,50s/abc/efg/g
(11)用Vim打开文档后,如何快速删除前100行?
答:先按“gg”到首行,再输入100dd
(12)用Vim打开文档后,如何复制一行并将其粘贴到第20行的下面?
答:定位到要复制的行,然后输入yy,然后输入20G,再输入p