一、操作和移动

大部分的vim组合命令 = 操作命令(Operator) + 移动命令(Motion)

  • 操作命令表示对光标范围内的文本做什么操作(参见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 移动到前一个词组的结尾

(四)行内移动

  1. 行内普通移动
  • 0 跳到本行第一个字符
  • ^ 跳到本行第一个非空字符
  • $ 跳到本行最后一个字符
  • g_ 跳到本行最后一个非空字符
  • [Number]| 跳到本行指定列
  1. 行内搜索移动
  • f 在同一行向后搜索第一个匹配
  • F 在同一行向前搜索第一个匹配
  • t 在同一行向后搜索第一个匹配,并停在匹配前
  • T 在同一行向前搜索第一个匹配,并停在匹配前
  • ; 在同一行重复最近一次搜索
  • , 在同一行向相反方向重复最近一次搜索

(五)结构移动

  1. 匹配移动
  • % 查找配对的括号 )]}
  1. 句子和段落移动(文本对象,参见Text object motions
  • ( 跳到前一个句子
  • ) 跳到下一个句子
  • { 跳转到上一个段落
  • } 跳转到下一个段落
  1. 文本对象选区(参见Text object selection

适用于在可视化模式下或在操作符之后使用,无法单独进行光标移动

  • i[对象] 内部文本对象(选中的部分不包含包围文本对象的空白或括号)
  • a[对象] 外部文本对象(选中的部分包含包围文本对象的空白或括号)
对象描述
w一个单词
W一个词组
s一个句子
p一个段落
(或)一对()
{或}一对{}
[或]一对[]
<或>一对<>
tXML标签
"一对""
'一对''
`一对``

(六)全文移动

  1. 行号移动
  • gg 跳转到第一行
  • G 跳转到最后一行
  • [Number] G 跳转到指定行,如 6G 移动到第6行
  • ctrl-g 显示当前光标所在行位置以及文件状态信息
  • :set relativenumber number 展示当前行号和其他行相对当前行的行号
  1. 全文搜索移动
  • / 向后搜索一个匹配
  • ? 向前搜素一个匹配
  • n 重复上一次搜索(和上一次方向相同)
  • N 重复上一次搜索(和上一次方向相反)
  • * 向后查找光标所在的完整单词
  • # 向前查找光标所在的完整单词
  • g* 向后搜索光标所在的单词
  • g# 向前搜索光标所在的单词
  • :set hlsearch 设置搜索高亮
  • :set incsearch 设置增量搜索,输入时不断匹配输入内容

(七)屏幕移动

  1. 视图滚动浏览

调整【文本视图】到特定位置

  • ctrl-e 向下滚一行
  • ctrl-d 向下翻半页(d = down)
  • ctrl-f 向下一翻页(f = forword )
  • ctrl-y 向上滚一行
  • ctlr-u 向上翻半页(u = up)
  • ctrl-b 向上一翻页(b = backward)
  1. 视图重排对齐

调整【文本视图】以对齐【屏幕】特定位置(以当前光标所在行为基准)

  • zz 让光标所在的行居屏幕中央
  • zt 让光标所在的行居屏幕最上一行(t = top)
  • zb 让光标所在的行居屏幕最下一行(b = bottom)
  1. 屏幕光标定位

【文本视图】不动,将光标移动到当前可见【屏幕】的特定相对位置

  • H 跳转到屏幕的顶部
  • M 跳转到屏幕的中间
  • L 跳转到屏幕的底部
  • nH 跳转到距离顶部n行的位置
  • nL 跳转到距离底部n行的位置

LasyVim的bufferline插件映射了H和L(缓冲区切换)

(八)标记与跳转

  1. 标记(参见Marks
  • m[Mark] 用标签标记一个位置
  • '[Mark] 跳转到指定标签的行
  • `[Mark] 精确回到指定标签的位置(行和列)
  • :marks 查看所有标记
  1. 跳转(参见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] 粘贴外部命令输出

参考文档

  1. Learn-Vim_zh_cn
  2. vimtutor
  3. vimhelp