一、Vi及Vim区别
Vi全称Visual Editor,为命令行界面下的文本编辑工具,同时为Unix系统默认的编辑器。Vim全称 Vi IMproved,是Vi的增强版,最明显的区别就是Vim显示字体是彩色的,而Vi使用系统默认字体颜色显示文本内容。
二、Vim三种工作模式转换关系
三、vi/vim键盘图
四、Vim三种工作模式常用命令
- 一般模式
可执行操作:移动光标、删除复制及粘贴、查找及替换
① 移动光标
序号 | 操作键 | 功能 |
---|---|---|
1 | n + h/← | 光标左移n个字符 |
2 | n + j/↓ | 光标下移n个字符 |
3 | n + k/↑ | 光标上移n个字符 |
4 | n + l/→ | 光标右移n个字符 |
5 | ctrl+f / PgDn | 屏幕向文件尾移动一页 |
6 | ctrl+b/PgUp | 屏幕向文件头移动一页 |
7 | n+空格 | n为数字,如果当前位置向右移动n个字符,遇到换行继续。 |
8 | 0(数字) | Home |
9 | $/End | 移动到该行行末 |
10 | H | 移动到当前屏幕最顶行,Highest |
11 | M | 移动到当前屏幕中间行,Middle |
12 | L | 移动到当前屏幕最底行,Lowest |
13 | gg | 光标移动到文本的首行 |
14 | G | 光标移动到文本最末行 |
15 | nG | 光标移动到文本的第n行,n为数字 |
16 | n+回车 | n为数字,光标下移n行 |
② 删除、复制和粘贴
序号 | 操作键 | 功能 |
---|---|---|
1 | x,X | x向行末删一个字符,X向行首删一个字符 |
2 | nx | n为数字,向行末删n个字符 |
3 | dd | 删除光标所在行 |
4 | ndd | 删除从光标所在行开始的n行 |
5 | d1G | 删除光标所在行到第一行的数据,拆分为d + 1G,1G为光标移到第一行 |
6 | dG | d+G,G移动光标到文末,所以为删除当前行到行末的数据 |
7 | yy | 复制光标所在行 |
8 | nyy | 用法同ndd,不过这里是复制 |
9 | y1G,yG | 用法同d1G,dG |
10 | p,P | p将数据复制到光标下一行,P将数据从光标上一行开始粘贴 |
11. | J | 将光标所在行数据与下一行组合成一行,当前行数据在前,数据中间用一个空格隔开 |
12 | u | 撤销操作 |
13 | ctrl+r | 重做上一个操作,注意是这里是重做,和重复不一样 |
14 | . | 重复前一个操作 |
③查找和替换
序号 | 操作命令 | 功能 |
---|---|---|
1 | /word | 向文末查找名为word的字符串,找到第一个word后,按n查找下一个,按N反方向查找下一个。所有符合单词背景色改变,当前符合单词首字母变色 |
2 | ?word | 向文首方向查找字符串,找到第一个word后,按n查找下一个,按N反方向查找下一个。所有符合单词背景色改变,当前符合单词首字母变色 |
3 | :n1,n2s/word1/word2/g | 在n1到n2行之间查找word1字符串并替换为word2 |
4 | :1,$s/word1/word2/g | 用法同上一条,不过这里是从文首到文末 |
5 | :1,$s/word1/word2/gc | 基本用法同上一条,但需要用户确定后才进行替换 |
- 编辑模式
可执行功能:对文档进行编辑
①一般模式进入编辑模式
序号 | 操作键 | 功能 |
---|---|---|
1 | i | 从当前光标处进入编辑模式 |
2 | I | 从当前行行首处进入编辑模式 |
3 | a | 追加模式,在光标后开始插入 |
4 | A | 在光标所在行行末进入编辑模式 |
5 | o | 在光标所在行行下插入一行并在该插入行开始编辑 |
6 | O | 在光标所在行行上插入一行并在该插入行开始编辑 |
7 | r | 替换光标所在字符,只替换一次 |
8 | R | 替换光标所在字符,直到按下Esc键,类似于windows下光标在字符下方进行的字符替换模式。 |
②退出编辑模式
编辑模式下ESC键可退出编辑模式返回一般模式。
- 命令行模式
可执行功能:保存文件,退出vim,读入外部文件,设置行号等
序号 | 操作命令 | 功能 |
---|---|---|
1 | :w | 保存文件但不退出 |
2 | :w! | 强制保存但不退出 |
3 | :q | 退出文件但不保存 |
4 | :q! | 强制退出文件但不保存 |
5 | wq | 保存后正常退出 |
6 | e! | 还原文档为最初打开状态 |
7 | ZZ | 等价于:wq |
8 | :w [filename] | 将文档另存为filename文档 |
9 | :r [filename] | 将光标所在行的下面部分读入filename文件 |
10 | :set nu | 在每行行首设置行号 |
11 | :set nonu | 取消行号 |
12 | :n1,n2 w [filename] | 将n1到n2行内容另存入filename文件。 |
五、Vim高级功能
-
多窗口编辑
①vim -On [file1] [file2] ···
②vim -on [file1] [file2] ···
-O代表垂直分割,-o代表水平分割(默认),n代表分屏数,默认n值为后面文件数
③窗口切换方式:垂直窗口切换ctrl+w+↓(j)/↑(k),水平窗口切换ctrl+w+←(h)/→(l)若只有两个窗口则加上方向键无效,直接使用ctrl+w即可切换。
④指定文件窗口跳转
:n[filename] :有filename项跳至filename文件,否则按窗口顺序跳转下一个窗口
:e# 回到上一个窗口
⑤窗口大小调整
纵向调整::resize num 调整纵向显示行数
横向调整::vertical resize num 调整水平显示行数
⑥窗口对应文件查看
:ls 或者 :files 可查看当前vim多窗口命令打开的所有窗口对应的文件名。
:file用于查看当前窗口为第几个窗口及当前光标所在行。
⑦vi与shell的切换
:shell 可实现不关闭vim的情况下回shell
shell 状态下 :exit 可实现返回vim窗口。
⑧ 新增窗口
:sp 将同一个文件多显示一份在新窗口中
:sp filename 在新窗口启动另一个文件
⑨关闭分屏
:only 或者 ctrl + w +o 只保留当前分屏
:q 退出当前分屏 -
多文件编辑
vim [file1] [file2] [file3] ···
这种方式就是不分屏的多文件编辑,使用:n进入右侧文件窗口(如file2 :n 后到file3),使用:N进入左侧文件窗口后进入(如file2 :n 后到file1) -
块选择
序号 | 操作键 | 功能 |
---|---|---|
1 | v | 字符选择,会将光标经过的地方反白选择 |
2 | V | 行选择,会将光标经过的行反白选择 |
3 | ctrl + v | 区块选择,用长方形选择数据 |
4 | y | 将反白的地方复制 |
5 | d | 将反白的地方删除 |
6 | p | 将复制的内容粘贴 |
六、文件救援
文件由于异常情况退出,比如在编辑时终端被关闭了会导致.swp文件生成,此时不能正常编辑文件。
解决方法的博文:
Linux——vi指令异常退出导致swp文件冲突