vi的使用
按键说明
移动光标的方法
按键 | 说明 |
---|
h或者← | 光标向左移动一个字符 |
j 或者↓ | 光标向下移动一个字符 |
k 或者 ↑ | 光标向上移动一个字符 |
l 或者→ | 光标向右移动一个字符 |
ctrl+f | 屏幕向下移动一页 相当于PageDown |
crtl+b | 屏幕向上移动一页,相当于PageUp |
ctrl+d | 屏幕向下移动半页 |
ctrl+u | 屏幕向上移动半页 |
+ | 光标移动到非空格符的下一列 |
- | 光标移动到非空格符的上一列 |
n+space | n代表数字,按下数字键按空格键,光标将向右移动这一列的n个字符 |
0或者Home | 数字0,移动到这一列的最前面字符处 |
$或者End | 移动到这一列最后字符处 |
H | 光标移动到这个屏幕最上方那一列的第一个字符 |
M | 光标移动到这个屏幕中央那一列的第一个字符 |
L | 光标移动到这个屏幕最下方那一列的第一个字符 |
G | 光标移动到这个文件的最后一列 |
nG | n为数字,移动到这个文件的第n列 |
gg | 移动到文件的第一列,相当于1G |
n+Enter | n为数字,光标向下移动n列 |
搜索与取代
按键 | 说明 |
---|
/word | 向光标之下寻找名称为word的字符串 |
?word | 向光标之上寻找名称为word的字符串 |
n | 这个n指英文按键,代表重复前一个搜寻的动作 |
N | 这个N是因为按键,与n刚好相反,为反向的进行前一个搜寻工作 |
:n1,n2s/word1/word2/g | n1,n2为数字,在第n1和n2列之间寻找word1,并将该字符串取代为word2 |
:1,$s/word1/word2/g | 在第一列和最后一列之间寻找word1,并将该字符串取代为word2 |
:1,$s/word1/word2/gc | 在第一列和最后一列之间寻找word1,并将该字符串取代为word2,且在取代之前显示提示符给用户确认 |
删除、复制、粘贴
按键 | 说明 |
---|
x,X | x为向后删除一个字符,X相当于向前删除一个字符 |
nx | 连续向后删除n个字符 |
dd | 删除光标所在一行 |
ndd | 删除光标所在的向下n行 |
d1G | 删除光标所在行到第一行的所有数据 |
dG | 删除光标所在行到最后一行的所有数据 |
d$ | 删除光标所在处,到该列的最后一个字符 |
d0 | 删除光标所在处,到该列的最前边一个字符 |
yy | 复制光标所在的那一列 |
nyy | 复制光标所在向下n列 |
y1G | 复制光标所在列到第一列的数据 |
yG | 复制光标所在列到最后一列的数据 |
y0 | 复制光标所在那个字符到该列行首的所有数据 |
y$ | 复制光标所在那个字符到该列行尾的所有数据 |
p,P | p为将已经复制的数据在光标下一列贴上,P为将已经复制的数据在光标的上一列贴上 |
J | 将光标所在列与下一列的数据结合为同一列 |
u | 复原前一个动作 |
ctrl+r | 重做上一个动作 |
存储离开指令
指令 | 说明 |
---|
:w | 将编辑的数据写入到硬盘文件中 |
:w! | 强制写入 |
:q | 离开vi |
:q! | 强制离开不存储 |
:wq | 存储后离开 |
ZZ | 若改动过,存储后离开,若文件没有被改动,则不存储离开 |
:w [filename] | 将编辑的数据存储到另一个文件中 |
:r [filename] | 在编辑的数据中,读入两一个文件的内容,即将其他文件的内容加进来 |
:n1,n2 w [filename] | 将n1到n2的内容存储到另一个文件中 |
:! command | 暂时离开vi到指令列模式下执行command的显示结果 |
:set nu | 显示行号 |
:set nonu | 撤销行号 |
vim的暂存档、救援回复与开启时的警告信息
当正在使用vi编辑器对某文件进行编辑时,出现系统中断或者其他原因时,可以通过暂存档将文件找回来
在打开vim编辑器时,会在同目录下生成一个暂存档文件,记录对该文件的操作
例如:编辑/home/test.txt时,vim会主动创建/home/test.txt.swp的暂存档,对test.txt的操作都将被记录
如果存在暂存档文件,若想重新使用vim编辑器打开该文件时会出现如下状态:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ef7b6cc6d8b9cf7f5870ed7c62da2f6e.png)
出现这种情况可能有两种可能:
- 可能是因为有其他人或者程序同时在编辑这个文件
- 在前一个vim的环境下,可能因为某些原因导致了vim没有保存就中断了
如上图所示警告信息中,出现的可选状态,可以针对该暂存档进行相关处理:
- [O]pen Read-Only:打开此文件成为只读档
- (E)dit anyway:还是用正常的方式打开要编辑的文件,并不会载入暂存档的内容,这种情况容易出现两个使用者互相改变对方文件的情况
- ®ecover:加载暂存档的内容,用于救回之前没有保存的工作,保存之后,还需要手动删除暂存档文件
- (Q)uit:离开vim
- (A)bort:离开vim
vim额外的功能
区块选择
举例:比如下图内容,想选中白色区域内容,可以使用vim的区块选择功能
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/357cccce2b31aca4f255573772facb72.png)
区块选择的按键意义说明:
区块按键 | 按键意义 |
---|
v | 字符选择,会将光标经过的地方反白选择 |
V | 列选择,会将光标经过的地方反白选择 |
ctrl+v | 区块选择,可以用长方向的方式选择资料 |
y | 将反白的地方进行复制 |
d | 将反白的地方删除 |
p | 将刚刚复制的区块,在光标所在处贴上 |
多文件编辑
vim hosts.txt myhosts.txt可以同时打开hosts.txt 和myhosts.txt两个文件
可以在多个文件中实现复制粘贴等操作
按键 | 按键意义 |
---|
:n | 编辑下一个文件 |
:N | 编辑上一个文件 |
:files | 列出目前这个vim开启的所有文件 |
多窗口功能
实现分区窗口放入多个文件,指令模式下输入:sp {filename},filename可有可无,没有时则是在另一个窗口启动同一个文件
多窗口情况下的按键功能
按键 | 按键意义 |
---|
:sp [filename] | 开启新窗口 |
ctrl+w+j 或者ctrl+w+↓ | 光标移动到下方的窗口 |
ctrl+w+k 或者ctrl+w+ ↑ | 光标移动到上方的窗口 |
ctrl+w+q | 相当于:q结束离开 |
vim挑字补全功能
组合按钮 | 补全内容 |
---|
ctrl+x → ctrl+n | 通过目前正在编辑的这个文件的内容文字作为关键词,予以补全 |
ctrl+x → ctrl+f | 以当前目录内的文件名作为关键字,予以补全 |
ctrl+x → ctrl+o | 以扩展名作为语法补充,以vim内建的关键词,予以补全 |
vim环境设定与记录:~/.vimrc和 ~/.viminfo
- vim会主动的将自己曾将做过的行为记录下来,记录动作的文件是~/.viminfo
- 可以在vim指令模式下输入:set all查询所有设定项目