vi、vim的使用

vi、vim的使用

还记得当年第一次使用vim怎么都退不出去的焦灼处境,后来慢慢变得熟悉,但是可能有个完美主义的情结,总想要一次达到很高的完成度,鸟哥的Linux私房菜的相关内容写的很好,发现很适合自己,来记录一遍吧。

vi是一种文本编辑器,大多数主流的Linux机器都会安装vi,vim是vi的进阶版本,拥有更多的功能。首先需要了解的是,vi、vim有三种模式,默认进入后的模式是一般命令模式;编辑文件时是编辑模式;执行命令时是命令模式

vi其实已经很完善了,vim比vi多了对代码文件的语法高亮、代码补全、区块选择,正则表达式搜索、多窗口等。

一、三种模式的切换

一般命令模式是一种中间状态,命令模式和编辑模式无法直接切换。

  • 一般命令模式–>>命令模式
1
2
3
:
?
/
  • 命令模式–>>一般命令模式
1
Esc
  • 一般命令模式–>>编辑模式
1
2
3
4
5
6
i     在光标处插入,进入编辑模式
a 在光标下一个字符处插入,进入编辑模式
o 在光标下一行插入,进入编辑模式
I 在光标所在行第一个非空字符前插入,进入编辑模式
A 在光标所在行最后一个字符后插入,进入编辑模式
O 在光标上一行插入,进入编辑模式
  • 编辑模式–>>一般命令模式
1
Esc

二、一般命令模式

新建一共文件或者打开一共文件,默认就是此模式。

  • 光标的简单移动
1
2
3
4
h     光标左移一个字符,等同于←
j 光标下移一行,等同于↓
k 光标上移一行,等同于↑
l 光标右移一个字符,等同于→
  • 光标的比较大范围的上下移动
1
2
3
4
5
6
7
H     光标移动到屏幕显示的第一行
M 光标移动到屏幕显示的中间一行
L 光标移动到屏幕显示的倒数第5行(鸟哥Linux私房菜里写的是屏幕最后一行)
G 光标移动到最后一行
nG 光标移动到第n行,n是数字
gg 光标移动到文件第一行,相当于1G
n<Enter> n是数字,<Enter>是回车,会向下移动n行
  • 光标的比较大范围的左右移动
1
2
3
0     光标移动到本行的第一列
$ 光标移动到本行的最后一列
n<space> n是数字,<space>是空格,会向右移动n个字符
  • 翻页、翻半页
1
2
3
4
ctrl + f     向下翻一页
ctrl + b 向上翻一页
ctrl + d 向下翻半页
ctrl + u 向上翻半页
  • 进入编辑模式
1
2
3
4
5
6
7
8
i     在光标处插入,进入编辑模式
a 在光标下一个字符处插入,进入编辑模式
o 在光标下一行插入,进入编辑模式
I 在光标所在行第一个非空字符前插入,进入编辑模式
A 在光标所在行最后一个字符后插入,进入编辑模式
O 在光标上一行插入,进入编辑模式
r 替换光标的下一个字符,不会进入编辑模式
R 在光标处开始一直替换字符,会进入替换模式,
  • 剪切、复制、粘贴、撤销
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
x     向后剪切一个字符
X 向前剪切一个字符(不包含本字符)
nx n是数字,代表一次剪切n个字符
dd 剪切本行
ndd n是数字,剪切n行
d0 剪切本行第一个字符到本字符之间的字符串(不包含本字符)
d$ 剪切本字符到本行最后一个字符之间的字符串
d1G 剪切第一行到本行的行
dG 剪切本行到的最后一行
yy 复制本行
nyy n是数字, 复制n行
y0 复制本行第一个字符到本字符之间的字符串(不包含本字符)
y$ 复制本字符到本行最后一个字符之间的字符串
y1G 复制第一行到本行的行
yG 复制本行到的最后一行
pp 在此下一行/字符粘贴,
P 在此上一行/字符粘贴,
#扩展,好像没什么用,已经很容易做到这个操作了
ynG n是数字,表示复制本行到n行之间、或n行到本行之间的行
u 撤销上一步操作
. 重复上一个操作
c 删除数据,10cj代表删除向下删除10行的数据(包括本行)
J 将本行和下一行合并为一行,即删除本行的回车符
ZZ 如果文件未修改则不保存退出,如果已经修改,则保存后退出
q: 查看历史编辑记录

