Vim手册

Vim第一步

显示模式

命令 描述
:set showmode 打开显示模式的开关

移动光标

命令 描述
h 左移
l 右移
j 下移
k 上移

删除字符

命令 描述
x 删除一个字符
nx 删除 n 个字符
dd 删除一整行
ndd 删除 n 行
dw 删除一个 word
d4w 删除 4 个 word
J 删除两行之间的换行,即把两行合并

撤销

命令 描述
u 撤销命令
Ctrl+R 反转撤销的动作
U 一次撤销对一行的操作,第二次返回对前一次的操作

其他编辑命令

命令 描述
i 在当前光标之前插入文本
a 在当前光标之后插入文本
o 在下一行插入文本
O 在上一行插入文本

备注:好多命令前面都可以加数字修饰,如 9k 表示向上移动 9 行。

退出

命令 描述
ZZ 保存并退出
:wq 保存并退出
:q! 丢弃修改并退出
:e! 丢弃所有修改并继续编辑

帮助

命令 描述
:help 显示帮助手册
:help x 显示 x 命令的帮助
:help u 显示 u 命令的帮助

移动

以word移动

命令 描述
w 把光标移动到下一个 word 首字母
3w 把光标移动到下三个 word 的首字母
b b 命令和 w 相反
e 把光标移动到下一个 word 尾字母
ge 把光标移动到上一个 word 的尾字母
gE B W E 移动更快,如 “a/b/c aa” “a/b/c” 会一次性移动

移动行首尾

命令 描述
$ 移动到行尾
3$ 移动到下一行的下一行的行尾
0 移动到行首
^ 移动到行首第一个非空格字符上

移动到指定字符

命令 描述
fs 在当前行查找下一个s,光标停在字符上
F 与 f 命令相反
ts 在当前行查找下一个 s,光标停在字符前一个字符上

括号匹配

