Linux vim 编辑器

vi 和 vim

  • vi(visusl interface) 的简称,是Linux 中最经典的文本编辑器
  • 设计思想: 让程序员的手指始终保持在键盘的核心区域,就能完成所有的编辑操作
  • 特点: 没有图形界面,但功能强大只能编辑文本内容,不能对字体、段落进行排版,不支持鼠标操作,没有菜单和命令。
  • vim 是vi 的发行版,在代码补全,快速定位,错误跳转等十分方便

打开和新建文件

  • 在终端输入 vi 文件名 即可
  • 如果文件已经存在,会直接打开该文件,如果不存在则新建一个文件
打开文件并且定位行

vi 文件名 +行数 如果只带上 + 而不指定行,则直接定位到文件末尾

异常处理
  • 如果vi 一场异常退出,在磁盘上可能保存有交换文件,下次再使用vi编辑该文件时,会看到注意信息,按下字母 d 可以删除交换文件即可。

工作模式

命令模式
  • 打开文件首先进入命令模式,是使用vi的入口
  • 通过命令对文件进行常规的编辑操作,例如:定位、翻页、复制、粘帖、删除等等
    • :进入末行模式
    • i 进入编辑模式(insert)
末行模式 – 执行保存、退出等操作
  • 要退出vi 返回到控制台,需要在末行模式下输入命令
  • 末行模式是vi的出口
编辑模式 – 正常的编辑文字
  • 末行模式和编辑模式之间的切换需要通过命令模式进行: ESC 返回命令模式

常用命令

重复次数
  • 在命令模式下,先输入一个数字,再跟上一个命令,可以让该命令重复执行指定次数
移动和选择
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
     vi 之所以快,关键在于能够快速定位到要编辑的代码行
移动命令和编辑操作能够组合使用
h、j、k、l 分别代表 左、下、上、右
4.2.1 行内移动
w 向后移动一个单词
b 向前移动一个单词
0 跳到行首
^ 跳到行首第一个非空白字符的位置
$ 跳到行尾
4.2.2 行数移动
gg 文件顶部
G 文件末尾
数字gg 移动到对应行
数字G 移动到数字对应行数
:数字 移动到数字对应行数
4.2.3 屏幕移动
Ctrl + b 向上翻页
Ctrl + f 向下翻页
H 光标跳到屏幕顶部
M 光标跳到屏幕中间
L 光标跳到屏幕底部
4.2.4 段落移动
vi 中以空行来区分段落
{ 跳到上一段段首
} 跳到下一段段首
% 在成对的括号间快速切换
4.2.5 标记
用 mx 在此行添加标记,可以快速跳转回来,x为标记名称,可以是a~z或A~Z之间的任意一个字母
添加了标记的行如果被删除,则标记同时被删除
如果在同一行添加了相同的标记,之前添加的标记会被替换
‘x 跳转回标记x所在的位置
4.2.6 选中文本
在复制文本时首先需要选中文本,在vi 中要选择文本,需要先使用Visual 命令切换到 可视模式
vi 中提供了三种可视模式,可以方便选择选中文本的方式
按 ESC 可以放弃选中,返回到命令模式
v 可视模式,从光标位置开始按照正常模式选择文本
V 可视行模式,选中光标经过的完整行
Ctrl + v 可视块模式,垂直方向选中文本
    在可视块模式下,需要键入 I 进入编辑模式
编辑操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
     删除、复制、粘贴、替换、缩排
4.3.1 撤销和恢复撤销
u 撤销上次操作(undo)
CTRL + r 恢复撤销的命令(redo)
4.3.2 删除文本
x 删除光标所在字符,或者选中文字
d(移动命令) 删除移动命令所对应的内容
dd 删除光标所在的行,可以ndd删除多行
D 删除至行尾
删除命令可以和移动命令连用,常见用法如下:
dw 从光标位置删除至单词末尾
d0 从光标位置删除到一行的起始位置
d} 从光标位置删除至本段结尾
ndd 从光标位置向下连续删除n行
dnG 将光标所在行至指定行直接所有代码全部删除
d'a 将光标所在位置到标记之间所有代码全部删除
4.3.3 复制、粘贴
vi 中提供有一个被复制文本的缓冲区
复制命令会选中的文字保存在缓冲区
删除命令删除的文字将保存在缓冲区
在需要的位置可以使用粘帖命令将缓冲区的文字插入到光标所在的位置
y(移动命令) 复制(copy)
yy 复制一行,可以nyy复制多行
p 粘贴(paste)
可以在编辑模式下使用鼠标右键粘贴
4.3.4 替换
r 在命令模式下替换当前字符(replace)
R 替换模式,替换当前行光标后的字符
对文件进行轻量级的修改,不用进入编辑模式,ESC 可以返回到命令模式
4.3.5 缩排和重复执行
>> 向右增加缩进
<< 向左减少缩进
. 重复上次命令
一次性在选中的代码行前增加4个空格,就叫增加缩进
一次性在选中的代码行前删除4个空格,就叫减少缩进
在可视模式下,缩排命令只需要使用一个 > 或 <
    在程序中,缩进通常用来表示代码的归属关系,前面的空格越少,代码的级别越高
查找和替换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    4.4.1 查找
/str 查找str
n 自动跳到下一个匹配项(next)
N 自动跳到上一个匹配项
* 向后查找 当前光标 所在的单词
# 向前查找 当前光标 所在的单词
匹配的所有内容会高亮显示,如果不想看到高亮,直接查找一个文本中不存在的东西即可
4.4.2 查找并替换
在vi中,查找和替换命令需要在 末行模式 下执行
固定格式 :%s///g # :进入末行模式
全局替换 :%s/旧文本/新文本/g # 一次性替换所有旧文本
可视区域范围替换 :s/旧文本/新文本/g
确认替换 把末尾的 g 改成 gc 在替换的时候,会有!
y 确认替换(yes)
n 不替换(no)
a 替换所有(all)
q 退出替换(quit)
l 替换最后一个,并把光标移动到行首(last)
^g 向下滚屏
^Y 向上滚屏
4.4.3 插入命令
i 在当前字符前插入文本
I 在行首插入文本
a 在当前字符后添加文本
A 在行末添加文本
o 在当前行后面插入空行
      O 在当前行上面插入空行
末行模式扩展
1
2
3
      e .   打开内置的文件浏览器,浏览当前目录下的文件(切换前要求当前文件先保存),e 后面也可直接跟文件名
n 文件名 新建文件
     w 文件名 另存为,但是仍然编辑当前文件,并不会切换文件。在项目实战中方便阶段性备份代码
分屏命令
1
2
3
4
5
6
7
8
9
       使用分屏命令可是同时查看和编辑多个文件
sp 文件名 横向增加分屏(split)
vsp 文件名 纵向增加分屏
分屏窗口都是基于CTRL + w 这个快捷键的,相当于中间过渡,w对应的是window
w 切换到下一个窗口
r 互换窗口
c 关闭当前窗口,但是不能关闭最后一个窗口(close)
q 退出当前窗口,如果是最后一个窗口则关闭vi
o 关闭其他的窗口(other)