三、命令模式

  • 查找特定关键词
1
2
3
4
/word<Enter>     <Enter>是回车,向下查找第一个`word`关键词
?word<Enter> <Enter>是回车,向上查找第一个`word`关键词
n 如果刚刚查找完,表示继续向这个方向查找
N 如果刚刚查找完,表示继续向另一个方向查找
  • 查找并替换
1
2
3
:n1,n2s/word1/word2/g     n1、n2是数字,向下查找并替换`word1`关键词为`word2`
:n1,n2s/word1/word2/gc 每一次替换都需要确认
:1,$s/word1/word2/g 代表从文件头到文件尾查找并替换
  • 临时退出,执行shell命令
1
:!<command>     <command>是要执行的shell命令
  • 显示/隐藏文件的行数
1
2
:set nu     显示文件的行数
:set nonu 隐藏文件的行数
  • 退出
1
2
3
4
:q     退出文件编辑
:q! 强制退出文件编辑。即不保存文件直接退出
:wq 保存并退出
:wq! 强制保存并退出
  • 保存文件
1
2
3
4
:w                 保存文件
:w 新的文件名 保存文件到另一个文件
:w! 强制保存,权限可变为可写的情况下
:n1,n2 2 新的文件名 保存n1行到n2行之间的内容到另一个文件
  • 读入文件
1
:r 待读的文件     追加待读的文件到光标后
  • 一些环境变量
1
2
3
:set bg=dark      切换背景主题,深蓝色的字体偶尔不明显
:set hlsearch 设置高亮搜索
:set nohlsearch 取消设置高亮搜索
  • 多文本切换的编辑
1
2
3
:files      查看编辑的文件
:n 编辑下一个文件
:N 编辑上一个文件
  • 加密
1
:X         可以加密文件,但是要注意加密后密码错误的情况下不要修改文件.

四、vim额外一些功能

  • 区块选择
1
2
3
v     按照字符选中
V 按照行数选中
ctrl+v 按照矩阵区块选中
  • 多窗口
1
2
3
4
5
6
7
8
9
:sp             默认会另一个横向窗口打开同一个文件
:sp 文件名 新横向窗口打开新的文件
:vsp 默认会另一个纵向窗口打开同一个文件
:vsp 文件名 新纵向窗口打开新的文件
ctrl + w + ↑ 移动到上方的窗口
ctrl + w + j 移动到下方的窗口
ctrl + w + ↓ 移动到下方的窗口
ctrl + w + k 移动到上方的窗口
ctrl + w + q 关闭窗口退出(修改文件后就不能这样了)
  • 关键词补全
1
2
3
ctrl + x ,ctrl + n        当前文件内容补全
ctrl + x ,ctrl + f 当前目录文件名补全
ctrl + x ,ctrl + o 扩展名内置函数补全
  • vim相关文件
1
2
~/.vimrc         记录一些环境变量
~/viminfo 记录vim的操作
  • 分屏打开多个文件
1
2
vim -o file1 file2         横向分屏
vim -O file1 file2 纵向分屏
  • 打开文件并跳转到指定行
1
vim file +n      n是数字,代表行数
  • 只读方式打开文件
1
2
vim -R file       只读方式打开文件,可以强制保存
vim -M file 只读方式打开文件,不可以强制保存
  • 恢复异常的文件
1
vim -r file     恢复异常的文件
  • 打开文件并且光标停留到第一个搜索到的字符串
1
vim +/string  file      打开文件并且光标停留到第一个搜索到的字符串string

五、异常处理

偶尔会发生一些异常情况,比如多人同时编辑一共文件,文件编辑后vim异常退出,都会导致留下一个.swp的文件,此时可以选择恢复或者删除。

六、使用向导

后来查资料才发现,vim有一个引导程序来介绍使用。

1
vimtutor

暂时先就此为止吧,再多用不到的知识也只是徒增烦恼哈

七、关联阅读

八、封面图

vim