VIM学习笔记2 移动和修改命令
- 1. 在行内移动
在 vi 的编辑中,我们可以有多种的光标移动命令。我们可以用 w 命令向前移动一个字符,用 b
命令向后移动一个字符。就像其他的 vi 命令一样,我们也可以用数字来做前缀从而组成新的命
令,来快速的移动。例如 4w 就是向前移动 4 个单词,而 5b 则是向后移动 5 个单词。而我们在
编辑的过程中又如何来快速的移到一行的开始或是结尾处呢?在 vi 中$和^可以来完成这样的工
作。$可以使光标移到一行的结尾处,而^可以使光标移到一行的开始处。$命令可以和数字进行
组合形成新的移动命令,而^也可以和数字进行组合,但是组合后组成的新的命令中数字却不起
任何的作用。
移动到指定行
在我们的工作中常常要求我们移动到指定的行,那么我们如何来做到这一点呢?我们当然可以
使用数字和方向键组合来完成。虽然这种方式不够快速,但是确实可以来实现。而在 vi 中提供
了一个新的命令来完成,那就是 G。例如 3G 可以使我们快速的移到第 3 行。而 1G 则可以使我
们移到文章的最顶端,而 G 则是定位到文章的最后一行。那么在 vi 的编辑中我们又如何来知道
我们在第几行呢?我们可以使用:set number 来叫 vi 加上行号,这样我们就可以很容易的知道我
们所在的行号了,取消行号的命令为:set nonumber。那么在没有行号的文章中我们又如何来知
道我们所处在的位置呢?我们可以使用 ctrl+G 命令来知道。这个命令可以清楚到告诉我们总共
有多少行,而当前我们又在多少行,以及所占的百分比等信息。在我们进行编辑的过程中我们
可以使用 ctrl+U 和 ctrl+D 来进行上下的翻页。
删除文本
在的文本编辑中另一件经常要做的事情就是文本的删除了。我们可以使用 dd 来删除一行,我们
还可以使用 dw 来删除一个词。删除的命令操作 d 是一个相当灵活的命令,我们可以用他来进组
合来完成工作。例如 d3w 则是一次删除 3 个字符,而 3dw 则是指一次删除一个字符,而这样的
操作进行 3 次,即总的是也是删掉 3 个字符。而在 d$则是删除从当前位置到本行结束的所有字
符。与 d 命令相类似是的 c 命令,这是一个更改的命令,所不同的是他在删除一个字符的同时
进入插入状态,这样我们就可以进行另外的文本操作了。另一个有兴趣的命令则是.命令。.命令
可以使 vi 重复执行刚才执行的命令。
录制和执行宏
在我们进行文本编辑的时候,有时要用到合并行的命令,也就是将几行合并为一行,这时我们
可以使用 J 命令。这个命令可以将本行和下一行合并为一行。当然,就像大多数的 Linux 命令
一样,我们可以使用数字来使几行合并为一行。例如 3J 就可以将当前行下的三行(包括当前
行)合并为一行。
我们又如何时来做替换文本的工作呢?我们可以使用 r 的命令。例如 rx 就可以当前光标下的字
符替换为 x。我们当然也是可以用数字来组合以形成新的命令来进行工作,例如 5rd 就是将当前
光标以后的 5 个字符替换为 d。有时我们要进行大小写的转换,这时我们就可以用~命令。这个
命令可以实现在大小写的转换。
在 vi 中一个比较有趣的东西便是键盘宏了,这个可以使我们实现多个命令的记录,有时这样可
以高效的完成我们的工作。例如我们现在的文本是 stdio.h stdlib.h math.h 但是我们都知道在 C 语
言的编辑中我们所需要的是 #include #include #include 如何来做到?如果你有足够的耐心可以一
句一句的来加,但是在这里我们可以使用键盘宏来完成我们的工作,这样我们就可以体会到他
的强大之处了。开始输入 qa.其中的 a 是一个宏的名字,我们可以用任何我们喜欢的字母来代
- 2. 替,q 是开始录制宏的命令标志。这样我们就可以开始我们的宏输入了:^移到一行的开始
i#include 在一行的开始插入#include,在结束处加入>,j 移到下一行,q 结束宏的录制。这样当
我们要使用宏时就可以输入@a,这样就可以执行这个宏了。我们还可以在执行命令前加上数字
来告诉 vi 执行几次。这样我们就可以快速的完成我们的一些工作了。
在 vi 的编辑中我们还可以输入一些由平常的键盘不可以输入的字符,有关这样的信息我们可以输
入:help digraphs 得到更多的信息。 (注:在 vi 中我们通常所指的一行是以回车做为标志的,即
只有输入回车才算是一行的结束,从而开始新的一行)
命令小结
w 向前移动一个字符
b 向后移动一个字符
$ 移动到一行的结尾
^ 移动到一行的开始
G 移动到指定行
:set number 显示行号
:set nonumber 不显示行号
dw 删除一个词
d$ 删除从当前位置到本行结束的所有字符
c 在删除字符的同时进入插入状态
. 重复执行刚才执行的命令
J 将本行和下一行合并
r 替换当前字符
~ 转换大小写
q 录制宏
@ 执行宏