vim使用总结
vim使用总结
参考链接:

一、两种模式及常用快捷键
1.1 标准模式及命令模式
光标移动
- 单位级光标移动:
h向左一字符j下一行k上一行l向右一字符
- 单词级光标移动:
worW向右移动到下一单词开头(word)eorE向右移动到单词结尾(end)borB向左移动到单词开头f+<char>:移动到当前行中 [char] 的下一个出现位置F+<char>:移动到当前行中 [char] 的上一个出现位置
- 块级光标移动:
^:到第一个非空白字符$:到行尾gg:到文档第一行0:到行首(第 1 列){:到上一个段落}:到下一个段落gg:到文档第一行G:到文档最后一行:<N>or<N>ggor<N>G跳转到第 N 行:+<N>or<N>j向下跳 N 行:-<N>or<N>k向上跳 N 行
- 翻页
Ctrl+u:向上移动半页Ctrl+d:向下移动半页Ctrl+b:向上移动一整页Ctrl+f:向下移动一整页
打开文件
- gf:文件内跳转到对应的文件(打开include文件时)
:e <filename>打开名为 filename 的文件,若文件不存在则创建之:Ex在 Vim 中打开目录树,光标选中后回车打开对应文件(提示:-进入上级目录)
文件buffer
:buffers或:ls:查看 buffer 列表(即打开文件的历史记录):bn打开缓存中下一个文件:bp打开缓存中上一个文件:b<N>打开缓存中第 N 个文件:bdelete<N>或:bd<N>:删除要关闭的缓冲区(文件)
保存文件
:w保存当前文件:q关闭当前 buffer:wa保存全部文件:wqorZZ保存并退出:q!orZQ强制退出,不保存:qa!保存并推出全部 buffer:saveas <new filename>文件另存为:w <new filename>文件另存一份名为<new filename>的副本并继续编辑原文件
查找
- 文件内查找
*向后查找光标当前所在单词#向前查找光标当前所在单词/<search>向后查找指定字符串?<search>向前查找指定字符串n继续查找下一个,方向由之前查找的方向决定N继续查找上一个,方向由之前查找的方向决定
- 行内查找
f<X>当前行内向行尾方向查找并定位到字符Xt<X>当前行内向行尾方向查找并定位到字符X之前F<X>当前行内向行首方向查找并定位到字符XT<X>当前行内向行首方向查找并定位到字符X之后;继续向当前方向查找下一个字符,向当前相反方向查找下一个字符
- 匹配查找
- 当光标位于
(和),[和],{和}其中一个符号上时,按下%,光标会跳到与之匹配的另外一个符号上。
- 当光标位于
1.2 插入模式
任一插入命令执行后均会进入插入模式,此时如需退出可以按ESC、Ctrl-[或Ctrl-C
插入
i当前字符前插入a当前字符后插入I行首插入A行尾插入o在下一行插入O在上一行插入
删除并保存到vim剪切板
s删除当前字符,并进入INSERT模式S删除当前行并保存到 Vim 剪贴板,同时进入INSERT模式(等同于cc)x删除当前字符,相当于 insert 模式下的DeleteX删除前一个字符,相当于 insert 模式下的Backspacedd删除当前行,并将删除的内容保存到 Vim 剪贴板d3dor3dd删除后 3 行并保存到 Vim 剪贴板d<X>删除指定内容并保存到 Vim 剪贴板cc删除当前行并保存到 Vim 剪贴板,同时进入INSERT模式c<X>删除指定内容并保存到 Vim 剪贴板,同时进入INSERT模式cw从光标前删除到当前单词的结尾并进入INSERT模式ciw删除当前光标所在的整个单词并进入INSERT模式c$从光标前删除到行尾并进入INSERT模式
<X>部分是对操作内容的描述,如果要删除一个单词,就输入dw或者de,要复制当前位置到行尾的内容,就输入y$,要删除后面 3 个字符并插入,就输入c3l诸如此类
复制
yy复制当前行到 Vim 剪贴板y<X>复制指定内容到 Vim 剪贴板
粘贴
p在当前位置后粘贴P在当前位置前粘贴
合并
J将当前行与下一行合并
替换
-
r<X>将当前字符替换为 X -
gu<X>将指定的文本转换为小写 -
gU<X>将指定的文本转换为大写 -
:s/<search>/<replace>/g查找当前行中所有 search 内容并替换为 replace 内容g代表 global ,全局替换,否则为替换光标后的第一个c代表需要确认是否替换i代表不区分大小写I代表区分大小写
-
:%s/<search>/<replace>/g查找所有行中所有 search 内容并替换为 replace 内容 -
:5,12s/<search>/<replace>/g查找5~12行中所有 search 内容并替换为 replace 内容 -
:.,%s/<search>/<replace>/g查找当前行到最后一行中所有 search 内容并替换为 replace 内容 -
:.,+2s/<search>/<replace>/g查找当前行到后2行中所有 search 内容并替换为 replace 内容 -
:g/^baz/s/<search>/<replace>/g查找所有以baz开头的行中所有 search 内容并替换为 replace 内容
撤销、重做
u撤销Ctrl-r重做
二、技巧
2.1 常用设置
临时生效方法:
:set number显示行号:set showcmd显示完整命令:set relativenumber显示相对行号(这个非常重要,慢慢体会):set hlsearch搜索结果高亮- 如果想清除高亮,只需要搜索一个不存在的结果即可
:set autoindent自动缩进:set smartindent智能缩进:set tabstop=4设置 tab 制表符所占宽度为 4:set softtabstop=4设置按tab时缩进的宽度为 4:set shiftwidth=4设置自动缩进宽度为 4:set expandtab缩进时将 tab 制表符转换为空格:filetype on开启文件类型检测:syntax on开启语法高亮
永久生效方法:
修改文件 /home/<user>/.vimrc(Linux 系统)或 /Users/<user>/.vimrc(Mac OS 系统)为:
1 | set number " 显示行号 |
2.2 重复上一次的命令
- .:重复上次修改(一次修改的单位可以是字符、整行、甚至是整个文件,不包括光标移动)
2.3 缩进
>>向右缩进当前行<<向左缩进当前行3>>:后三行向右缩进>G:增加当前行到文档末尾处所有行的缩进层级<G:减小当前行到文档末尾处所有行的缩进层级- 再可视行模式(正常模式下按
V)下输入>向右缩进当前行<向左缩进当前行
2.4 自动排版
==自动排版当前行gg=G当前文档全文自动排版<N>==对从当前行开始的 N 行进行自动排版=<N>j对当前行以及向下 N 行进行自动排版=<N>k对当前行以及向上 N 行进行自动排版
三、分屏与标签页
3.1 分屏
-
:split缩写:sporCtrl-w s上下分屏(此时是同文件分屏):sp xx上下分屏打开 xx 文件
-
:vsplit缩写:vsorCtrl-w v左右分屏(此时是同文件分屏):vs xx左右分屏打开 xx 文件
-
:diffsplit缩写:diffsdiff 模式打开一个分屏,后面可以加上 {filename} -
:close!orCtrl-w c关闭当前分屏
窗口跳转
Ctrl-w w激活下一个窗口Ctrl-w j激活下方窗口Ctrl-w k激活上方窗口Ctrl-w h激活左侧窗口Ctrl-w l激活右侧窗口
移动分屏
Ctrl-w L移动到最右侧Ctrl-w H移动到最左侧Ctrl-w K移动到顶部Ctrl-w J移动到底部
屏幕缩放
Ctrl-w =平均窗口尺寸Ctrl-w +增加高度Ctrl-w -缩减高度Ctrl-w _最大高度Ctrl-w >增加宽度Ctrl-w <缩减宽度Ctrl-w |最大宽度
3.2 标签页
创建
:tabnewor:tabedit缩写:tabe打开新标签页Ctrl-w gf在新标签页中打开当前光标所在位置的文件名
:tabnew和:tabedit后面都可以跟一个 <空格><文件名> 用以在新标签页中 打开指定文件,还可以在:后面加一个数字,指出新标签页在列表中的位置(从 0 开始)
切换
gtor:tabnext缩写:tabn下一个标签页(最后一个会循环到第一个)gTor:tabprevious缩写:tabp上一个标签页(第一个会循环到最后一个):tabrewind缩写:tabror:tabfirst缩写:tabfir到第一个:tablast缩写:tabl到最后一个标签页
关闭
:tabclose缩写:tabc关闭当前标签页:-tabc关闭上一个标签页:+tabc关闭下一个标签页:tabonly缩写:tabo关闭其他标签页
