0. 前言

介绍

无论是笔记,还是教程,说一件事,都喜欢从其介绍开始说起。

vi编辑器是Unix系统最初的编辑器。它使用控制台图形模式来模拟文本编辑窗口,允许查看文件中的行、在文件中移动、插入、编辑和替换文本。尽管它可能是世界上最复杂的编辑器至少讨厌它的人是这么认为的,但其拥有的大量特性使其成为Unix系统管理员多年来的支柱性工具。在GNU项目将vi编辑器移植到开源世界时,他们决定对其作一些改进。由于它不再是以前只能运行在Unix中的那个原始的vi编辑器了,改进之后不仅可以运行于unix,还可用于windows、mac等多操作平台,开发人员也就将他重命名为vim(vi improved)。

vim对vi完全兼容,可以把vim当成vi来使用。

1. 开始

1.1. vi的模式

VI的模式

普通模式

由Shell进入vi编辑器时,首先进入普通模式。在普通模式下,从键盘输入任何字符都被当作命令来解释。普通模式下没有任何提示符,输入命令后立即执行,不需要回车,而且输入的字符不会在屏幕上显示出来

编辑模式

编辑模式主要用于文本的编辑。该模式下用户输入的任何字符都被作为文件的内容保存起来,并在屏幕上显示出来。

命令模式

命令模式下,用户可以对文件进行一些高级处理。尽管普通模式下的命令可以完成很多功能,但要执行一些如字符串查找、替换、显示行号等操作还是必须要进入命令模式。

也有文章称为两种工作模式,即把命令模式合并到普通模式。
如果不确定当前处于哪种模式,按两次 Esc 键将回到普通模式。

1.2. vim模式

可视模式

在正常模式中按下v,V,ctrl+v,可以进入可视模式。可视模式是选中一块区域进行操作,包括删除,替换,复制,粘贴,改变大小写等。

因为vim完全兼容vi,所以vi拥有的模式vim都有,而且进入模式的方法也完全相同

2. vim命令分类

2.1. 启动vim

命令解释
vim -c cmd file在打开文件前,先执行指定的命令
vim -r file恢复上次异常退出的文件
vim -R file以只读的方式打开文件,但可以强制保存
vim -M file以只读的方式打开文件,不可以强制保存
vim -y num file将编辑窗口的大小设为 num 行
vim + file从文件的末尾开始
vim +num file从第 num 行开始
vim +/string file打开 file,并将光标停留在第一个找到的 string 上
vim --remote file用已有的 vim 进程打开指定的文件

2.2. vim文档操作

命令模式下

  命令    解释  
 :e file 关闭当前编辑的文件,并开启新的文件   如果对当前文件的修改未保存,vi  会警告  
 :e! file   放弃对当前文件的修改,编辑新的文件  
 :e+file   开始新的文件,并从文件尾开始编辑  
 :e+n file   开始新的文件,并从第  n  行开始编辑  
 :enew   编译一个未命名的新文档(CTRL-W n) 
:e   重新加载当前文档  
 :e!   重新加载当前文档,并丢弃已做的改动  
 :e#或ctrl+^   回到刚才编辑的文件,很实用  
 :f或ctrl+g   显示文档名,是否修改,和光标位置  
:f filename   改变编辑的文件名,这时再保存相当于另存为
 gf   打开以光标所在字符串为文件名的文件  
 :w   保存修改  
 :n1,n2w filename   选择性保存从某  n1  行到另  n2  行的内容  
 :wq   保存并退出
 :x   保存并退出
 :q   退出当前窗口(CTRL-W q  或  CTRL-W CTRL-Q)
 :saveas newfilename   另存为  
 :browse e   会打开一个文件浏览器让你选择要编辑的文件  
 :set browsedir=last   用上次访问过的目录(默认); 
 :set browsedir=buffer   用当前文件所在目录; 
:set browsedir=current    用当前工作目录  
 :Sex;   水平分割一个窗口,浏览文件系统  
 :Vex   垂直分割一个窗口,浏览文件系统; 

2.3. 基础编辑、移动光标

普通模式下

指令 解释
$ 行尾
^ 行首
w 下一个单词 (词首)
e 下一个单词(词尾)
b 前一个单词
x del 删除后一个字符
X backspace 删除前一个字符
u 撤销
ctrl + r 重做
k
h
g
l
i 插入,开始写东西
s 覆盖
esc 退出输入模式,进入普通模式,可执行各种命令

2.4 操作和重复操作

指令 解释
f 查找字符,按f后再按需要移动到的字符,光标就会移动到那
f; 就会移动到下一个 ;的位置
F 反向查找字符
. 重复上一个操作
v 选择模式,用上下左右选择文本,按相应的指令直接执行,:选中后执行 d 就直接删除选中的文本
ctrl + v 块状选择模式,可以纵向选择文本块,而非以行的形式
d 高级删除指令:
dw 删除一个单词
df( 配合 f ,删除从光标处到 ( 的字符,单行操作
dd 删除当前行
d2w 删除两个单词
d2t, 删除当前位置到后面第二个 , 之间的内容,不包含 , (t = to

2.5. 复制 和 粘贴

普通模式下

指令 解释
y 复制
yy 复制当前行
p 粘贴到后面
P 粘贴到前面
o 在当前行的下一行添加空行并开始输入
O 在当前行的上一行添加空行并开始输入

2.6. 搜索

指令 解释
/ 从当前位置向后搜索
从当前位置后前搜索
n 搜索完之后,如果有多个结果,跳到 下一个匹 配项
N 跳到 上一个 匹配项
* 直接匹配当前光标下面的字符串,移到下一个匹配项,跟/ ? 没有关系
# 上一个匹配项

2.7. 高级移动

指令 解释
% % 在配对的 () [] 之间移动
H、M、L 移动到编辑器可视范围的头部,中间,尾部
G 到文件的尾部,前面添加数字再按 G 跳到输入的行,写行号的时候是看不见的
- + 跳到上一行,下一行
( ) 跳到当前句子的 首 / 尾
{ } 跳到 前一个 / 后一个 空行
[[ 跳到前一个{
]] 跳到后一个{

2.8. 高级指令

指令 解释
J 合并当前行与下一行。合并已选中的所有行。
r 替换当前字符到下一个输入的字符。如: r 后接 4 会把当前字符替换成 4
C c$ 的缩写:修改从光标到结尾
D d$ 的缩写:删除从光标到结尾
Y yy 的缩写:复制当前行
s 删除光标下字符,并开始编辑
S 删除当前行,并开始编辑
< 向前缩进,一行,或多行,范围设置在前面提到了,t等等
> 向后缩进,一行,或多行
= 格式化,一行,或多行
~ 切换光标下的字符大小写

3. vimtutor

在已经安装了vim的情况下 输入vimtutor可直接进入vimtutor
vimtutor是vim官方的教程,每个必要的基本命令分为一个小节,可以边看教程边操作非常有效且方便。学完大概需要20-25分钟。

4. 快速查询

vim指令图

最后修改:2020 年 07 月 20 日 02 : 13 PM
如果觉得我的文章对你有用,请随意赞赏