Vim 是从 Vi 编辑器发展出来的一款极其强大的文本编辑器,它保留了 Vi 编辑器的所有功能,并添加了许多新特性。Vim 具有代码补全、语法高亮、错误跳转、批量化处理等编辑功能,还支持异常丰富的插件扩展,且整个编辑全程可通过键盘完成,无需使用鼠标,以致其成为众多程序员一款高效的编程开发利器。
本节介绍关于 VIM 的一些命令与快捷方式,关于 VIM 获取与安装可以参考最强文本编辑器 VIM 获取与安装。VIM 难就难在复杂的操作命令和脱离鼠标的痛苦,其实只要掌握了技巧并不多难。
VIM 模式
命令模式(Command mode) 输入模式(Insert mode) 视图模式(Visual mode) 末行模式(Last line mode)
模式转换
命令 描述 i, I, a, A, o, O, s, S command 模式 —> insert 模式 esc insert 模式 --> command 模式 v, V command 模式 --> visual 模式 esc visual 模式 --> command 模式 :, / command 模式 —> 末行模式
常用命令
注:带 :
、/
、?
的是在末行命令下使用的命令。
打开文件
命令 描述 vim filename 打开或新建文件,并将光标置于第一行的首部 vim -r filename 恢复上次 vim 打开时崩溃的文件 vim -R filename 把文件以只读方式打开 vim + filename 打开文件,并将光标置于最后一行的首部 vim +n filename 打开文件,并将光标置于第 n 行的首部 vim +/str filename 打幵文件,并将光标置于第一个与 str 匹配的位置 vim -c command filename 在对文件进行编辑前,先执行指定的命令 vim file1 file2 file3 … 打开多个文件 vim -On file1 file2 … 打开多个文件并左右分屏 vim -on file1 file2 … 打开多个文件并上下分屏
查看文件
命令 描述 :ls 列出当前打开的所有文件 :bn 打开多个文件时,切换显示下一个文件 :bp 打开多个文件时,切换显示上一个文件 :sp filename 上下分割,并打开一个新的文件 :vsp filename 左右分割,并打开一个新的文件 :next 切换至下一个文件 :prev 切换至前一个文件 :last 切换至最后一个文件 :first 切换至第一个文件 Ctrl + w, s 按下 ctrl + w,再按下 s,上下分屏打开当前文件 Ctrl + w, v 按下 ctrl + w,再按下 v,左右分屏打开当前文件 Ctrl + w, h 文件左右分屏时,将光标定位到左边屏幕 Ctrl + w, l 文件左右分屏时,将光标定位到右边屏幕 Ctrl + w, H 文件左右分屏时,将当前分屏移动到左边 Ctrl + w, L 文件左右分屏时,将当前分屏移动到右边 Ctrl + w, j 文件上下分屏时,将光标定位到下边屏幕 Ctrl + w, k 文件上下分屏时,将光标定位到上边屏幕 Ctrl + w, J 文件上下分屏时,将当前分屏移动到下边 Ctrl + w, K 文件上下分屏时,将当前分屏移动到上边 Ctrl + w, c 文件分屏显示时,关闭当前分屏 Ctrl + w, q 文件分屏显示时,关闭当前分屏直到退出 VIM
操作文件
命令 描述 :q 不保存仅退出 :q! 不保存仅退出(强制退出) :qa 全部退出 :w 保存 :w! 强制保存 :wq 保存退出 :wq! 强制保存退出 :x 保存退出 :w filename 另存到 filename 文件 :saveas filename 另存到 filename 文件 :e filename 打开或新建一个文件 :e! 放弃所有更改,恢复文件到上次保存
功能命令
命令 描述 :set nu 显示行号 :set nonu 取消显示行号 :set ic 忽略字符大小写 :set noic 区分字符大小写 :syntax on 语法高亮 :syntax off 取消语法高亮 :changes 查看文件变化
光标插入
命令 描述 i 光标插在当前字符左侧 I 光标插在当前行的行首 a 光标插在当前字符右侧 A 光标插在当前行的行尾 o 新增下一行,并将光标插在行首 O 新增上一行,并将光标插在行首 s 删除光标所在字符,并将光标插在此处 S 删除光标所在行,并将光标插在行首
光标移动
命令 描述 h 光标向左移动 1 个字符 j 光标向下移动 1 个行 k 光标向上移动 1 个行 l 光标向右移动 1 个字符 nj 光标向下移动 n 个行 nk 光标向上移动 n 个行 H 光标移动到屏幕最上方一行的第 1 个字符 M 光标移动到屏幕中央一行的第 1 个字符 L 光标移动到屏幕最下方一行的第 1 个字符 G 移动到这个文件的最后一行 nG 移动到这个文件的第 n 行 gg 移动到这个文件的第一行,相当于 1G n + [enter] 光标移动向下移动 n 行 n + [space] 光标移动向右移动 n 个字符 + 光标移动到非空格符的下一行 - 光标移动到非空格符的上一行 w 光标移动到下个单词首部 b 光标移动到上个单词首部 e 光标移动到下个单词尾部 ge 光标移动到上个单词尾部 0 光标移动到本行行首 $ 光标移动到本行行尾 ^ 移动到行首非空字符位置 g_ 移动到行尾非空字符位置 fa 移动到本行光标处开始向后第一个为 a 的字符处 nfa 移动到本行光标处开始向后第 n 个为 a 的字符处 Fa 移动到本行光标处开始向前第一个为 a 的字符处 nFa 移动到本行光标处开始向前第 n 个为 a 的字符处 ta 移动到本行光标处开始向后第一个为 a 的字符的前一个字符处 nta 移动到本行光标处开始向后第 n 个为 a 的字符的前一个字符处 Ta 移动到本行光标处开始向前第一个为 a 的字符的前一个字符处 nTa 移动到本行光标处开始向前第 n 个为 a 的字符的前一个字符处
文件翻页
命令 描述 Ctrl + f 屏幕向下移动一页 Ctrl + b 屏幕向上移动一页 Ctrl + d 屏幕向下移动半页 Ctrl + u 屏幕向上移动半页 zt 移动屏幕将当前行移动到屏幕上方 zz 移动屏幕将当前行移动到屏幕中间 zb 移动屏幕将当前行移动到屏幕下方
大小写转换
命令 描述 ~ 将光标下的字母改变大小写 n~ 将光标位置开始的 n 个字母改变其大小写 g~~ 改变当前行字母的大小写 guu 将当前行的字母全改成小写 gUU 将当前行的字母全改成大写 guw 将光标下的单词改成小写 gUw 将光标下的单词改成大写 ngUU 将从光标开始到下面 n 行字母改成大写
格式化代码
命令 描述 == 将光标所在行代码格式化缩进 n== 将光标所在行到下面共 n 代码格式化缩进 gg=G 将全文代码格式化缩进 :set ai 设定自动缩进 :set noai 取消自动缩进 :set expandtab 将 tab 转换为 space :set tabstop=4 制表符宽度 tabstop=4 或 ts=4 :retab 按照设定值重新缩进
查找替换
命令 描述 : s/str/abc/ 将光标所在行的第一个 str 替换成 abc :%s/str/abc/ 将全文中的第一个 str 替换成 abc : s/str/abc/g 将光标所在行的 str 替换成 abc :%s/str/abc/g 将全文中的 str 替换成 abc :m,ns/str/abc/g 将 m 行到 n 行中所有的 str 替换为 abc /str 向后查找 str n 查找下一个,N 查找前一个 ?str 向前查找 str n 查找前一个,N 查找下一个 :set hlsearch 打开高亮搜索结果 :set nohlsearch 关闭高亮搜索显示
复制命令
命令 描述 yy 复制光标所在行 nyy 复制光标所在行,到向下 n 行 y1G 复制光标所在行,到第一行的所有数据 yG 复制光标所在行,到最后一行的所有数据 y0 复制光标所在字符,到该行行首所有数据 y^ 复制光标所在位置,到该行第一个非空字符之间的所有数据 y$ 复制光标所在字符,到该行行尾的所有数据 yw 复制光标所在位置,到该单词结束
粘贴命令
命令 描述 p 将复制的数据粘贴到光标的下一行 P 将复制的数据粘贴到光标的上一行 np 粘贴 n 次
删除命令
命令 描述 dd 删除光标所在行 ndd 删除光标所在行,到向下 n 行 d1G 删除光标所在行,到第一行的所有数据 dG 删除光标所在行,到最后一行的所有数据 d0 删除光标所在处,到该行行首 d^ 删除光标所在处,到该行的最前面一个非空字符 d$ 删除光标所在处,到该行的最后面一个字符 dw 删除光标所在处,到该单词结束所有字符 dt 删除下一个双引号之前的所有数据 x 向后删除一个字符 nx 向后删除 n 个字符 X 向前删除一个字符 ci{ 删除{}里面的内容 :m,nd 删除 m 行到 n 行
修改命令
命令 描述 cw 修改光标所在处,到该单词结束所有字符 r 替换光标所在处字符 R 从光标所在处开始替换字符,按 esc 结束
其他操作
命令 描述 . 重复上次操作 u 撤销上次操作 nu 撤销前 n 次操作 Ctrl + r 恢复上次操作 J 将光标所在行与下一行的数据结合成同一行 Ctrl + v 可视化块 Shift + v 可视化行
互动板块
问:如何快捷入门 VIM? 答:多敲多练,把键盘敲烂!