Skip to content

vim commands

命令行是 vscode 插件版本的,和 vim 原生命令或许有出入。

光标移动 (Cursor Motions)

左右移动

N 用来(可选)置于命令之前表示该命令执行的计数。

[N]命令描述
Nh左移 N 行(亦:CTRL-H<BACKSPACE><Left>
Nl右移 N 行(亦:<Space><Right>
0至本行首个字符(亦:<Home>键)
^至本行首非空白字符
N$至本行(加上 N-1 个后续行)末个字符(亦:<End>键)
gm至屏幕行中点
N|至第 N 列(缺省:1)
Nf{char}至右边第 N 次出现{char}之处(find)
NF{char}至左边第 N 次出现{char}之处(Find)
Nt{char}至右边第 N 次出现{char}之前(till)
NT{char}至左边第 N 次出现{char}之前(Till)
N;重复前次“f”、“F”、“t”或“T”命令 N 次
N,反向重复前次“f”、“F”、“t”或“T”命令 N 次

上下移动

[N]命令描述
Nk上移 N 行(亦:CTRL-P和<Up>键)
Nj下移 N 行(亦:CTRL-JCTRL-N<ENTER><DOWN>
N-上移 N 行,至首个非空白字符处
N+下移 N 行,至首个非空白字符处(亦:CTRL-M<CR>
N_下移 N-1 行,至首个非空白字符处
NG至第 N 行(缺省:末行)首个非空白字符处
Ngg至第 N 行(缺省:首行)首个非空白字符处
N%至全文件行数百分之 N 处;必须给出 N,否则是%命令
Ngk上移 N 屏幕行(回绕行时不同于“k”)
Ngj下移 N 屏幕行(回绕行时不同于“j”)

文本对象动作

[N]命令描述
Nw向前 N 个单词(word)
NW向前 N 个空白隔开的字串(WORD)
Ne向前至第 N 个单词词尾 (end)
NE向前至第 N 个空白隔开的字串的词尾 (End)
Nb向后 N 个单词
NB向后至第 N 个空白隔开的字串的词尾(backward)
Nge向后至第 N 个单词词尾
NgE向后至第 N 个空白隔开的字串的词尾
N)向前 N 个句子
N(向后 N 个句子
N}向前 N 各段落
N{向后 N 个段落
N]]向前 N 个小节,置于小节的开始
N[[向后 N 个小节,置于小节的开始
N][向前 N 个小节,置于小节的末尾
N[]向后 N 个小节,置于小节的末尾
N[(向后至第 N 个未闭合的'('
N[{向后至第 N 个未闭合的'{'
N])向前至第 N 个未闭合的')'
N]}向前至第 N 个未闭合的'}'

模式查找

可选数字[offset]表示找到匹配项后光标应移的行数。正数向上,负数向下。

[N]命令描述
N/{pattern}[/[offset]]<CR>向前查找第 N 次出现{pattern}的地方
N?{pattern}[?[offset]]<CR>向后查找第 N 次出现{pattern}的地方
Nn重复前次查找
NN相反方向重复前次查找
N*向前查找光标下的标识符
N#向后查找光标下的标识符
Ng*同“*”,但也查找部分匹配
Ng#同“#”,但也查找部分匹配
gd至光标下标识符的局部声明(goto declaration)
gD至光标下标识符的全局声明(goto Declaration)

位置标记和相关动作

[N]命令描述
m{a-zA-Z}用标记{a-zA-Z}记录当前位置
`{a-z}至当前文件中的标记{a-z}处
`{A-Z}至当前文件中的标记{A-Z}处
``至前次跳转之前的位置
`[至前次被操作或放置的文本的开始
`]至前次被操作或放置的文本的末尾
`.至当前文件最后被改动的位置
:marks列出活动的标记
NCTRL-O跳转到跳转表中第 N 个较早的位置
NCTRL-I跳转到跳转表中第 N 个较晚的位置
:ju[mps]列出跳转表

其他动作

[N]命令描述
%找到本行中后一个括号、方括号、注释或"#if"/"#else"/"#endif"并移动至与其匹配的位置
NH至窗口的第 N 行首个非空白字符处(Home)
M至窗口的中间行首个非空白字符处(Middle)
NL至窗口的从下方算第 N 行的首个非空白字符处(Last)

屏幕滚动

[N]命令描述
NCTRL-E窗口下滚 N 行(缺省:1)(Extra)
NCTRL-D窗口下滚 N 行(缺省:半页)(Downwards)
NCTRL-F窗口下滚 N 页
NCTRL-Y窗口上滚 N 行(缺省:1)
NCTRL-U窗口上滚 N 行(缺省:半页)(Upwards)
NCTRL-B窗口上滚 N 页 (Backwards)
z<ENTER> 或 zt将当前行置于窗口顶部 (top)
z. 或 zz将当前行置于窗口正中
z- 或 zb将当前行置于窗口底部(bottom)

以下仅当wrap选项关闭时生效(还不懂wrap是个什么东西):

[N]命令描述
Nzh屏幕右滚 N 个字符
Nzl屏幕左滚 N 个字符
NzH屏幕右滚半个屏宽
NzL屏幕左滚半个屏宽

插入文本

[N]命令描述
Na在光标后添加文本(N 次)(append)
NA在行末添加文本(N 次)(Append)
Ni在光标前添加文本(N 次)(insert)
NI在行首添加文本(N 次)(Insert)
NgI在第一列中插入文本(N 次)
No在当前行下方打开新行,添加文本(N 次
NO在当前行上方打开新行,添加文本(N 次

在可视列块模式下:

[N]命令描述
I在所有选中的行之前插入相同的文本
A在所有选中的行之后添加相同的文本

插入模式键

离开插入模式:

命令描述
<ESC>结束插入模式,回到普通模式
CTRL-C<ESC>,但不使用缩写(Copilot 说 ESC 有能力触发一些自动命令和映射)
CTRL-O执行命令 {command}并回到插入模式

移动:

命令描述
光标键左/右/上/下移动光标
<END>光标直奔行的末字符之后
<HOME>光标至本行的首字符之上

插入模式特殊键:

命令描述
CTRL-E插入光标下方的字符
CTRL-Y插入光标上方的字符
CTRL-A插入前次插入的文本
CTRL-@插入前次插入的文本并结束插入模式
CTRL-R{0-9a-z%#:.-="}插入寄存器中的内容
CTRL-N插入光标前标识符的后一个匹配(屁用没有)
CTRL_P插入光标前标识符的前一个匹配(屁用没有)
<BS>或 CTRL-H删除光标前的一个字符
<Del>删除光标下的一个字符
CTRL-W删除光标前的一个单词(word)
CTRL-U删除当前行中所有的输入字符
CTRL-T在当前行首插入一个 tab 符号
CTRL-D在当前行首插入一个 tab 符号
javascript
function test() {
  console.log('test')
}

可视模式 (Visual Mode)

动作 (Action)

  • i (inner)

  • a (around)

  • t (tag)

  • w (word)

  • s (sentence)

  • p (paragraph)

  • b (block)

  • r (range)

    命令作用示例
    i"选择光标所在""内单词"foo"
    iw选择光标所在单词,不包括周围空格foo
    i(选择光标所在()内单词(foo)
    a"选择光标所在""单词(包括"""foo"
    aw选择光标所在单词,包括周围空格a sample text
    a(选择光标所在()单词(包括()(foo)
js
function test() {
  console.log('test')
  console.log('test')
}