简介
Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
连 vim 的官方网站 (https://www.vim.org/ ) 自己也说 vim 是一个程序开发工具而不是文字处理软件。
Vim 的三种模式
基本上 vi/vim 共分为三种模式,命令模式(Command Mode)、输入模式(Insert Mode)和命令行模式(Command-Line Mode)。
命令模式(Command Mode)
vim 的默认模式,即启动 vim 后就进入该模式,也称普通模式。在此模式下敲击键盘的动作会被识别为命令,而非输入字符,比如此时按下 i ,并不会输入字符 i ,而是进入输入模式。
输入模式(Insert Mode)
在命令模式下按下 i 即可进入输入模式,使用 Esc 键可以返回到命令模式。
当然也可使用 a 、o 、s 等进入输入模式。参考 附录:vi / vim graphical cheat sheet
    
在输入模式中,可以使用如下按键:
- 字符按键以及- Shift组合 :输入字符
- Enter(回车键):换行
- Backspace(退格键):删除光标前的一个字符
- Delete(删除键):删除光标后的一个字符
- 方向键:在文件中移动光标
- Home/- End:移动光标到行首 / 行尾
- Page Up/- Page Down:上 / 下翻页
- Insert:切换光标为输入 / 替换模式,光标将变成竖线 / 下划线
- Esc:退出输入模式,切换到命令模式
命令行模式(Command-Line Mode)
在命令模式下按下 : (英文冒号)就可以进入命令行模式。
基本命令有:
- :w:保存文件
- :q:退出 vim 编辑器
- :wq:保存文件并退出 vim 编辑器
- :q!:强制退出 vim 编辑器,不保存修改
按 Esc 键可随时退出命令行模式。
Vim 命令大全
光标移动
| 单个字符移动 | ||
|---|---|---|
| h | 向左移动 | 使用 数字+字符 可实现多个字符移动。例如: 2h向左移动2个字符 | 
| l | 向右移动 | |
| j | 向下移动 | |
| k | 向上移动 | 
| 单词移动 | ||
|---|---|---|
| w | 将光标移动到下一个单词的开头 | 使用 数字+字符 可实现多个单词移动。例如: 2w将光标移动到第二个单词的开头 | 
| b | 将光标移动到前一个单词的开头 | |
| e | 将光标移动到下一个单词的词尾 | |
| E | 移动到单词的词尾(忽略标点符号) | |
| ge | 将光标移动到上一个单词的词尾 | 
| 行移动 | |
|---|---|
| $ | 将光标移动到当前行的行尾 | 
| 0 | 将光标移动到当前行的行首 | 
| ^ | 将光标移动到当前行的第一个非空字符(行首和第一个非空字符不一定是一个位置) | 
| % | 用于符号间的移动,它会在一对 ()、[]、{}之间跳跃 | 
| 文本块移动 | |
|---|---|
| ( | 移动到当前句子的开头 | 
| ) | 移动到下一个句子的开头 | 
| { | 移动到当前段的开头 | 
| } | 移动到下一段的开头 | 
| [[ | 移动到当前节的开头 | 
| ]] | 移动到下一节的开头 | 
| 在屏幕中移动 | ||
|---|---|---|
| nG | 跳转到指定的第 n行 | G移动到文件最后一行行首```` (2 次单引号)返回跳转前的位置 | 
| gg | 移动到文件开头 | |
| n% | 按百分比移动。移动到文件中间,就使用 50% | |
| H | 移动 home | |
| M | 移动到屏幕中间 | |
| L | 移动到一屏末尾 | |
| Ctrl + G | 查看当前位置状态 | 
文本插入操作
| 命令 | 说明 | 
|---|---|
| i | 在当前光标的前面插入字符 | 
| a | 在当前光标的后面追加字符 | 
| o | 在当前光标的下一行行首插入字符 | 
| I | 在一行的开头添加文本 | 
| A | 在一行的结尾处添加文本 | 
| O | 在光标当前行的上一行插入文本 | 
| s | 删除当前光标处的字符并进入到插入模式 | 
| S | 删除当前光标所在的行,并进入插入模式 | 
| u | 撤销修改 | 
文本删除操作
| 字符删除 | |
|---|---|
| x | 删除当前光标所在处的字符 | 
| X | 删除当前光标左边的字符 | 
| 单词删除 | |
|---|---|
| dw | 删除一个单词 (从光标处到空格) | 
| daw | 删除光标所在的整个单词(无论光标在什么位置,包括空白字符) | 
| diw | 删除整个单词文本(保留空格字符) | 
| d2w | 删除从光标开始处的 2 个单词 | 
| d$ | 删除从光标到一行末尾的整个文本 | 
| d0 | 删除从光标到一行开头的所有单词 | 
| dl | 删除当前光标处的字符(等价于 x) | 
| dh | 删除当前光标左边的字符(等价于 X) | 
| 行删除 | |
|---|---|
| dd | 删除从当前光标处的一整行(等价于 D) | 
| 5dd | 删除从光标开始处的 5 行代码 | 
| dgg | 删除从光标到文本开头 | 
| dG | 删除从光标到文本结尾 | 
| 行合并 | |
|---|---|
| J | 删除一个分行符,将当前行与下一行合并 | 
文本复制、剪切与粘贴
- y:复制
- p:粘贴
- yw:复制一个单词。 【拓展】- y2w:复制 2 个单词
- y$:复制从当前光标到行尾的所有单词
- y0:复制从当前光标到行首的所有单词
- yy:复制一整行 【拓展】- 2yy:复制从当前光标所在行的 2 行
复制文本块
- 首先进入 visual 模式:v
- 移动光标选择文本
- 复制与粘贴操作。
文本修改与替换
- cw:删除从光标处到单词结尾的文本并进入到输入模式
- cb:删除从光标处到单词开头的文本并进入到输入模式
- cc:删除一整行并进入到输入模式
- ~:修改光标下字符的大小写
- r:替换当前光标下的字符
- R:进入到替换模式
- xp:交换光标和下一个字符
文本查找与替换
- /string:正向查找。例如:- /123从光标处开始往后查找字符串- 123
- ?string:反向查找。例如:- ?123从光标处开始往前查找字符串- 123
- :s/old/new:将当前行的第一个字符串- old替换为- new
- :s/old/new/g:将当前行的所有字符串- old替换为- new
- :90s/old/new/g:将指定行的所有字符串- old替换为- new
- :90,93s/old/new/g:将指定范围的行的所有字符串- old替换为- new
- :%s/old/new/g:将文本中所有的字符串- old替换为- new
- :%s/old/new/gc:依次替换每个字符串关键字
- :%s/^old/new/g:将所有以- old开头的字符串替换为- new
高亮显示
:set hls 设置高亮显示。
* 键将当前光标处的单词高亮显示,使用 n 浏览下一个查找结果。
撤销修改、重做与保存
- u:撤销上一步操作
- Ctrl + r:将原来的操作重做一遍
- :U:恢复一整行(文件打开时的状态)
- :q:若文件没有修改,直接退出
- :q!:若文件已经修改,放弃修改退出
- :wq:若文件已经修改,保存修改并退出
- :e!:放弃修改,重新回到文件打开时的状态
Vim 环境变更
如果在 windows 下使用 gvim,以下设置基本可以通过 gvim 设置调整。
| 指令 | 描述 | 
|---|---|
| :set nu | 显示行号 | 
| :set nonu | 取消行号 | 
| :set ts=4 | 设置 tab space为 4 个空格(等价于:set tabstop=4) | 
| :set expandtab | 将 tab替换为指定数量的空格 | 
| :set autoindent | 设置为自动缩进 | 
| :set wrap | 启动折行 | 
| :set nowrap | 禁止折行 | 
| :set autoread | 设置当文件变化时,自动读取新文件 | 
| :set hls | 设置搜索结果高亮(等价于 :set hlsearch) | 
| :set nohls | 关闭搜索结果高亮(等价于 :set nohlsearch) | 
| :set guifont=consolas:h14 | 设置字体为 consolas,字号为 14 | 
| :set history=700 | 设置保存命令的行数 | 
| :set ff=unix | 将文件切换为 unix 格式,每行以 \n结尾 | 
| :set ff=dos | 将文件切换为 Windows 格式,每行以 \r\n结尾 | 
| :set enconding=utf-8 | 设置 vim 展示文本时的编码格式 | 
| :set fileencoding=utf-8 | 设置 vim 写入文件时的编码格式 | 
| :set filetype=html | 设置文件类型,方便语法高亮 | 
| :set background=dark | 设置背景颜色 | 
状态查询
Vim 查询当前状态的命令,形式是一般命令后面添加 ?
|  |  | 
示例:使用 :set ff=dos 设置文件格式,那么就可以使用 :set ff? :查询当前的文件格式。
 
	 
	 
	 
	 
	 
	 
	 
	