命令 描述
% % 会自动匹配到与 “(”、"{"、"[" 匹配的下一个括号上

跳到指定行

命令 描述
3G 3G 跳到第三行
G 直接跳到最后一行
gg 直接跳到第一行
% 50% 跳转到文件中间,90% 跳转到文件接近尾的地方
H 当前屏幕的第一行
M 当前屏幕的中间
L 当前屏幕的最后一行

定位当前行

命令 描述
Ctrl+G 显示当前行的信息
:set number 显示行号
:set nonumber 关闭行号
:set ruler 在 vim 右下角显示光标位置

滚动屏幕

命令 描述
Ctrl+U 文本向下滚动半屏
Ctrl+D 文本向上滚动半屏
Ctrl+E 向上滚动一行
Ctrl+Y 向下滚动一行
Ctrl+F 向前滚动一屏
Ctrl+B 向后滚动一屏
zz 把当前行置于正中央
zb 把当前行置于底端

备注: 大写字母一般做的事情与小写字母相反。

搜索

简单搜索

命令 描述
/string 用于搜索一个字符串,如 /include 表示搜索 include,然后用 n 命令查找下一个,3n 表示下三个
?string 和 / 搜索方向正好相反
:set ignorecase 设置查找时忽略大小写
:set noignorecase 重设为不忽略大小写
a 上下箭头键可以使用历史搜索记录,也可使用 “a” 表示历史以 “a” 开头的搜索串
* 在一个 word 上按下 “*”,表示搜索该 word
< 匹配 word 的开头
> 匹配 word 的末尾
:set hlsearch 高亮显示搜索结果
:set nohlsearch 显示结果不高亮
:set incsearch 在没有输入完成时就开始搜索
:set nowrapscan 设置当搜索到文件尾时不重新搜索

正则搜索

命令 描述
^ 只搜索开头
$ 只搜索行尾
. 匹配单字符,c.m 表示匹配 c 和 m 之间只有一个字母的 word
\ 表示转义,如要查找 “c.m” 就需要 c\.m

小幅移动

改变文本

命令 描述
c 类似d,但删除后会进入插入模式,如 cw 删除一个 word 后进入插入模式
cc 类似 dd,但删除后会保持原来的缩进

快捷命令

命令 描述
x 删除当前光标下的字符
X 删除当前光标左边的字符
D 删除到行尾
C 修改到行尾
s 修改一个字符
S 修改一整行

替换单个字符

命令 描述
r 替换单个字符,5rx 表示把当前 5 个字符全部替换成 x

重复改动

命令 描述
. 表示重复上一次的修改

Visual模式

命令 描述
左右光标 按下 v 进入 Visual 模式,左右移动光标即会选中移动过的位置
上下光标 按下 v 进入 Visual 模式,上下移动光标即会选中移动过的整行

移动文本

命令 描述
p 当删除后再按下 p 会把原来的粘贴到光标处, P 粘贴到光标前
xp 交换两个字符
y 复制文本
yw 复制一个word
yy 复制一行
y$ 复制到行尾

定制你的VIM

命令 描述
~/.vimrc vim 的配置文件
:set autoindent 与上行保持相同缩进
:set history=50 设置冒号命令和搜索命令的保存记录数
:set ruler 总是在 vim 窗口右下角显示当前光标信息
:set showcmd 显示你当前正在输入的命令
:filetype plugin indent on 开启三种智能模式
:autocmd FileType text setlocal textwidth=78 普通文本文件一行超过 78 个字符自动换行
:set nowrap 设置不换行
:set sidescroll=10 当到行尾时自动滚动显示 10 个字符的上下文
:set whichwrap=b,s,<,>,[,] 设置包围字符
:set list 让制表符可见
:set cmdheight=3 设置最后显示 3 行信息

语法高亮

显示颜色

命令 描述
:syntax enable 显示语法高亮
:syntax clear 清除语法高亮
:syntax off 彻底停用语法高亮
:syntax manual 只对某些文件高亮

设置背景

命令 描述
:set background=dark 设置使用暗色背景
:set background=light 设置使用亮色背景

多个文件

编辑另一个文件

命令 描述
:edit foo.txt 编辑 foo.txt 文件
:write 上一个文件未保存,提示错误时,表示保存文件
:edit! foo.txt 强制 VIM 丢弃当前未保存的修改并开始编辑新文件
:hide edit foo.txt 编辑另一文件,但不保存当前文件的改动,使之成为一个隐藏缓冲区

文件列表

命令 描述
vim one.c two.c three.c 在 VIM 启动时就指定编辑多个文件
:next 开始下一个文件的编辑
:wnext 保存当前文件并编辑下一个文件

当前编辑的文件

命令 描述
:args 查看整个列表有哪些文件
:previous 编辑前一个文件
:wprevious 保存当前修改并编辑前一个文件
:last 编辑最后一个文件
:first 编辑第一个文件

自动存盘

命令 描述
:set autowrite 设置在编辑另一文件时自动存盘文件
:set noautowrite 设置关闭自动存盘

编辑另一文件列表

命令 描述
:args five.c six.c seven.c 不要重启 VIM,重新定义一个文件列表
Ctrl+^ 在编辑文件之间快速切换

备份

命令 描述
:set backup 设置备份文件,备份的总是前一个版本
:set backupext = .bak 设置生成备份文件的后缀
:set patchmode=.orig 让 vim 备份原始文件

向文件中追加内容

命令 描述
:write >> logfile 把当前文件内容追加到 logfile 中

查看文件

命令 描述
vim -R file 以只读方式运行 Vim
vim -M file 强制性的避免对文件进行修改
:set modefiable/:set write 去掉避免强制修改保护

更改文件名

命令 描述
:saveas move.c 把当前文件存为 move.c,原来文件还存在
:file move.c 改变当前正在编辑的文件名,但不保存该文件

分割窗口

分割一个窗口

命令 描述
:split 将屏幕分为上下两个窗口
Ctrl+W 切换当前活动窗口
:split two.c 在新窗口中编辑另一文件
:new 打开一个窗口并编辑一个空缓冲区
:3split alpal.c 打开一个高度为 3 行的新窗口
Ctrl-W + 增加窗口高度
Ctrl-W - 减小窗口高度
:vsplit 新窗口出现在当前窗口左边

关闭窗口

命令 描述
:close 关闭当前窗口
:only 关闭除当前窗口外的所有窗口

切换窗口

命令 描述
Ctrl-W h 到左边窗口
Ctrl-W j 到下边窗口
Ctrl-W k 到上边窗口
Ctrl-W l 到右边窗口
Ctrl-W t 到顶部窗口
Ctrl-W b 到底部窗口

移动窗口

命令 描述
Ctrl-W K 将当前窗口向上提升一次
Ctrl-W H 将当前窗口向左移动一次
Ctrl-W J 将当前窗口向下移动一次
Ctrl-W L 将当前窗口向右移动一次

所有窗口的操作

命令 描述
:qall 在打开了很多窗口的情况下退出 Vim,如果有未保存的使用 :write 保存更改
:wall 被修改了未保存而直接退出
:wqall 保存并退出所有窗口
:qall 放弃所以修改并退出 VIM

为文件打开新窗口

命令 描述
vim -o one.txt two.txt three.tx 为每一个文件打开一个新窗口

比较两个文件

命令 描述
vimdiff main.c~ main.c 比较 main.c~ 和 main.c 的不同
:edit main.c :vertical diffsplit main.c 在编辑一个文件时比较两个文件
:set noscrollbind 设置在滚屏时不两个一起滚动
]c 定位到下一个不同之处

清除差异

命令 描述
:diffupdate 重新显示两个文件的不同之处
dp 使该行的文件相同
do 使该行的文件相同