vi/vim 命令整理

重复次数:可以通过在命令前键入一个数字来重复执行命令,这个数字称为重复次数。

如:10j 光标向下移动10个位置。

除非特殊声明,以下命令均在命令模式下。


移动光标

当前行:光标所在的行

命令 效果
h 将光标向左移动一个位置
j 将光标向下移动一个位置
k 将光标向上移动一个位置
l 将光标向右移动一个位置
<Left> 将光标向左移动一个位置
<Down> 将光标向下移动一个位置
<Up> 将光标向上移动一个位置
<Right> 将光标向右移动一个位置
<Backspace> 将光标向左移动一个位置
<Space> 将光标向右移动一个位置
- 将光标移动到上一行的开头
+ 将光标移动到下一行的开头
<Return> 将光标移动到下一行的开头
0 将光标移动到当前行的开头
$ 将光标移动到当前行的末尾
^ 将光标移动到当前行的第一个非空白符的字符上
w 将光标移动到下一个单词的词首
e 将光标移动到下一个单词的词尾
b 将光标移动到上一个单词的词首
W 同w,忽略标点符号
E 同e,忽略标点符号
B 同b,忽略标点符号
) 移动到下一个句子句首
( 移动到上一个句子句首
} 移动到下一个段落
{ 移动到上一个段落
H 将光标移动到屏幕顶部
M 将光标移动到屏幕中间
L 将光标移动到屏幕最后一行

ps:

句子:一个字符串,以句号,逗号,问号,或感叹号结尾,后面至少跟两个空格或一个新行字符。

段落:以一个空白行开头,并以一个空白行结束的一块文本区域。


在编辑缓冲区移动

命令 效果
^F 向下移动一屏
^B 向上移动一屏
^D 向下移动半屏
^U 向上移动半屏

ps:在对^D和^U前键入数字时,设置的是应该跳转的行数,并且会一直保持这个设定到改变数字。


跳转到前一位置

命令 效果
`` 回到前一位置
m 后加一个字母,如ma,即用这个字母标记该行
` 后跟指定行的标记名称,如`a,跳转到标记该行的准确位置
' 后跟指定行的标记名称,如'a,跳转到标记行的行首


搜索

命令 效果
/pattern pattren为希望搜索的模式,光标将跳转到接下来包含该模式的行上
/ 重复上一模式向前搜索
?pattern pattern为希望搜索的模式,光标将跳转到之前包含该模式的行上
? 重复上一模式向后搜索
n 沿和之前相同的方向进行搜索
N 沿和之前相反的方向进行搜索


使用行号

命令 效果
:set number 显示行号
^G 显示文件名称,位置(行,百分比)
行号G 跳转到指定行
:行号 跳转到指定行
gg 跳转到第一行


插入文本
命令 效果
i 改变到输入模式:在当前光标位置前插入数据
a 改变到输入模式:在当前光标位置后插入数据
I 改变到输入模式:在当前行开头插入数据
A 改变到输入模式:在当前行末尾插入数据
o 改变到输入模式:在当前行下插入一行
O 改变到输入模式:在当前行行插入一行
^W 输入模式下,删除光标之前的一个单词
^U 输入模式下,删除光标之前的一行


修改文本

命令 效果
r 后跟新字符,将当前字符更换为新字符
R 改变到REPLACE模式,随后键入的每个字符都将替换当前行上光标后(包括光标)的一个字符
s 改变到输入模式,多个字符替代一个字符
C 替换从当前光标位置到这一行末尾的所有字符
S 替换一整行
cc 替换一整行
c 后跟光标移动命令,替换从光标当前位置到移动命令所指定位置的所有字符。如c5w,替换5个单词
:s/pattern/replace 替换当前行上pattern的第一个匹配项为replace,可在;和s中指定行号,以 , 分隔两个行号,可表示范围
:s/pattern/replace/g 替换当前行上所有的匹配项
:s/pattern/replace/c 替换前需确认

ps:

.  代表当前行

$  代表编辑缓冲区的最后一行

%  代表编辑缓冲区所有的行


删除文本

命令 效果
x 删除当前光标处的字符
X 删除当前光标左边的字符
D 删除从当前光标到本行末尾的字符
d 后跟光标移动命令,删除从当前光标到光标移动命令指定位置的字符
dd 删除当前行,光标移动到下一行行首
:行号d 删除指定行
:行号1,行号2d 删除行号1,到行号2的行

ps:

10dd,删除从当前行开始10行的文本


撤销或重复改变

命令 效果
u 撤销上一命令对编辑缓冲区的修改
U 恢复当前行
. 重复上一命令对编辑缓冲区的修改
p 复制上一次删除的内容,插入到光标之后
P 复制上一次删除的内容,插入到光标之前
编号p 将编号缓冲区中相应编号的内容插入当前行的下面
编号P 将编号缓冲区中相应编号的内容插入当前行的上面

ps:

无名缓冲区:保存上一次删除保留的副本。

编号缓冲区:vi将删除内容保存在编号缓冲区中,并从1~9编号。

组合命令:

xp  调换两个字符

deep  调换两个单词

ddp  调换两行


复制文本

命令 效果
y 后接光标移动命令,复制从当前光标到光标指定位置的字符
yy 复制整行

Y

复制整行
:行号1co行号2 复制行号1的行到行号2的行下面
:行号1,行号2co行号3 复制行号1到行号2之间的行到行号的行3下面

ps:

复制的文本保存在无名缓冲区中。可以使用p取出。

10yy,复制从当前行开始10行的内容。


移动文本
命令 效果
:行号1m行号2 移动行号1的行到行号2的行下面
:行号1,行号2m行号3 移动行号1到行号2之间的行到行号3的行下面


改变字母大小写
命令 效果
~ 改变光标所在字符的大小写

ps:

若光标所在字符是非字母,光标像前移动一个位置,不进行改变。

10~  改变从光标所在字符开始10个字符的大小写。

连接行
命令 效果
J 把当前行和下一行合并成一个长行

ps:

当vi在连接行时,会在合适的位置自动地插入空格,即,在句子末尾插入两个空格。

3J  连接当前行开始3行为一个长行。


输入shell命令
命令 效果
:!命令 将命令发送给shell执行,当命令结束后,控制返回vi
;!! 重复执行最近一条shell命令
:sh 暂停vi,并启动一个新的默认shell副本


插入文件数据

命令 效果
:行号r 文件

将文件内容插入到行号的行下面


插入shell命令输出
命令 效果
:行号r !命令 将命令的输出插入到行号的行下面

ps:

行号未指定,则为当前行


将数据写入文件

命令 效果
:w 将数据写入原始文件
;w 文件 将数据写入新文件
:w! 文件 覆盖一个已有的文件
:w>>文件 将数据追加到指定的文件

切换到一个新文件
命令 效果
:e 文件 切换到新文件进行编辑
:e! 重新编剧当前文件,忽略自动检查
:e! 文件 编辑指定文件,忽略自动检查


猜你喜欢

转载自blog.csdn.net/qq_31730735/article/details/80509793