学习vi和vim
Posted 除了心跳都忘掉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习vi和vim相关的知识,希望对你有一定的参考价值。
文章目录
1. 简单的文本编辑
编辑命令
文本对象 | 更改 | 删除 | 复制 |
---|---|---|---|
一个单词 | cw | dw | yw |
两个单词,不包括标点符号 | c2w/2cw | d2w/2dw | y2w/2yw |
后退三个单词 | c3b | d3b | y3b |
一整行 | cc | dd | yy |
到一行的结尾 | c$/C | d$/D | y$ |
到一行的开头 | c0 | d0 | y0 |
单个字符 | r | x/X | yl/yh |
五个字符 | 5s | 5x | 5yl |
光标移动命令
移动 | 命令 |
---|---|
←、↓、↑、→ | 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. 更多的编辑命令
更改 | 删除 | 复制 | 从光标位置到… |
---|---|---|---|
cH | dH | yH | 屏幕顶端 |
cL | dL | yL | 屏幕底端 |
c+ | d+ | y+ | 下一行 |
c5| | d5| | y5| | 本行的第5列(第5个字符) |
2c) | 2d) | 2y) | 往下第二个句子 |
c | d | y | 上一段 |
c/pattern | d/pattern | y/pattern | pattern(模式) |
cn | dn | yn | 下一个模式 |
cG | dG | yG | 文件结尾 |
c13G | d13G | y13G | 第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的主要内容,如果未能解决你的问题,请参考以下文章