Vim/ROADMAP.ZH.md
hellorayza 0f5734054d
Update ROADMAP.ZH.md (#7137)
Co-authored-by: Jason Fields <jasonfields4@gmail.com>
2021-10-11 15:26:15 -04:00

58 KiB
Raw Blame History

标识

- 已完成

- 已完成,基于 VSCode 的实现

⚠️ - 不支持此命令的某些特殊用法

🏃 - 开发中

⬇️ - 低优先级;如果希望使用它,请提交相关 issue

- 此命令在当前 VSCode 版本中无法实现

🔢 - 接受数字类型的前缀

翻译名词释义

光标: 普通模式下的光标

向前: 光标相对于当前位置向右或向下移动

向后: 光标相对于当前位置向左或向上移动

开发进度

以下为 vim 的重要功能,开发计划通常按以下顺序依次实现相关功能。

状态 命令
普通模式
插入模式
可视模式
行内可视模式
数字前缀
'.' 操作符
使用 '/' '?' 搜索
撤消/恢复
⚠️ 命令重映射
⚠️ 标记
文本对象
可视块模式
替换模式
多选模式
⚠️
⚠️ Buffer/Window/Tab

以下列表展示了在本插件中可以使用的 Vim 命令

自定义命令

  • gh - 显示鼠标 hover 在当前位置时的提示信息
  • gb - 在下一个匹配当前光标所处单词的地方增加一个光标

左右移动

状态 命令 描述
🔢 h 左移 (或者: CTRL-H, BS, 或左方向键)
🔢 l 右移 (或者: 空格键或右方向键)
0 移动到当前行的第一个字符处 (或者: Home 键)
^ 移动到当前行的第一个非空字符处
🔢 $ 移动到当前行的最后一个字符处 (N-1 lines lower) (或者: End 键)
g0 移动到屏幕上显示行的第一个字符处(当有多行被折叠时,行为与 '0' 不同)
g^ 移动到屏幕上显示行的第一个非空白字符处(当有多行被折叠时,行为与 '^' 不同)
🔢 g$ 移动到屏幕上显示行的最后一个字符处(当有多行被折叠时,行为与 '$' 不同)
gm 移动到屏幕上显示行的中央
🔢 \ 移动到指定列 (默认: 1)
🔢 f{char} 向右移动到第 N 个指定字符处
🔢 F{char} 向左移动到第 N 个指定字符处
🔢 t{char} 向右移动到第 N 个指定字符的前一个字符处
🔢 T{char} 向左移动到第 N 个指定字符的前一个字符处
🔢 ; 重复执行 N 次上一次的 "f", "F", "t", 或 "T" 命令
🔢 , 反向重复执行 N 次上一次的 “f““F““t“或“T“命令

上下移动

状态 命令 描述
🔢 k 上移 (或者: CTRL-P and Up)
🔢 j 下移 (或者: CTRL-J, CTRL-N, NL, and Down)
🔢 - 上移,光标将位于第一个非空白字符上
🔢 + 下移,光标将位于第一个非空白字符上 (或者: CTRL-M and CR)
🔢 _ 下移 N-1 行,光标将位于第一个非空白字符上
🔢 G 移动到第 N 行,光标将位于第一个非空白字符上(默认: 最后一行)
🔢 gg 移动到第 N 行,光标将位于第一个非空白字符上(默认: 第一行)
🔢 % 移动到当前文件的第 N%行,必须指定 N否则将执行%‘命令
🔢 gk 上移 N 行(当有折叠行时与'k命令的行为不同折叠行被视作一行)
🔢 gj 下移 N 行(当有折叠行时与'j命令的行为不同折叠行被视作一行)

针对文本对象的移动方式

状态 命令 描述
🔢 w 向前移动 N 个单词
🔢 W 向前移动 N 个单词,忽略分割符
🔢 e 向前移动 N 个单词,光标位于第 N 个单词的结尾
🔢 E 向前移动 N 个单词,光标位于第 N 个单词的结尾,忽略分割符
🔢 b 向后移动 N 个单词
🔢 B 向后移动 N 个单词,忽略分割符
🔢 ge 向后移动 N 个单词,光标位于第 N 个单词的结尾
🔢 gE 向后移动 N 个单词,光标位于第 N 个单词的结尾,忽略分割符
🔢 ) 向前移动 N 个句子
🔢 ( 向后移动 N 个句子
🔢 } 向前移动 N 个段落
🔢 { 向后移动 N 个段落
🔢 ]] 向前移动 N 个缓冲区,光标位于开始位置
🔢 [[ 向后移动 N 个缓冲区,光标位于开始位置
🔢 ][ 向前移动 N 个缓冲区,光标位于结束位置
🔢 [] 向后移动 N 个缓冲区,光标位于结束位置
🔢 [( 向后移动到第 N 个未闭合的'('处
🔢 [{ 向后移动到第 N 个未闭合的'{'处
⬇️ 🔢 [m 向后移动到第 N 个方法的开始位置(Java)
⬇️ 🔢 [M 向后移动到第 N 个方法的结束位置(Java)
🔢 ]) 向前移动到第 N 个未闭合的')'处
🔢 ]} 向前移动到第 N 个未闭合的'}'处
⬇️ 🔢 ]m 向前移动到第 N 个方法的开始位置(Java)
⬇️ 🔢 ]M 向前移动到第 N 个方法的结束位置(Java)
⬇️ 🔢 [# 向后移动到第 N 个未匹配的 #if、#else
⬇️ 🔢 ]# 向前移动到第 N 个未匹配的 #else、#endif
⬇️ 🔢 [* 向后移动到第 N 个 C 注释的开始位置
⬇️ 🔢 ]* 向前移动到第 N 个 C 注释的开始位置

按模式搜索

状态 命令 描述 备注
🔢 /{pattern}[/[offset]]<CR> 向前搜索{pattern}的第 N 次出现 当前仅支持 JavaScript 的正则引擎,不支持 Vim 的内置正则引擎
🔢 ?{pattern}[?[offset]]<CR> 向后搜索{pattern}的第 N 次出现 当前仅支持 JavaScript 的正则引擎,不支持 Vim 的内置正则引擎
⚠️ 🔢 /<CR> 向前重复最后一次搜索 不支持数量参数
⚠️ 🔢 ?<CR> 向后重复最后一次搜索 不支持数量参数
🔢 n 重复上一次搜索
🔢 N 反方向重复上一次搜索
🔢 * 向前搜索当前光标所处的单词
🔢 # 向后搜索当前光标所处的单词
🔢 g* 类似于 "*", 执行部分匹配
🔢 g# 类似于 "#", 执行部分匹配
gd 跳转到当前光标所处标识的声明处
⬇️ gD 跳转到当前光标所处标识的声明处

标记定位

状态 命令 描述
m{a-zA-Z} 使用{a-zA-Z}标记当前位置
`{a-z} 跳转到当文件中的{a-z}标记处
`{A-Z} 跳转到任意文件中的{A-Z}
`{0-9} 跳转到 Vim 上次退出时的位置
`` 跳转到 Vim 最后一次跳转之前的位置
⬇️ `" 跳转到当前文件中最后一次编辑的位置
`[ 跳转到上一次操作或输入文本的开始位置
'[ 跳转到上一次操作或输入文本的开始位置
`] 跳转到上一次操作或输入文本的结束位置
'] 跳转到上一次操作或输入文本的结束位置
⬇️ `< 跳转到(上一个)可视区开始
⬇️ `> 跳转到(上一个)可视区末尾
`. 跳转到此文件的最后一次修改处
'. 跳转到此文件的最后一次修改处
⬇️ '{a-zA-Z0-9[]'"<>.} 与`命令的意义相同,除了会定位到所在行的第一个非空白字符
⬇️ :marks 打印当前活动的标记
🔢 CTRL-O 跳转到跳转列表的第 N 个旧位置
🔢 CTRL-I 跳转到跳转列表的第 N 个新位置
⬇️ :ju[mps] 打印跳转列表

其它移动方式

状态 命令 描述
% 在当前行中查找下一个大括号,中括号,小括号或者"#if"/ "#else"/"#endif",并且跳转到与之匹配的结束标记处
🔢 H 跳转到距离视口首行第 N 行的第一个非空字符处
M 跳转到视口中央行的第一个非空字符处
🔢 L 跳转到距离视口最后一行第 N 行的第一个非空字符处
⬇️ 🔢 go 跳转到 buffer 中的第 N 个字节
⬇️ :[range]go[to][off] 跳转到 buffer 开始后[off]个字节的位置

tag 的使用方法

以下命令均为低优先级VSCode 对于可跳转标签有很好的支持,你可以通过命令面板来尝试使用它们。

状态 命令 描述
⬇️ :ta[g][!] {tag} 跳转到{tag}处
⬇️ :[count]ta[g][!] 跳转到 tag 列表中的第[count]个 tag 处
⬇️ CTRL-] 跳转到当前光标下的 tag 处,除非修改已经发生
⬇️ :ts[elect][!] [tag] 列出匹配的 tag,选择并跳转
⬇️ :tj[ump][!] [tag] 跳转到[tag]tag 处,如果有多个匹配将列出匹配项供选择
⬇️ :lt[ag][!] [tag] 跳转到[tag]tag 处,将其添加到本地的 tag 列表
⬇️ :tagsa 输出 tag 列表
⬇️ 🔢 CTRL-T 从 tag 列表中的第 N 个旧 tag 跳回来
⬇️ :[count]po[p][!] 从 tag 列表中的第[count]个旧 tag 跳转回来
⬇️ :[count]tn[ext][!] 跳转到接下来的第[count]个匹配的 tag 处
⬇️ :[count]tp[revious][!] 跳转到之前的第[count]个匹配的 tag 处
⬇️ :[count]tr[ewind][!] 跳转到第[count]个匹配的标签处
⬇️ :tl[ast][!] 跳转到最后一个匹配的 tag 处
⬇️ :pt[ag] {tag} 打开预览窗口以显示 tag{tag}
⬇️ CTRL-W } 类似于 CTRL-],但是在预览窗口中显示 tag
⬇️ :pts[elect] 类似于":tselect",但是在预览窗口中显示 tag
⬇️ :ptj[ump] 类似于":tjump",但是在预览窗口中显示 tag
⬇️ :pc[lose] 关闭 tag 预览窗口
⬇️ CTRL-W z 关闭 tag 预览窗口

