所有的 Linux 系统都会内建 vi 文本编辑器;Vim 具有程序编辑的能力, 可以看做是 Vi 的增强版本, 可以主动的以字体颜色辨别语法的正确性, 方便程序设计。 代码补完、 编译及错误跳转等方便编程的功能特别丰富, 在程序员中被广泛使用.首先在ubuntu中需要用 sudo apt-get install vim 命令来安装vim,然后通过 vim 文本名 的命令来创建或编辑文本。
vim 的三种常见模式
(1)正常模式
在正常模式下, 我们可以使用快捷键。
以 vim 打开一个文档就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用『上下左右』 按键来移动光标, 你可以使用『删除字符』 或『删除整行』 来处理档案内容, 也可以使用『复制、 贴上』 来处理你的文件数据.
(2)编辑模式
在模式下, 程序员可以输入内容。
按下 i, I, o, O, a, A, r, R 等任何一个字母之后才会进入编辑模式, 一般来说按 i 即可
(3)命令行模式
在这个模式当中, 可以提供你相关指令, 完成读取、 存盘、 替换、 离开 vim 、 显示行号等的动作则是在此模式中达成的!
三种模式的相互转换图
常用的快捷键实例
(1)在正常模式下拷贝当前行 yy , 拷贝当前行向下的 5 行 5yy, 并粘贴(p);
(2)在正常模式下删除当前行 dd , 删除当前行向下的 5 行 5dd ;
(3)在文件中查找某个单词 命令行下输入 /关键字 , 回车 查找 , 输入 n 就是查找下一个 ;如查找hello,就需要输入 /hello
(4)定位文件的首行和尾行 在正常模式下输入命令 gg 到达首行,输入命令 G 达到尾行 ;
(5)撤销之前的编辑 先从编辑模式转入到一般模式,然后输入命令 u ;
(6)设置文件的行号 在命令行模式下输入 :set nu 可以为当前文件显示行号,输入 :set nonu 撤销显示行号;
(7)定位文件的某一行 如将光标定位到第20行:
- 第一步: 显示行号 :set nu
- 第二步: 输入 20 这个数
- 第三步: 输入 shift+g
注意,在正常模式下,输入 /或: 都会进入命令行模式,所以上面在命令行模式下的操作命令都包含这两个操作符中的一个
(7) 打开文件并定位到指定的行
在打开文件的命令后添加一个加号 + 直接将光标定位到最后一行;
对于要定位到其中的某一行,只需要在加号后面添加对应的行数:
(8)异常处理
如果vim异常退出,例如在编辑文档时突然关闭终端,此时在磁盘上可能会存在 交换文件, 它是隐藏文件(以 . 开头的文件)
此时再打开之前的文件,会看到以下屏幕信息,按下字母d删除交换文件就可以重新编辑了 ,或者按r可以恢复未保存的文件
进入文件后可以看到之前为保存的部分也已经删除了;
命令路线图
1.重复次数
在一般模式下,先输入一个数字,再跟上一个命令,可以让该命令重复执行指定的次数。
2.移动和选择(多练习)
vim 之所以快,关键在于能够快速定位到指定的代码行
移动命令 能够和 编辑操作 命令 组合使用
3. 编辑操作
删除、复制、粘贴、替换、缩排
4. 撤销和重复
5. 查找和替换
1.1 移动
1)上、下、左、右
命令 | 功能 | 手指 |
h | 向左 | 是指 |
l | 向右 | 无名指 |
k | 向上 | 中指 |
j | 向下 | 食指 |
2)行内移动
命令 | 英文 | 功能 |
w | word | 向后移动一个单词 |
b | back | 向前移动一个单词 |
0 | 移动到行首 | |
^ | 行首,第一个不是空白字符的位置 | |
$ | 行尾 |
3)行数移动(整个文件跳转)
命令 | 英文 | 功能 |
gg | go | 文件顶部 |
G | go | 文件尾部 |
数字gg | go | 移动到数字对应行数 |
数字G | go | 移动到数字对应行数 |
:数字 | 移动到数字对应行数 |
4)屏幕移动
命令 | 英文 | 功能 |
ctrl+b | go | 向上翻页 |
ctrl+f | go | 向下翻页 |
H | Head | 屏幕顶部 |
M | Middle | 屏幕中间 |
L | Low | 屏幕底部 |
1.2 移动(程序)
1)段落移动
- vim 中使用 空行 来区分段落
- 在程序开发时,通常 一段功能相关的代码 会写在一起 --之间没有空行
命令 | 功能 |
{ | 上一段 |
} | 下一段 |
2)括号切换
在程序世界中,括号 () 、{}、[]的使用频率很高,而且都是成对出现的
命令 | 功能 |
% | 切换括号,如从左括号切换到右括号 |
3)标记
- 在开发时,某一处代码需要稍后处理,例如:编辑、查看
- 此时先用 m 增加一个标记,这样可以 在需要时快速跳转回当前位置 或者执行其他编辑操作
- 标记名称 可以是 a~z 或 A~Z 之间的任意一个字母
- 添加了标记的行如果被删除,标记同时被删除
- 如果 在其他行添加了相同的标记,之前添加的标记会被替换掉
命令 | 英文 | 功能 |
mx | mark | 添加标记x,x可以是a~z或者A~Z之间的任意一个字母 |
'x | 直接定位到x所在位置 |
1.3 选中文本(可视模式)
- 学习 复制 命令之前需要学会 怎么样选中要复制的代码
- 在 vim 中要选择文本,需要先使用 visual 命令切换到 可视模式
- vim 提供了三种可视模式,可以方便程序员选择 选中文本的方式
- 按 ESC 可以退出可视模式,回到一般模式
命令 | 模式 | 功能 |
v | 可视模式 | 从光标位置开始按照正常模式选中文本 |
V | 可视行模式 | 选中光标经过的完整行 |
ctrl+v | 可视块模式 | 垂直方向选中文本 |
- 在可视模式下,可以和 移动命令 连用,例如ggVG 能够选中所有内容
1.4 撤销和恢复撤销
- 在学习编辑命令之前,先要知道如何撤销之前一次 错误的编辑动作
命令 | 英文 | 功能 |
u | undo | 撤销上一条命令 |
ctrl+r | redo | 恢复撤销的命令 |
1.5 删除文本
命令 | 英文 | 功能 |
x | cut | 删除光标所在的字符,或者经可视模式选中的文本 |
d+移动命令 | delete | 删除光标到移动命令对应的内容 |
dd | delete | 删除光标所在的行,ndd可以删除多行 |
D | delete | 删除至行尾 |
提示:如果使用可视模式选中了一段文本,那么无论使用 d 还是 x 都可以删除选中文本;
删除命令可以与移动命令 连用,以下是常见的组合命令:
- dw 从光标位置删除到单词末尾
- d0 从光标位置删除到该行的起始位置
- d} 从光标位置删除到段落结尾
- ndd 从光标位置向下连续删除n行
- d代码行G 从光标位置所在的行 删除到 指定的代码行 之间所有的代码
- d'a 从光标位置所在的行 删除到 标记a所在的行 之间所有的代码
1.6 复制和粘贴
vim 提供了一个复制文本的缓冲区
- 复制 命令会将选中的文本保存在缓冲区
- 删除 命令删除的文本会被保留在缓冲区
- 在需要的位置,使用粘贴命令可以将缓冲区的文本插入到光标所在位置
命令 | 英文 | 功能 |
y+移动命令 | copy | 复制 |
yy | copy | 复制光标所在的行,nyy可以复制多行 |
p | paste | 粘贴,np可以复制多遍 |
提示
- 删除命令 d 和 x 类似于图形界面的 剪切操作 -- ctrl + x
- 命令 y 类似于图形界面的 复制操作 -- ctrl + c
- 命令 p 类似于图形界面的 粘贴操作 -- ctrl + v
- vim 中的 文本缓冲区 只有一个,如果后续做过 复制、剪切 操作,则之前缓冲区的内容会被替换
注意
- vim 中的 文本缓冲区 和系统的 剪切板 不是同一个
- 在其他软件中使用 ctrl + c 复制的内容,不能在 vim 中通过 p 命令 粘贴,但是可以在 编辑模式下 使用 鼠标右键粘贴
1.7 替换
命令 | 英文 | 功能 | 工作模式 |
r | replace | 替换当前字符 | 一般模式 |
R | replace | 替换当前光标后的字符 | 替换模式 |
- R 命令进入替换模式 ,替换完成后,按 ESC 回到一般模式
- 替换命令 的作用就是不进入 编辑模式,对文件进行轻量级修改
1.8 缩排和重复执行
命令 | 功能 |
>> | 光标所在的行向右增加缩进 |
<< | 光标所在的行向左减少缩进 |
. | 重复上次命令 |
- 缩排命令 在开发程序时,统一增加代码的缩进,比较有用!
- 一次性 在选中的代码前增加4个空格,就叫做增加缩进
- 一次性 在选中的代码前删除4个空格,就叫做减少缩进
- 在 可视模式 下,缩排命令只需要使用 一个 > 或者 <
在程序中,缩进常用来表示代码的归属关系
- 前面的空格越少,代码的级别越高
- 前面的空格越多,代码的级别越低
1.9 查找
常规查找
命令 | 功能 |
/str | 查找str |
查找到指定内容后,使用 next 查找下一个出现的位置:
- n : 查找下一个
- N :查找上一个
查找到的内容会高亮显示,如果不想看到高亮,可以再查找一个文档中不存在的内容即可
单词快速匹配
首先将光标定位到一个单词,然后:
命令 | 功能 |
* | 向后查找当前光标所在的单词 |
# | 向前查找光标所在的单词 |
在开发中,通过单词快速匹配,可以快速看到这个单词在其他什么位置使用过
1.10 查找与替换
在vim 中查找和替换命令需要在 命令模式 进行
记忆命令格式:
:%s///g
1)全局替换
一次性替换文件中的所有旧文本
命令格式如下:
:%s/旧文本/新文本/g
2)可视区域替换
先选中 要替换文本 的范围
命令格式如下:
V 先进入 可视行 模式,选中要替换的文本范围,然后输入:
s/旧文本/新文本/g
3)确认替换
把上面替换命令末尾的 g 改为 gc,在输入命令后会有提示,推荐使用!
:%s/旧文本/新文本/gc
- 1、y -yes 替换
- 2、n -no不替换
- 3、a -all 替换所有
- 4、q -quit 退出替换
1.11 插入命令
命令 | 英文 | 功能 | 常用 |
i | insert | 在当前字符前插入文本 | 常用 |
I | insert | 在行首插入文本 | 较常用 |
a | append | 在当前字符后添加文本 | |
A | append | 在行末添加文本 | 较常用 |
o | 在当前行后插入一空行 | 常用 | |
O | 在当前行前插入一空行 | 常用 |
vim的配置文件
用户级别
目录:~/.vimrc
系统级别
目录:/etc/vim/vimrc