学习vi和vim

Posted 除了心跳都忘掉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习vi和vim相关的知识,希望对你有一定的参考价值。

文章目录

1. 简单的文本编辑

编辑命令

文本对象更改删除复制
一个单词cwdwyw
两个单词,不包括标点符号c2w/2cwd2w/2dwy2w/2yw
后退三个单词c3bd3by3b
一整行ccddyy
到一行的结尾c$/Cd$/Dy$
到一行的开头c0d0y0
单个字符rx/Xyl/yh
五个字符5s5x5yl

光标移动命令

移动命令
←、↓、↑、→h、j、k、l
到下一行的第一个字符+
到上一行的第一个字符-
到单词的结尾e/E
往前一个单词w/W
往后一个单词b/B
到一行的结尾$
到一行的开头0

其它操作

操作命令
往缓冲区中放置文本p/P
打开vi,如果指定了文件则打开文件vi file
保存编辑结果,并离开文件ZZ
不保存编辑结果,并离开文件:q!

文本创建与操纵命令

编辑动作命令
在光标所在位置插入文本i
在一行的开头插入文本I
在光标所在位置附加文本a
在一行的最后附加文本A
在光标下一行打开新行o
在光标上一行打开新行O
删除一行并替换文本S
用新文本覆盖现有的行R
合并当前这一行与下一行J
切换当前字符的大小写~
重复上一个动作.
撤销上一个动作u
将整行恢复到原来的状态U

2. 快速移动位置

根据屏幕来移动
(^表示Ctrl)

移动命令
往前滚动一整屏Ctrl+F
往后滚动一整屏Ctrl+B
往前滚动半屏Ctrl+D
往后滚动半屏Ctrl+U
往前滚动一行Ctrl+E
往后滚动一行Ctrl+Y
将当前行移动到屏幕顶端并滚动屏幕z+ENTER
将第10行移动到屏幕顶端并滚动屏幕10z+ENTER
将当前行移动到屏幕中心并滚动屏幕z.
将当前行移动到屏幕底端并滚动屏幕z-
重画屏幕^L
移到光标到屏幕顶端的行H
移动光标到屏幕中央的行M
移动光标到屏幕底端的行L
移动光标到屏幕顶端往下的第n行nH
移动光标到屏幕底端往上的第n行nL
移动光标到下一行的第一个字符ENTER/+
移动光标到上一行的第一个字符-
移动光标到当前行的第一个非空格字符^
移动光标到当前行的第n个字符n|

根据文本块来移动

移动命令
移到单词的结尾e
移到单词的结尾(忽略标点符号)E
移到当前句子的开头(
移到下一个句子的开头)
移到当前这一段的开头
移到下一段的开头
移到当前这一节的开头[[
移到下一节的开头]]

根据搜索模式的结果来移动

移动命令
往前搜索模式/pattern
往后搜索模式?pattern
往同一个方向重复搜索n
往反方向重复搜索N
往前重复搜索/ ENTER
往后重复搜索? ENTER

在当前行中搜索

移动命令
当前行中下一个出现x的地方fx
当前行中上一个出现x的地方Fx
当前行中下一个出现x的地方的前一个字符tx
当前行中上一个出现x的地方的后一个字符Tx
重复上一个搜索命令,方向相同;
重复上一个搜索命令,方向相反,

3. 更多的编辑命令

更改删除复制从光标位置到…
cHdHyH屏幕顶端
cLdLyL屏幕底端
c+d+y+下一行
c5|d5|y5|本行的第5列(第5个字符)
2c)2d)2y)往下第二个句子
cdy上一段
c/patternd/patterny/patternpattern(模式)
cndnyn下一个模式
cGdGyG文件结尾
c13Gd13Gy13G第13行

上表中的组合都符合一般形式:
(number)(command)(text object)
其中number是可有可无的数值参数,而command是c、d或y,text object则是一个移动命令

4. 只读模式

$ vi -R file
如果你决定要改变文件内容,可以在write命令(:w)后面加上感叹号,以覆盖掉只读模式:
:w!

5. 善加利用缓冲区

vi会将最后9次的删除操作保存在编号的缓冲区冲,你可以访问其中任何一个,以恢复任何一次(或所有)的删除操作(然而小规模的删除,如一行中的一部分,并不会保存到编号的缓冲区中。这些删除只能在刚做操作后立刻用p或P命令恢复)。

vi也可以让你将拖拽(复制)的文本放在依字母标识的缓冲区中。拖拽的文本可以被保存到26个缓冲区中(a~z),并且可在编辑任何会话的时候,使用放置命令来恢复这些文本。

5.1 恢复删除

最后一次删除的内容存在缓冲区1,倒数第二次的则存在缓冲区2……

要恢复删除操作,先输入"(双引号),接着指定缓冲区编号,再使用放置命令。以恢复倒数第二次的删除(位于缓冲区2)为例:
"2p
缓冲区2包含的内容将出现在光标之后。

如果不确定哪一个缓冲区包含了要恢复的文本,你也不用一直重复输入"np。如果在恢复(p)一次后利用重复命令(.)做恢复,缓冲区的编号便会自动增加,再加上用u撤销恢复,即可用下例搜索编号的缓冲区:
"1pu.u.u.
上例可逐一把每个缓冲区的内容放置到文件中。每一次输入u时,恢复的文本会被移除。输入点号(.)时,则把下一个缓冲区的内容恢复到文件中。不断输入u与.,直到找到所需的文本为止。

5.2 拖拽到命名缓冲区与恢复拖拽

要将文本拖拽到命名缓冲区,需在拖拽命令前加上双引号(")以及缓冲区名称(以字符表示)。例如:
"dyy 将当前行拖拽到缓冲区d中
"a7yy 将后续7行拖拽到缓冲区a中

拖拽的内容放至命名缓冲区,移动光标到新位置后,使用p(下一行)或P(上一行)可将文本取回:
"dP 将缓冲区d的内容放置在光标前
"ap 将缓冲区a的内容放置在光标后

如果使用大写字母指定缓冲区名称,则拖拽或删除的文本会被附加到当前缓冲区中。

6. 编辑程序源代码

6.1 缩排控制

(1)自动缩排
vi提供了自动缩排控制,如果要使用,可下达这个命令:

:set autoindent

现在,当你用空格或tab做缩排时,后面的行会以相同的距离缩排。当你结束第一个有缩排的行后按下[ENTER]时,光标会移动到下一行,并自动与上一行缩排相同的距离。

(2)移动缩排
<<与>>命令在对代码做缩排时帮助也很大。>>默认往右移动8个空格(加入8个空格的缩排),而<<是向左移动8个空格。
你可以移动多行,只要在>>或<<前加上数值就可以了。例如5>>,会将前5行向右移动。
上述的默认移动是8个空格。默认值可以在命令行做改变:

:set shiftwidth=4

(3)显示所有字符
有时缩排会出现意料之外的结果,因为你认为的tab字符实际上是一个或多个空格。一般来说,你的屏幕会将tab与空格都用空白来代替,不能加以分辨。然而

:set list

这个命令可以改变你的显示状态,让tab看起来是控制字符^I,并让行结尾看起来是$,如此即可认出真正的空格。

以上是关于学习vi和vim的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习笔记vi 和 vim

学习vi和Vim编辑器的前言

3. vi/vim 快速复制一/多行内容

Vim 中如何去掉 ^M 字符

linux编辑命令vi,vim学习

Linux学习笔记13——vi和vim编辑器