滚动

状态 命令 描述
🔢 CTRL-E 向下滚动 N 行(默认: 1)
🔢 CTRL-D 向下滚动 N 个 1/2 屏(默认: 1/2 屏)
🔢 CTRL-F 向下滚动 N 屏
🔢 CTRL-Y 向上滚动 N 行(默认: 1)
🔢 CTRL-U 向上滚动 N 个 1/2 屏(默认: 1/2 屏)
🔢 CTRL-B 向上滚动 N 屏
z CR or zt 将当前行移到屏幕顶部
z. or zz 将当前行移到屏幕中央
z- or zb 将当前行移到屏幕底部

以下命令仅在换行关闭时有效:

状态 命令 描述 备注
🔢 zh 向右滚动 N 个字符 在 VSCode 中,当运行此命令时,无论水平滚动条是否移动,光标总会移动
🔢 zl 向右滚动 N 个字符 同上
🔢 zH 向右滚动半个屏幕宽度 同上
🔢 zL 向左滚动半个屏幕宽度 同上

插入文本

状态 命令 描述
🔢 a 在光标后方插入文本
🔢 A 在行尾插入文本
🔢 i 在光标前方插入文本
🔢 I 在本行第一个非空字符前插入文本
🔢 gI 在第一列前插入文本
gi 在最后一次改动处插入文本
🔢 o 在当前行的下方插入新行
🔢 O 在当前行的上方插入新行

