Vim 学习笔记 No.2

命令行模式

适用于远距离操作。命令都在:命令行中执行,:省去。

1 指定范围

  • {num} 第 num 行,注意可以有虚拟行 0
  • {start},{end} 从 {start} 到 {end}
    • 其中:.可代表当前行,$可代表文末
    • 'm包含标记 m 的行
    • 也可使用模式,如 /<html>/
    • 地址修正{address}[+-]n形式,如/<html>/+1,/<\/html>/-1。若 n 被省略,默认偏移为 1
  • % 代表全局

2 复制与移动

分别使用tm完成,格式为{from}[tm]{to},若省略{from}部分,则默认对当前行进行操作。

注意 这两个操作不使用寄存器。

3 普通模式操作

normal之后的命令作为普通模式命令执行,可简写为norm

例:% norm I 2333

4 重复上一次的 Ex 命令

@:用于重复上次的 Ex 命令( : 寄存器保存着最后执行的命令行命令)。 运行过一次@:后,可以使用@@来重复它。

ps: .对 Ex 命令无效

5 自动补全 Ex 命令

众所周知,使用 Tab 键可以自动补全命令,且多次按 \<Tab> 键可以遍历列表。若要反向遍历列表,可以用 \<S-Tab>

此外,可以使用 \<C-d>显示可用的补全列表。

进一步地对补全方式和补全列表进行设置,可以使用help wildmode进行查看。个人建议set wildmenu=list:full

6 将当前单词插入命令行

\<C-r>\<C-w> 将光标所在单词插入命令行(\<C-r>\<C-a>可将字串插入命令行)

想想在全局替换中这个命令会有多有用吧!

7 回溯历史命令

使用 \<C-n>\<C-p>,或者 \<Up>\<Down> 按曾输入过的命令进行补全。当然,我会推荐 \<C-n>\<C-p> (不然你用 vim 有何意义)。

这里需要注意, \<C-n>\<C-p> 不会根据已经输入的内容调整补全。可在.vimrc 文件中加入一下自定义映射项:

cnoremap <C-p> <Up>
cnoremap <C-n> <Down>

8 命令行窗口

q:可打开命令行窗口。在命令行窗口中,可使用正常编辑的动作进行编辑,唯一不同的是按下 \<CR> 后,会执行当前行的命令。

正在命令行上构建 Ex 命令时,可按 \<C-f> 切换到命令行窗口,且已经输入的内容会得到保留。

tandf

Tsinghua University, Department of Automation
One thing at a time. One thing done well.