一、操作和移动
大部分的vim组合命令 = 操作命令(Operator) + 移动命令(Motion)。
大多数操作命令和移动命令都可以计数,其格式如下所示:
[Number] [Operator]:重复操作多次。如:2dd,删除当前行,并操作2次(等价于d2j)。[Number] [Motion]:重复移动多次。如:3j,向下移动3行。[Number] [Operator] [Number] [Motion]:重复操作和移动的组合多次。如:2d3j,向下删除3行,并操作2次(等价于d6j,合计删除6行)。
(一)操作
d删除y复制c更改(删除,并进入插入模式)gu转小写gU转大写
(二)字符移动
h向左移动光标j向下移动光标k向上移动光标l向右移动光标
(三)单词移动
w移动光标到下一个单词的开头W移动到下一个词组的开头e移动光标到当前单词的结尾E移动到下一个词组的结尾b移动光标到上一个单词的开头B移动到前一个词组的开头ge移动光标到上一个单词的结尾gE移动到前一个词组的结尾
(四)行内移动
- 行内普通移动
0跳到本行第一个字符^跳到本行第一个非空字符$跳到本行最后一个字符g_跳到本行最后一个非空字符[Number]|跳到本行指定列
- 行内搜索移动
f在同一行向后搜索第一个匹配F在同一行向前搜索第一个匹配t在同一行向后搜索第一个匹配,并停在匹配前T在同一行向前搜索第一个匹配,并停在匹配前;在同一行重复最近一次搜索,在同一行向相反方向重复最近一次搜索
(五)结构移动
- 匹配移动
%查找配对的括号)、]、}
- 句子和段落移动(文本对象,参见Text object motions)
(跳到前一个句子)跳到下一个句子{跳转到上一个段落}跳转到下一个段落
- 文本对象选区(参见Text object selection)
适用于在可视化模式下或在操作符之后使用,无法单独进行光标移动
- i[对象] 内部文本对象(选中的部分不包含包围文本对象的空白或括号)
- a[对象] 外部文本对象(选中的部分包含包围文本对象的空白或括号)
| 对象 | 描述 |
|---|---|
| w | 一个单词 |
| W | 一个词组 |
| s | 一个句子 |
| p | 一个段落 |
| (或) | 一对() |
| {或} | 一对{} |
| [或] | 一对[] |
| <或> | 一对<> |
| t | XML标签 |
| " | 一对"" |
| ' | 一对'' |
| ` | 一对`` |
(六)全文移动
- 行号移动
gg跳转到第一行G跳转到最后一行[Number] G跳转到指定行,如6G移动到第6行ctrl-g显示当前光标所在行位置以及文件状态信息:set relativenumber number展示当前行号和其他行相对当前行的行号
- 全文搜索移动
/向后搜索一个匹配?向前搜素一个匹配n重复上一次搜索(和上一次方向相同)N重复上一次搜索(和上一次方向相反)*向后查找光标所在的完整单词#向前查找光标所在的完整单词g*向后搜索光标所在的单词g#向前搜索光标所在的单词:set hlsearch设置搜索高亮:set incsearch设置增量搜索,输入时不断匹配输入内容
(七)屏幕移动
- 视图滚动浏览
调整【文本视图】到特定位置
ctrl-e向下滚一行ctrl-d向下翻半页(d = down)ctrl-f向下一翻页(f = forword )ctrl-y向上滚一行ctlr-u向上翻半页(u = up)ctrl-b向上一翻页(b = backward)
- 视图重排对齐
调整【文本视图】以对齐【屏幕】特定位置(以当前光标所在行为基准)
zz让光标所在的行居屏幕中央zt让光标所在的行居屏幕最上一行(t = top)zb让光标所在的行居屏幕最下一行(b = bottom)
- 屏幕光标定位
【文本视图】不动,将光标移动到当前可见【屏幕】的特定相对位置
H跳转到屏幕的顶部M跳转到屏幕的中间L跳转到屏幕的底部nH跳转到距离顶部n行的位置nL跳转到距离底部n行的位置
LasyVim的bufferline插件映射了H和L(缓冲区切换)
(八)标记与跳转
- 标记(参见Marks)
m[Mark]用标签标记一个位置'[Mark]跳转到指定标签的行`[Mark]精确回到指定标签的位置(行和列):marks查看所有标记
- 跳转(参见Jumps)
:jumps查看跳转列表ctrl-i跳转到之后的位置ctrl-o跳转到之前的位置
二、其它
(一)进入插入模式
i在光标处,进入插入模式a在光标所在单词之后,进入插入模式A在光标所在行的行末,进入插入模式o在光标下方另起一行,进入插入模式O在光标上方另起一行,进入插入模式
(二)常用编辑指令
p粘贴u撤销ctrl-r恢复撤销x删除光标后的一个字符s删除光标后的一个字符,进入插入模式r替换光标后的一个字符R连续替换光标后的多个字符
LasyVim下的flash插件映射了s(搜索),可以使用cl替换
(三)替换
:%s/old/new将第一个查找到的old替换为new:%s/old/new/g将所有的old替换为new:%s/old/new/gc将所有的old替换为new,替换时需要确认[Number],[Number]s/old/new/g将指定两行的old替换为new
(四)常用工具
:! [COMMAND]执行外部命令:w [FILENAME]另存为文件v :w [FILENAME]在可视模式下,将选中内容另存为文件:r [FILENAME]粘贴文件内容:r ![COMMOND]粘贴外部命令输出
参考文档
- Learn-Vim_zh_cn
vimtutor- vimhelp