以下命令在可视模式下的行为 :

状态 命令 描述
I 在所选行的前方插入相同的文本
A 在所选行的后方插入相同的文本

插入模式

退出插入模式 :

状态 命令 描述
Esc 退出插入模式
CTRL-C 和 Esc 相同,但是不使用缩写
CTRL-O {command} 执行命令并返回插入模式

其它移动命令 :

状态 命令 描述
cursor keys 移动光标 上/右/左/下
shift-left/right 向左(右)移动一个单词
shift-up/down 向前或后移动一屏
End 将光标移动到当前行的最后一个字符后
Home 将光标移动到当前行的第一个字符

插入模式下的特殊命令

状态 命令 描述 备注
⬇️ CTRL-V {char}.. 插入字符或十进制字节值
⚠️ NL or CR or CTRL-M or CTRL-J 开启新行 不支持 CTRL-M 和 CTRL-J
CTRL-E 从光标下方插入字符
CTRL-Y 从光标上方插入字符
CTRL-A 插入之前插入过的文本 使用上一个 "插入" 会话中所做的更改, 并且只应用在光标插入下发生的更改
CTRL-@ 插入之前插入过的文本,然后退出插入模式 同上
CTRL-R {0-9a-z%#:.-="} 插入寄存器中的内容
CTRL-N 在光标前插入标识符的下一个匹配项
CTRL-P 在光标前插入标识符的上一个匹配项
⬇️ CTRL-X ... 补全光标前的单词
BS or CTRL-H 删除光标前的字符
Del 删除光标所在的字符
CTRL-W 删除光标前的单词
CTRL-U 删除当前行中所有输入的字符
CTRL-T 在当前行首插入一个缩进的位移宽度
CTRL-D 在当前行首删除一个缩进的位移宽度
⬇️ 0 CTRL-D 删除当前行的所有缩进
⬇️ ^ CTRL-D 删除当前行中的所有缩进,在下一行中恢复缩进

导向图

状态 命令 描述
:dig[raphs] 显示当前导向图列表
⬇️ :dig[raphs] {char1}{char2} {number} ... 向列表中添加新的导向图

插入特殊内容

状态 命令 描述
⚠️ :r [file] 在光标下面插入[file]的内容
⚠️ :r! {command} 在光标下方插入{command}的标准输出

删除文本

状态 命令 描述
🔢 x 从光标所处的当前字符开始删除 N 个字符
🔢 Del 从光标所处的当前字符开始删除 N 个字符
🔢 X 删除光标前的 N 个字符
🔢 d{motion} 删除{motion}移动时经过的文本
{visual}d 删除高亮文本
🔢 dd 删除 N 行
🔢 D 删除到行尾
🔢 J 连接当前行和下一行(删除空行)
{visual}J 连接所有高亮的行
🔢 gJ 和"J"命令相同, 但是不会在连接处插入空格
{visual}gJ 和"{visual}J"命令相同, 但是不会在连接处插入空格
:[range]d [x] 删除[range]行,并添加到寄存器

文本复制和移动

状态 命令 描述
"{char} 使用寄存器中的{char}进行下一次的删除、复制或粘贴
"* 使用寄存器*访问系统剪贴板
:reg 显示寄存器中的所有内容
:reg {arg} 显示寄存器中{arg}的内容
🔢 y{motion} 把 {motion} 过程覆盖的文本放入寄存器
{visual}y 把高亮文本放入寄存器
🔢 yy 把当前行开始的 N 行放入寄存器(包含当前行)
🔢 Y 把当前行开始的 N 行放入寄存器(包含当前行)
🔢 p 把寄存器中的内容放置到光标后方(执行 N 次)
🔢 P 把寄存器中的内容放置到光标前方(执行 N 次)
🔢 ]p 类似于 p,但是会调整当前行的缩进
🔢 [p 类似于 p,但是会调整当前行的缩进
🔢 gp 类似于 p,但是会在新的文本后留下光标
🔢 gP 类似于 p,但是会在新的文本后留下光标

修改文本

状态 命令 描述 备注
🔢 r{char} 使用{char}替换 N 个字符
⬇️ 🔢 gr{char} 在不影响布局的情况下替换 N 个字符
🔢 R 进入替换模式(重复 N 次输入的文本) 不支持{count}
⬇️ 🔢 gR 进入可视替换模式: 和替换模式类似,但不会影响布局
{visual}r{char} 在可视模式中把所有选中的文本替换成{char}

(以下命令为删除文本同时进入插入模式)

状态 命令 描述
🔢 c{motion} 修改移动命令{motion}经过的文本
{visual}c 修改高亮文本
🔢 cc 修改 N 行(包含当前行)
🔢 S 修改 N 行(包含当前行)
🔢 C 修到行尾的内容(包括 N-1 行)
🔢 s 修改 N 个字符
{visual}c 在可视模式下:将选中的内容修改为输入的文本
{visual}C 在可视模式下:将选中的行修改为输入的文本
{visual}~ 在可视模式下:切换选中内容的大小写状态
{visual}u 在可视模式下:将选中的内容切换为小写
{visual}U 在可视模式下:将选中的内容切换为大写
g~{motion} 切换移动命令{motion}经过文本的大小写状态
gu{motion} 将移动命令{motion}经过的文本切换为小写
gU{motion} 将移动命令{motion}经过的文本切换为大写
{visual}g? 将高亮文本执行 rot13 编码
g?{motion} 将移动命令{motion}经过的文本执行 rot13 编码
🔢 CTRL-A 将光标处或之后的数字增加 N
🔢 CTRL-X 将光标处或之后的数字减去 N
🔢 <{motion} 将移动命令{motion}经过的行向左缩进
🔢 << 将 N 行向左缩进
🔢 >{motion} 将移动命令{motion}经过的行向左缩进
🔢 >> 将 N 行向左缩进
🔢 gq{motion} 将移动命令{motion}经过的行格式化到 'textwidth' 长度
⬇️ :[range]ce[nter][width] 居中对齐[range]范围内的行
⬇️ :[range]le[ft][indent] 左对齐[range]范围内的行 (with [indent])
⬇️ :[ranee]ri[ght][width] 左对齐[range]范围内的行

复杂的修改

状态 命令 描述 备注
⬇️ 🔢 !{motion}{command}<CR> 过滤通过{command}移动的行
⬇️ 🔢 !!{command}<CR> 通过{command}过滤 N 行
⬇️ {visual}!{command}<CR> 通过{command}过滤高亮行
⬇️ :[range]! {command}<CR> 通过{command}过滤[range]行
🔢 ={motion} 过滤通过'equalprg'移动的行
🔢 == 通过 ' 过滤 N 行
{visual}= 通过'equalprg'过滤高亮行
⚠️ :[range]s[ubstitute]/{pattern}/{string}/[g][c] 在[range]行中用{string}替换{pattern};用[g]替换所有出现的{pattern};[c],确认每次更换 当前只支持 JavaScript 的正则;仅实现了'gi'选项
⬇️ :[range]s[ubstitute][g][c] 使用新的范围和选项重复上一个":s"
⬇️ & 在当前行上重得上一个":s",忽略选项
⬇️ :[range]ret[ab][!] [tabstop] 将'tabstop'设置为新值并调整空格

可视模式

状态 命令 描述
v 从当前位置开始高亮字符或者停止高亮
V 从当前行开始高亮或者停止高亮
CTRL-V 高亮块级区域或退出高亮模式
o 高亮文本开始与当前光标位置间切换
gv 重新打开前一次的高亮区域

文本对象 (仅在可视模式下有效)

状态 命令 描述
🔢 aw 选择一个单词
🔢 iw 选择一个内置单词
🔢 aW 选择一个单词
🔢 iW 选择一个内置单词
🔢 as 选择一个缓冲区
🔢 is 选择一个内置缓冲区
🔢 ap 选择一个段落
🔢 ip 选择一个内置缓冲区
🔢 a], a[ 选择一个中括号区域
🔢 i], i[ 选择一个内置中括号区域
🔢 ab, a(, a) 选择从"[(" 到 "])"的区域
🔢 ib, i), i( 选择从"[(" 到 "])"的内置区域
🔢 a>, a< 选择"<>"区域
🔢 i>, i< 选择"<>"的内部区域
🔢 aB, a{, a} 选择从"[{" 到 "})"的区域
🔢 iB, i{, i} 选择从"[{" 到 "})"的内置区域
🔢 at 选择标签从<aaa>到 </aaa>的区域
🔢 it 选择标签从<aaa>到 </aaa>的内部区域
🔢 a' 选择单引号区域
🔢 i' 选择单引号内置区域
🔢 a" 选择双引号区域
🔢 i" 选择双引号内置区域
🔢 a` 选择反引号区域
🔢 i` 选择反引号内置区域

重复性命令

状态 命令 描述 备注
🔢 . 重复最后一次修改(N:重复次数) 未发生在光标下的修改无法重复
q{a-z} 重复寄存器中{a-z}的字符
⬇️ q{A-Z} 记录输入的字符,放入寄存器中,对应的标记为小写的{a-z}
q 停止记录
🔢 @{a-z} 执行 N 次寄存器中{a-z}的内容
🔢 @@ 重复 N 次前一个:@{a-z}
⬇️ :@{a-z} 将寄存器{a-z}的内容作为 Ex 命令执行
⬇️ :@@ 重复一次:@{a-z}
⬇️ :[range]g[lobal]/{pattern}/[cmd] 在{pattern}匹配的[range]行上执行 Ex 命令 cmd
⬇️ :[range]g[lobal]!/{pattern}/[cmd] 在{pattern}不匹配的[range]行上执行 Ex 命令 cmd
⬇️ :so[urce] {file} 从{file}读取 Ex 命令
⬇️ :so[urce]! {file} 从{file}读取 Vim 命令
⬇️ :sl[eep][sec] 在[sec]秒内不执行任何命令
⬇️ 🔢 gs 休眠 N 秒

匹配项

状态 命令 描述 备注
⬇️ :se[t] 显示所有已修改的选项
⬇️ :se[t] all 显示所有的 non-termcap 选项
⬇️ :se[t] termcap 显示所有的 termcap 选项
:se[t] {option} 设置布尔值选项(打开),显示字符串或数字选项
:se[t] no{option} 重置布尔值选项(关闭)
:se[t] inv{option} 反转布尔值选项
:se[t] {option}={value} 将 string/number 选项的值设置成{value}
:se[t] {option}+={value} 将{value}添加到 string 选项, 将{value}添加到 number 选项
:se[t] {option}-={value} 从 string 选项中移除{value}, 从 number 选项中减少{value}的值 不支持 string 选项
:se[t] {option}? 显示{option}的选项
⬇️ :se[t] {option}& 重置{option}的值为默认值
⬇️ :setl[ocal] 类似于":set",但是会给具有本地值的选项设置值
⬇️ :setg[lobal] 类似于":set",但是会给本地选项设置一个全局值
⬇️ :fix[del] 根据't_kb'的值设置't_kD'的值
⬇️ :opt[ions] 打开一个新窗口以查看和设置选项,按功能分组,包含说明和帮助链接

由于列表太长,这里仅列出已经支持的配置选项

状态 命令 默认值 描述
tabstop (ts) 4. 使用 VSCode 而非 Vim 的默认值tabSize 文件中 tab 代替的空格数
hlsearch (hls) false 如果存在先前的搜索模式,请突出显示其所有匹配项
ignorecase (ic) true 在搜索模式中忽略大小写
smartcase (scs) true 如果搜索模式包含大写字符,则覆盖'ignorecase'选项
iskeyword (isk) @,48-57,_,128-167,224-235 关键字包含字母,数字,字符和'_', 如果没有设置 iskeyword,使用 editor.wordSeparators 属性
scroll (scr) 20 使用 CTRL-U 和 CTRL-D 命令时滚动的行数
expandtab (et) True. 使用 VSCode 而非 Vim 的默认值insertSpaces 插入时使用空格
autoindent true 在 noraml 模式下进行 cc 或 S 更换线时保持缩进

撤消/恢复 命令

状态 命令 描述 备注
🔢 u 撤消前 N 次修改 目前的实现可能无法完全涵盖所有情况
🔢 CTRL-R 恢复前 N 次撤消的修改 同上
U 恢复上一次修改过的行

外部命令

状态 命令 描述
:sh[ell] 开始一个 shell
:!{command} 在 shell 中执行{command}
⬇️ K 使用'keyboard prg'程序在光标下查找关键字(默认: "man")

执行范围

状态 命令 描述 备注
, 分隔两个行号
; 同上,在解释第二个行之前将光标设置为第一个行号 光标移动不包括在内
{number} 绝对行号
. 当前行
$ 当前文件的最后一行
% 等价于 1,$ (整个文件)
* 等价于'<,'> (可视区域)
't 标记 t 的位置
⬇️ /{pattern}[/] 下一行中匹配{pattern}的地方
⬇️ ?{pattern}[?] 上一行中匹配{pattern}的地方
+[num] 从前一行号中增加[number]默认值1
-[num] 从前一行号中减去[number]默认值1

编辑文件

状态 命令 描述 备注
:e[dit] {file} 编辑 {file}. 将在当前分组编辑器的新选项卡中打开文件,而不是在当前选项卡中打开

多窗口命令

状态 命令 描述 备注
:e[dit] {file} 编辑 {file}. 将在当前分组编辑器的新选项卡中打开文件,而不是在当前选项卡中打开
<ctrl-w> hl 在窗口间进行切换 由于在 VSCode 中没有 Window 的概念,这些命令被映射成在分组编辑器之间切换
:sp {file} 切分当前窗口
:vsp {file} 将当前窗口在垂直切分
<ctrl-w> s 将当前窗口一分为二
<ctrl-w> v 垂直方向上将当前窗口一分为二
:new 水平方向上创建一个新的窗口,同时开始编辑一个空文件
:vne[w] 垂直方向上创建一个新的窗口,同时开始编辑一个空文件

标签页

状态 命令 描述 备注
:tabn[ext] 🔢 转到下一个标签页或{count}指定的标签页,标签页序号从 1 开始
{count}<C-PageDown>, {count}gt 同上
:tabp[revious] 🔢 转上一个的标签页,在第一个到最后一个标签页间循环
:tabN[ext] 🔢 同上
{count}<C-PageUp>, {count}gT 同上
:tabfir[st] 跳转到和一个标签页
:tabl[ast] 跳转到和一个标签页
:tabe[dit] {file} 在当前标签页之后打开一个新的标签页
⬇️ :[count]tabe[dit], :[count]tabnew 同上 不支持指定数量
:tabnew {file} 在当前标签页之后打开一个新的标签页
⬇️ :[count]tab {cmd} 执行{cmd},当它打开一个新窗口时,打开一个新的标签页
:tabc[lose][!] 🔢 关闭当前标签页或关闭标签页{count} VSCode 将会直接关闭并不会保存文件的修改
:tabo[nly][!] 关闭其它所有的标签页 不支持!, VSCode 将会直接关闭并不会保存文件的修改
:tabm[ove][n] 将当前的 tab 页移动到 tab 页 N 之后
⬇️ :tabs 列出选项卡页面及其包含的窗口 可以使用 VSCode 内置的快捷方式: cmd/ctrl+p
⬇️ :tabd[o] {cmd} 在每一个标签页中执行{cmd}命令

折叠

折叠方法

可通过foldmethod配置折叠方法。由于依赖于 VSCode 的折叠逻辑,尚不可用。

折叠命令

几乎所有和折叠相关的问题可以在这个issue中找到。

状态 命令 描述
⬇️ zf{motion} or {Visual}zf 创建折叠
⬇️ zF 折叠[count]行. 类似于"zf".
⬇️ zd 删除当前光标下的折叠内容
⬇️ zD 递归删除当前光标下所有的折叠内容
⬇️ zE 打开窗口中所有的折叠内容
zo 打开光标下的折叠内容,当指定数量时,将打开多个折叠内容
zO 递归打开当前光标下所有的折叠内容
zc 在光标下关闭一个折叠.当给出计数时,关闭多个折叠
zC 递归关闭当前光标下所有的折叠内容
za 处于关闭的折叠块时,打开折叠块.反之,关闭折叠块
⬇️ zA 处于关闭的折叠块时,递归的打开折叠块.反之,递归的关闭折叠块
⬇️ zv 查看光标所在行:打开刚好足够的折叠,使光标所在行不折叠
⬇️ zx 更新折叠:撤消手动打开和关闭折叠:重新应用'foldlevel'然后执行“zv”查看光标行
⬇️ zX 撤消手动打开和关闭折叠
⬇️ zm 折叠更多:从'foldlevel'中减去一个
zM 关闭所有的折叠: 将'foldlevel'设为 0. 将设置'foldenable'
⬇️ zr 减少折叠:在'foldlevel'中添加一个
zR 打开所有的折叠. 会将'foldlevel'调整到最高级.
⬇️ zn 不折叠: 重置'foldenable'. 所有的折叠都会打开
⬇️ zN 正常折叠:设置'foldenable'.所有折叠都将像以前一样.
⬇️ zi 反转'foldenable'
⬇️ [z 移动到当前打开的折叠块的首部
⬇️ ]z 移动到当前打开的折叠块的尾部
⬇️ zj 向下移动到下一个折叠的开始
⬇️ zk 向上移动到上一个折叠的开始

折叠配置

当前不支持任何折叠设置,请遵循 VSCode 的配置.