1. 简介
在说vim之前,先说下什么是vi。vi是visual interface的简称,是Linux中最经典的文本编辑器。vi的核心设计思想是:让程序员的手始终保持在键盘的核心区域就能够完成所有的编辑操作。而vim又是从vi发展出来的一个文本编辑器,即vi improved,它在代码补全、编译及错误跳转等方便编程的功能上特别丰富,在程序员中被广泛使用。
2. vim的工作模式
vim有三种主要的工作模式
- 命令模式(Command mode):用户启动vim时,首先进入的便是命令模式。命令模式可认为是vim的入口,此模式下敲击键盘的字符都会被当做命令,而非在文本中插入字符。
- 插入模式(Insert mode):此模式下可以正常地编辑文字,与平时使用习惯差别不大。
- 底行模式(Last line mode):此模式下可以执行保存、退出以及其他的一些功能。按下
esc+:
即可进入底行模式。输入wq为保存退出,输入q!为不保存退出。
此外,还有其他一些模式,如可视模式(Visual)、替换模式(Replace)等。
3. 常用命令介绍
3.1 移动
方位移动
- h:光标左移一格
- j:光标下移一格
- k:光标上移一格
- l:光标右移一格
使用方向键也是允许的。
行内移动
- 0:光标移至行首
- $:光标移至行尾
- ^:光标移到当前行的第一个非空字符
g_
:光标移到当前行的最后一个非空字符- b:光标到上一个字的开头
- w:光标到下一个字的开头
- e:光标移到下一个字的结尾
- ge:光标移到上一个字的结尾
- fa:移到下一个a出现的位置(F与之相反)
- ta:移到下一个a出现位置的前一个位置(T与之相反)
行间移动
- G:光标移至文末
- gg:光标移至开头
- Ngg或NG:光标移至N行开头
语义移动
- (:光标移至上一句首
- ):光标移至下一句首
- {:光标移至段首
- }:光标移至段尾
屏幕移动
- H:将光标移到屏幕的最顶行
- M:将光标移到屏幕中间
- L:将光标移到屏幕最底行
- Ctrl+b:向上翻页
- Ctrl+f:向下翻页
3.2 选择
此功能需进入可视模式,方法为按下键盘上的v键。然后搭配上面移动的相关命令即可实现文本的选择。常用的有ggvG可实现全选,v$可实现选中某行,Ctrl+v可进入可视块模式,允许垂直方向选择文本。
可视模式更详细的用法可参考:
https://blog.csdn.net/ii1245712564/article/details/46960387
3.3 复制
- y:复制
- yy:复制一行
- Nyy:复制从光标处起的N行内容
- yw:复制光标处至词尾的内容
- yaw:复制光标所在单词
- ya”:yank around”,复制整个字符串包括引号
- yi”:yank inside”,复制引号之间的内容,不包括引号(类似还有yi(、yi[等)
3.4 粘贴
- p(小写):在光标后粘贴复制或剪切的内容
- P(大写):在光标前粘贴复制或剪切的内容
3.5 删除(剪切)
- x:删除光标所在字符(cut)
- d:删除(可与移动命令搭配使用,自行探索)
- dd:删除光标所在行
- D:从光标处删至行尾(与d0等同)
- dw:删除光标至词尾的内容
- daw:删除光标所在单词
3.6 撤销
- u:撤销上次命令(undo)
3.7 恢复
- Ctrl+r:恢复撤销的命令(redo)
3.8 查找
- /str:查找字符串str第一次出现的位置
- n:当查找到指定内容后,继续查找下一个
- N:查找上一个
- *:向后查找当前光标所在单词
- #:向前查找当前光标所在单词
- fa:向后查找第一个a出现的位置
- ;:重复上一次f查找命令
3.9 替换(修改)
- r:替换光标所在字符
- R:此时将进入替换模式,每输入一个字符就会替换光标所在字符,并使光标后移一格,以便继续替换。
- s:删除当前字符并插入
- cw: 替换从光标所在位置到当前单词结尾的字符
- caw:删除光标所在单词并插入
- ci”:删除“…”之间的内容并插入(类似还有ci(、ci[等)
- .:重复上一次修改命令
- “.:跳转到上次修改所在行
- `.:跳转到上次修改所在位置
3.10 缩进
- >>:增加缩进
- <<:减少缩进
- gg=G:自动全文缩进
3.11 标记
- mx:添加标记x,x可以是a~z或A~Z之间的任意字母
- ‘x:定位到标记x所在行行首
- `x:定位到标记的确切位置
3.12 查看历史
q::查看历史命令
q/:查看搜索历史
补充:查看或编辑某条记录后按Enter可执行该条记录。按Ctrl+c可退出历史编辑
3.13 进入插入模式
- i:在当前字符前插入文本
- I:在行首插入文本
- a:在当前字符后插入文本
- A:在行尾插入文本
- o:在当前行后面插入空行
- O:在当前行前面插入空行
3.14 进入底行模式
esc+::进入底行模式
常用
- w filename:保存或重命名当前文件
- wq:保存退出
- saveas
:另存为指定路径下文件 - e
:打开路径下的文件 - q:在未做修改的情况下退出
- q!:不保存退出
行相关
- N:跳至第N行
- set nu:显示行号(nu即number)
- set nonu:隐藏行号(nonu即no number)
- J:拼接当前行和下一行
- set ts=N:设置Tab键跳过的空格数为N(ts即tabstop)
基本排版
- ce(nter):本行文字居中
- le(ft):本行文字左对齐
- ri(ght):本行文字右对齐
标签页
- tabnew filename:新建标签页
- tabn:跳到下个标签页
- tabp:跳到上个标签页
- tabc:关闭当前标签页
分屏
- sp:左右分屏
- vsp:上下分屏
补充:可使用Ctrl+w+w实现不同窗口的转动切换,方向为逆时针旋转;也可使用Ctrl+w搭配h、i、j、k或方向键实现窗口切换。
3.15 其他tips
复制、粘贴、剪切快捷键
- Ctrl+Insert:复制
- Shift+Insert:粘贴
- Shift+delete:剪切
自动补全快捷键:
- Ctrl+n
- Ctrl+p
数字自增(减)1
- Ctrl+a:使光标所在处的数字加1
- Ctrl+x:使光标所在处的数字减1
- .:重复上次命令
- ~:对光标下的字母大小写转换
- N
:重复Cmd命令N次,可与复制、删除以及其他很多命令搭配使用