Vim 速查手册

作者: rollingstarky | 来源:发表于2018-06-06 20:11 被阅读71次

    一、移动光标

    字符级
    命令 功能
    h 移动一个字符单位
    l 移动一个字符单位
    j 移动一个字符单位
    k 移动一个字符单位
    单词级
    命令 功能
    w/W 移动到下一单词开头
    e/E 移动到单词结尾
    b/B 移动到单词开头

    PS:所谓“单词”,是按照英文的书写和使用习惯来定义的。用在中文上,一般就会以标点符号和空格作为“单词”的界限。所以常常是一句话一句话地跳转。

    块级
    命令 功能
    0 移动到当前行的第一个字符
    ^ 移动到当前行第一个非空白字符
    $ 移动到当前行行尾
    + 移动到下一行的首字母
    - 移动到上一行的首字母
    gg 移动到文档第一行
    G 移动到文档最后一行
    H 移动到当前屏幕的第一行
    M 移动到当前屏幕的中间一行
    L 移动到当前屏幕的最后一行
    :<n> 或 <n>gg 跳转到第 n 行
    :+<n> 或 <n>j 从当前位置向下跳 n 行
    :-<n> 或 <n>k 从当前位置向上跳 n 行
    滚动屏幕
    命令 功能
    Ctrl-d 向下滚动半页
    Ctrl-u 向上滚动半页
    Ctrl-f 向下移滚动一页
    Ctrl-b 向上滚动一页
    z<Enter> 将当前行滚动到屏幕顶部
    z. 将当前行滚动到屏幕中间
    z- 将当前行滚动到屏幕底部

    PS:绝大部分命令前都可以加一个数字 n ,通常表示对其后的命令连续执行 n 次。所以 3j 可以表示向下移动 3 个字符单位(即下移 3 行)。
    3l 表示向右移动 3 个字符单位。相当于连续执行了 l 命令 3 次。
    9z. 则表示光标移动到第 9 行的同时,滚动屏幕并使得第 9 行位于屏幕中间。(这个 9 的含义不同于 3l 命令中的 3

    前面带冒号的命令(如 :+<n>,命令内容会显示在底部)是需要手动输入回车后才执行的。而不带冒号的命令(如 <n>gg)需要在键盘上不间断地按下,之后命令会自动执行。

    光标移动示例

    二、文档操作

    简单编辑命令
    插入
    命令 功能
    i 当前字符前插入
    a 当前字符后插入
    I 行首插入
    A 行尾插入
    o 在下一行插入
    O 在上一行插入

    PS:以上命令会使 vim 进入 insert 模式(即编辑模式),此时输入的任何命令都会作为字符插入到文档中。
    esc 键可退出 insert 模式

    删除(并将删除的内容保存至 vim 剪贴板
    命令 功能
    x 删除当前字符(等于 insert 模式下的 Delete)
    X 删除前一个字符(等于 insert 模式下的 Backspace)
    dd 删除当前行
    d<x> 删除指定内容
    D 删除当前光标位置到行尾的所有内容。等于 d$
    cc 替换整行内容。即将整行内容删除并进入 insert 模式
    c<x> 删除指定内容后,进入 insert 模式。相当于 d<x>a
    C 替换当前光标位置到行尾的所有内容。等于 c$

    <x> 部分用于指定删除的范围。
    j 表示将光标向下移动一个字符单位(即下移一行),则 dj 表示删除当前行和下一行的内容。G 表示将光标移动到文档末尾,则在光标定位在文档首行时,使用 dG 命令可以清空整个文档的内容。

    PS:使用以上命令删除的内容会自动保存到 vim 的剪贴板中,即所谓“删除”实际上是“剪切”,使用 p 命令即可粘贴删除的内容。而且该剪贴板限于 vim 内部,不是系统剪贴板。

    复制与粘贴
    命令 功能
    yy 复制当前内容到 vim 剪贴板
    y<x> 复制指定内容到 vim 剪贴板
    p 在当前位置后粘贴
    P 在当前位置前粘贴
    J 将当前行与下一行内容合并为一行

    y<x> 命令中的 <x> 同样用于指定复制的范围。
    4j 表示将光标下移 4 行,则 y4j 表示将当前行及其后 4 行内容复制到 vim 剪贴板。8gg 表示将光标定位至第 8 行,则 y8gg 表示复制当前行到第 8 行的所有内容。
    当 vim 剪贴板中的内容为整行时,则粘贴命令(p/P)执行时,也会变成在当前行的前(后)一行粘贴。

    查找

    行内查找

    命令 功能
    f<x> 当前行向行尾方向查找并定位到字符 x
    F<x> 当前行向行首方向查找并定位到字符 x
    t<x> 当前行向行尾方向查找并定位到字符 x 之前
    T<x> 当前行向行首方向查找并定位到字符 x 之后
    ; 继续向当前方向查找下一个字符
    , 向当前方向的相反方向查找下一个字符

    文档内查找

    命令 功能
    * 向后查找光标当前所在单词
    # 向前查找光标当前所在单词
    /<pattern> 向后查找指定字符串或模式
    ?<pattern> 向前查找指定字符串或模式
    n 继续查找下一个(依照原方向继续查找)
    N 继续查找上一个(依照原方向进行反向查找)

    PS:vim 中可使用 % 对括号 ()[]{} 进行匹配查找,当光标位于其中一个符合上时,按下 % 会跳转到与之匹配的另外一个符合上。

    替换
    命令 功能
    r<x> 将当前字符替换为字符 x
    s 删除当前字符并进入 insert 模式
    R 进入 replace 模式,逐字对当前字符进行替换操作,可以移动光标定位需要替换的字符。直到按下 ESC 键退出该模式
    ~ 对当前字符进行大小写切换(即大写转小写,小写转大写)
    gu<x> 将指定的文本转换为小写
    gU<x> 将指定的文本转换为大写
    g~<x> 将指定文本进行大小写切换
    :<n1>,<n2>s/<pattern>/<replace> 以某个模式(pattern)检索整个文档,并将第 n1 行到第 n2 行中的匹配项替换为指定内容(replace)
    :%s/<pattern>/<replace> 以某个模式(pattern)检索整个文档并将匹配项替换为指定内容(replace)。等同于 ``:1,$s/<pattern>/<replace>

    PS:%s/<pattern>/<replace> 命令中的 <pattern> 可以是正则表达式,且该命令只替换每行中的第一个匹配项。如需要全局匹配,可以使用 :%s/<pattern>/<replace>/g 命令

    before replace
    :%s/s.t/SET
    :%s/s.t/SET/g
    撤销、重做
    命令 功能
    . 重复执行上一次的命令
    u 撤销
    U 撤销对当前行的所有操作
    Ctrl-r 重做
    打开、关闭文档
    命令 功能
    :e <filename> 打开名为 filename 的文件,如文件不存在则创建
    :Ex 在 vim 中打开目录树,光标选定后回车打开对应文件(- 命令进入上级目录)
    :w 保存当前文件
    :wa 保存全部文件
    :wq 或 ZZ 保存文件并退出 vim
    :q! 或 ZQ 强制退出 vim ,不保存文件
    :r <filename> 读入另一个文档(filename)的数据,并将其内容附加到当前文档光标所在行的后面
    :saveas <new_filename> 文件另存为
    :w <new_name> 另存为一份名为 new_name 的副本并继续编辑原文件
    :<n1>,<n2>w <new_name> 将 n1 行到 n2 行的所有内容保存到名为 new_name 的新文档中
    Buffer

    Buffer(缓冲区)指 vim 中打开的文件所占的内存空间,当未写入磁盘时,所有的修改都发生在内存中。vim 打开过的每个文件都会放到一个 Buffer 中,可以随意切换已打开的 Buffer。

    命令 功能
    :ls 或 :buffers 查看 buffer 列表
    :bn 打开缓冲区中下一个文件
    :bp 打开缓冲区中上一个文件
    :b<n> 打开缓冲区中第 n 个文件
    :bdelete<n> 删除需要关闭的缓冲区文件
    before :bn
    after :bn

    三、其他技巧

    缩进
    • >> 向右缩进当前行
    • << 向左缩进当前行
    • 4>> 向右缩进当前行的同时,缩进当前行下面的 3 行内容
    • >G 向右缩进当前行到文档末尾的所有内容
    自动排版
    • == 自动排版当前行
    • gg=G 自动排版整个文档
    • <n>== 对从当前行开始的 n 行进行自动排版
    • =<n>j 对当前行以及下面的 n 行进行自动排版
    执行 shell 命令

    :!<command> 可以执行相应的 shell 命令,命令执行完成后按 Enter 回到 vim 界面。
    如使用 :1,9!sort 命令可以将当前文件中第 1 行到第 9 行的内容重新排序。
    :r !<command> 可以将相应 shell 命令执行后的输出读取到当前文件中。
    如使用 :r !date 命令可以将当前详细的时间日期插入到 vim 编辑的文件中。

    四、分屏与标签页

    分屏与标签页
    窗口分屏
    1. 分屏方式
    • :split:spCtrl-w s :上下分屏
    • :vsplit:vs 或 `Ctrl-w v`` :左右分屏
    • :diffsplit:diffs :diff 模式打开一个分屏,后面可以加 <filename>
    1. 窗口跳转
    • Ctrl-w w :激活下一个窗口
    • Ctrl-w j :激活下方窗口
    • Ctrl-w k :激活上方窗口
    • Ctrl-w h :激活左侧窗口
    • Ctrl-w l :激活右侧窗口
    1. 屏幕缩放
    • Ctrl-w = :平均窗口尺寸
    • Ctrl-w + :增加当前窗口高度
    • Ctrl-w - :缩减窗口高度
    • Ctrl-w _ :最大窗口高度
    • Ctrl-w > :增加窗口宽度
    • Ctrl-w < :缩减窗口宽度
    • Ctrl-w | :最大窗口宽度
    标签页
    1. 创建标签页
      :tabnew:tabedit:tabe :打开新标签页
      该命令包括上面的分屏命令(:sp:vs 等)后面都可以跟 <filename> 选项,用以在新标签页(或窗口)中打开指定文件
    2. 切换标签页
    • gt:tabnext:tabn :切换到下一个标签页(最后一个会循环到第一个)
    • gT:tabprevious:tabp :切换到上一个标签页
    • :tabrewind:tabr:tabfir :切换到第一个标签页
    • :tablast:tabl :切换到最后一个标签页
    1. 关闭标签页
    • :tabclose:tabc :关闭当前标签页
    • :-tabc :关闭上一个标签页
    • :+tabc :关闭下一个标签页
    • :tabonly:tabo :关闭其他标签页

    附录:vim 模式介绍

    大致上 vim 分为三种模式,分别是命令模式(Command mode),编辑模式(Insert mode)和底线命令模式(Last line mode)。

    1. 命令模式

    vim 启动即进入命令模式。此时敲击键盘动作会被识别为命令,而不是作为字符插入到文档中。如:

    • i 切换到输入模式(在当前字符前插入)
    • : 切换到底线命令模式,此时输入的命令显示在最底下一行, : 符号后面
      命令模式下只有一些最基本的命令,而底线命令模式下拥有更多的命令。
    2. 编辑模式

    在命令模式下键入 i (或 ae 等)即进入编辑模式
    在编辑模式下,可以像在记事本中那样,使用键盘输入或修改文档内容。注意编辑完成时,可使用 ESC 键退出编辑模式,回到命令模式。

    3. 底线命令模式

    在命令模式下按下 : 即进入底线命令模式
    该模式下可以输入单个或多个字符的命令,以完成比命令模式下更复杂的操作(如 :wq 保存文件并退出)
    ESC 键可随时退出底线命令模式。

    参考书籍

    vimtutor
    Learning The Vi And Vim Editors, 7th Edition

    相关文章

      网友评论

        本文标题:Vim 速查手册

        本文链接:https://www.haomeiwen.com/subject/agoajftx.html