就像一个人不可能一夕之间成为技艺高超的钢琴家,Linux命令也不是花一个下午就能熟练掌握的,这需要很长时间联系。
注:接下来的讨论是建立在用户使用名为vi的vim程序这样一个假设上的。
- 编辑模式
- 插入模式
移动光标
在命令模式下,vi提供了很多移动光标的命令,其中有一个些命令是与less命令共用的。
键 | 光标移动 |
---|---|
L或右方向键 | 右移一位 |
H或左方向键 | 左移一位 |
J或下方向键 | 下移一位 |
K或上方向键 | 上移一位 |
数字0 | 至本行开头 |
Shift-6(^) | 至本行第一个非空字符 |
Shift-4($) | 至本行末尾 |
W | 至下一单词或标点的开头 |
Shift-W(W) | 至下一单词的开头,忽略标点 |
B | 至上一单词或标点的开头 |
Shift-B(B) | 至上一单词的开头,忽略标点 |
Ctrl-F或Page Down | 下翻一页 |
Ctrl-B或Page Up | 上翻一页 |
number-Shift-G | 至number行 |
Shift-G(G) | 至文件最后一行 |
像G命令一样,许多vi命令的前面都可以缀上数字。前缀数字可以控制命令执行的次数,比如5j可以使得光标下移5行。
基本编辑
插入、删除、剪切、复制等构成了基本的文本编辑操作,vi也以其特殊的方式去支持这些操作。同时vi还支持有限形式的撤销操作,在命令模式下按U键就可以撤销用户最后一步操作。
添加文本
- a:当用户将光标移动到行的末尾并使用a命令时,光标就会越过文本的末尾,同时vi进入插入模式。这样用户就可以在行末添加文本了。
- A:使光标移动到行末并进入插入模式。
插入一行
插入文本的另一种方式是在文本中重开一行,即在两行现存的文字中间插入空白行并进入插入模式。
命令 | 开行 |
---|---|
o | 当前行的上方 |
O | 当前行的下方 |
删除文本
命令 | 删除内容 |
---|---|
x | 当前字符 |
3x | 当前字符和之后的两个字符 |
dd | 当前行 |
5dd | 当前行和之后的4行 |
dW | 当前字符到下一个单词的起始 |
d$ | 当前字符到当前行的末尾 |
d0 | 当前字符到当前行的末尾 |
d^ | 当前字符到当前行下一个非空字符 |
dG | 当前行到文件末尾 |
d20G | 当前行到文件第20行 |
剪切、复制和粘贴文本
命令“d”不只是删除文本,而是在“剪切”文本。用户每次使用d命令之后,都会复制删除内容进缓存,然后用户就可以使用p命令将内容粘贴到光标之前。
命令 | 复制内容 |
---|---|
yy | 当前行 |
5yy | 当前行和之后4行 |
yW | 当前字符到下一单词的起始 |
y$ | 当前字符到当前行的末尾 |
y0 | 当前行到当前行的起始 |
y^ | 当前字符到当前行的下一个非空字符 |
yG | 当前行到文件末尾 |
y20G | 当前行到文件第20行 |
合并行
vi在行的概念上非常严格。通常来说,将光标移动到行的末端并删除行的末尾字符并不能将此行与下一行合并。因此,vi专门提供了J命令来合并行。
查找和替换
vi提供了在一行或者整个文件中,根据搜索条件将光标移动至指定位置的功能。vi还可以执行文本替换工作,用户可指定替换时是否需要用户确认。
行内搜索
命令 f 在行内进行搜索,并将光标移至搜索到的下一个指定字符。比如,命令 fa 就会将光标移动到本行下一处出现字符a的地方。在执行过一次行内搜索之后,输入分号可以使vi重复上一次搜索。
搜索整个文件
同第3章中讲解过的less程序一样,命令“/”可以完成对单词或短语的搜索。当用户使用“/”命令后,一个“/”符号会出现在屏幕底部。接下来输入需要搜索的单词或短语,以Enter结束。光标就会移动到下一处包含被搜索字符串的地方。使用n命令可以重复此搜索。
/line
全局搜索和替换
vi 使用ex命令来执行几行之内或者整个文件的搜索和替换操作。输入以下命令可将文件中的Line替换为line。
:%s/Line/line/g
在命令末尾添加c,则在每次替换之前都会请求用户确认。
:%s/Line/line/gc
编辑多个文件
用户可以通过在命令行具体指定多个文件的方式使vi打开多个文件。
$ vim 1.txt 2.txt
切换文件
从一个文件切换到下一个文件。
:n
切换回上一个文件
:N
当用户从一个文件切换到另一个文件的时候,vi要求必须现保存对当前文件做出的修改才能切换到其他文件。
用户可以使用:buffers 命令查看正在编辑的文件列表
输入:buffer 加文件编号可切换到另一个文件。如从tree.txt切换到文件foo.txt可输入如下命令:
:buffer 2
载入更多文件
我们也可以现有编辑中载入更多文件。使用命令:e加文件名可以载入另一个文件。