IdeaVim/Vim快捷键

原文链接: https://blog.csdn.net/zbx931197485/article/details/80047391 , https://www.cnblogs.com/codehome/p/10214801.html

                    o
                    |   
            i<--当前光标-->a
I<------------- |  ------------------>A
                   O
    上k 下j 左h 右l

    w(小写) -> 词组正向跳转到下一个单词开始 (以空格和符号作为分隔)
    W(大写) -> 词组正向跳转到下一个单词开始 (以空格作为分隔)
    e(小写) -> 词组正向跳转到下一个单词结尾 (以空格和符号作为分隔)
    E(大写) -> 词组正向跳转到下一个单词结尾 (以空格作为分隔)
    b(小写) -> 词组反向跳转(以空格和符号作为分隔)
    B(大写) -> 词组反向跳转(以空格作为分隔)

    f(小写)+指定字符 -> 正向跳转至指定字符
    F(大写)+指定字符 -> 反向跳转至指定字符

    t(小写)+指定字符 -> 正向跳转指定字符的上一个位置(空格也算)
    T(大写)+指定字符 -> 反向跳转指定字符的下一个位置(空格也算)

    yy -> 复制当前行
    p -> 在光标所在位置向下新开辟一行,粘贴
    yyp -> 当前行复制并粘贴
    10p -> 粘贴10次
    v -> 选中当前光标(再通过上下左右kjhl进行区域选中)
    V(大写) -> 选中当前光标所在行(再通过上下左右kjhl进行区域选中)
    dd -> 删除当前行
    5dd -> 删除当前行在内的以下的5行
    d -> 删除选中的区域  例如vjjd进行区域的删除
    u -> 撤销
    ctrl+r -> 反撤销 idea内暂时不支持
    x(小写) -> 正向按字符单位进行删除 向右删除
    X(大写) -> 反向按字符单位进行删除 向做删除
    df+指定字符 -> 从光标处删除至指定字符
    di" -> 删除引号内的内容
    da" -> 删除包括引号在内的内容
    gg -> 跳转至文件头
    G -> 跳转至文件尾
    行号+G -> 跳转到指定行的开头(:N 到第N行,如 :137 到第137行)
    :wq -> 存盘+退出 (:w 存盘, :q 退出)(:w 后可以跟文件名)
    cw -> 替换从光标所在位置后到一个单词结尾的字符
    0(数字0) -> 到行头
    ^ -> 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
    $ -> 到本行行尾
    g_ -> 到本行最后一个不是blank字符的位置。
    /pattern -> 搜索 pattern的字符串(如果搜索出多个匹配,可按n键到下一个 N键到上一个)
    :e -> 打开一个文件
    .(小数点) -> 可以重复上一次的命令
    * -> 跳转至下一个与当前光标相同字符的位置(可以跨行跳转)
    # -> 跳转至上一个与当前光标相同字符的位置(可以跨行跳转)
    % -> 匹配括号移动,包括 (, {, [. (需要把光标先移到括号上)
    { -> 按段移动,上移 
    } -> 按段移动,下移
    D -> 删除光标后本行所有内容,包含光标所在字符 
    d0 -> 删除光标前本行所有内容,不包含光标所在字符
    dw -> 删除光标开始位置的字,包含光标所在字符
    >> -> 文本行右移 
    << -> 文本行左移
    r -> 替换当前字符 
    R -> 替换当前行光标后的字符
    :%s/abc/123/g  -> 末行模式下,将当前文件中的所有abc替换成123
    :1, 10s/abc/123/g  -> 末行模式下,将第一行至第10行之间的abc替换成123

  • +或Enter: 把光标移至下一行第一个非空白字符。
  • -: 把光标移至上一行第一个非空白字符。

一些按键

  • gd: 跳转到局部变量的定义处;
  • gD: 跳转到全局变量的定义处,从当前文件开头开始搜索;
  • g;: 上一个修改过的地方;
  • g,: 下一个修改过的地方;
  • [[: 跳转到上一个函数块开始,需要有单独一行的{。
  • ]]: 跳转到下一个函数块开始,需要有单独一行的{。
  • []: 跳转到上一个函数块结束,需要有单独一行的}。
  • ][: 跳转到下一个函数块结束,需要有单独一行的}。
  • [{: 跳转到当前块开始处;
  • ]}: 跳转到当前块结束处;
  • [/: 跳转到当前注释块开始处;
  • ]/: 跳转到当前注释块结束处;
  • %: 不仅能移动到匹配的(),{}或[]上,而且能在#if,#else, #endif之间跳跃。

下面的括号匹配对编程很实用的。

  • ci’, di’, yi’:修改、剪切或复制’之间的内容。
  • ca’, da’, ya’:修改、剪切或复制’之间的内容,包含’。
  • ci”, di”, yi”:修改、剪切或复制”之间的内容。
  • ca”, da”, ya”:修改、剪切或复制”之间的内容,包含”。
  • ci(, di(, yi(:修改、剪切或复制()之间的内容。
  • ca(, da(, ya(:修改、剪切或复制()之间的内容,包含()。
  • ci[, di[, yi[:修改、剪切或复制[]之间的内容。
  • ca[, da[, ya[:修改、剪切或复制[]之间的内容,包含[]。
  • ci{, di{, yi{:修改、剪切或复制{}之间的内容。
  • ca{, da{, ya{:修改、剪切或复制{}之间的内容,包含{}。
  • ci<, di<, yi<:修改、剪切或复制<>之间的内容。
  • ca<, da<, ya<:修改、剪切或复制<>之间的内容,包含<>。

5. 插入文本

5.1 基本插入

  • i: 在光标前插入;一个小技巧:按8,再按i,进入插入模式,输入=, 按esc进入命令模式,就会出现8个=。 这在插入分割线时非常有用,如30i+就插入了36个+组成的分割线。
  • I: 在当前行第一个非空字符前插入;
  • gI: 在当前行第一列插入;
  • a: 在光标后插入;
  • A: 在当前行最后插入;
  • o: 在下面新建一行插入;
  • O: 在上面新建一行插入;
  • :r filename在当前位置插入另一个文件的内容。
  • :[n]r filename在第n行插入另一个文件的内容。
  • :r !date 在光标处插入当前日期与时间。同理,:r !command可以将其它shell命令的输出插入当前文档。

5.2 改写插入

  • c[n]w: 改写光标后1(n)个词。
  • c[n]l: 改写光标后n个字母。
  • c[n]h: 改写光标前n个字母。
  • [n]cc: 修改当前[n]行。
  • [n]s: 以输入的文本替代光标之后1(n)个字符,相当于c[n]l。
  • [n]S: 删除指定数目的行,并以所输入文本代替之。

注意,类似cnw,dnw,ynw的形式同样可以写为ncw,ndw,nyw。

s - 删除光标所在字符并进入插入模式 
S - 删除光标所在行并进入插入模式 
c< 范围> - 删除光标所在位置周围某个范围的文本并进入插入模式。关于范围请看第5点,常用的组合有:caw - 删除一个单词包括它后面的空格并开始插入; ciw - 删除一个单词并开始插入; ci" - 删除一个字符串内部文本并开始插入; c$ - 从光标位置删除到行尾并开始插入; ct+字符 - 从光标位置删除本行某个字符之前(保留该字符)并开始插入;cf+字符 - 从光标位置删除本行某个字符之前(不保留该字符)并开始插入。等等。 
C - 删除光标位置到行尾的内容并进入插入模式 (相当于c$) 
r - 修改光标所在字符,然后返回普通模式 
R - 进入覆盖模式 

6. 剪切复制和寄存器

6.1 剪切和复制、粘贴

  • [n]x: 剪切光标右边n个字符,相当于d[n]l。
  • [n]X: 剪切光标左边n个字符,相当于d[n]h。
  • y: 复制在可视模式下选中的文本。
  • yy or Y: 复制整行文本。
  • y[n]w: 复制一(n)个词。
  • y[n]l: 复制光标右边1(n)个字符。
  • y[n]h: 复制光标左边1(n)个字符。
  • yor D: 删除(剪切)当前位置到行尾的内容。
  • d[n]w: 删除(剪切)1(n)个单词
  • d[n]l: 删除(剪切)光标右边1(n)个字符。
  • d[n]h: 删除(剪切)光标左边1(n)个字符。
  • d0: 删除(剪切)当前位置到行首的内容
  • [n] dd: 删除(剪切)1(n)行。
  • :m,nd 剪切m行到n行的内容。
  • d1G或dgg: 剪切光标以上的所有行。
  • dG: 剪切光标以下的所有行。
  • daw和das:剪切一个词和剪切一个句子,即使光标不在词首和句首也没关系。
  • d/f:这是一个比较高级的组合命令,它将删除当前位置 到下一个f之间的内容。
  • p: 在光标之后粘贴。
  • P: 在光标之前粘贴。

6.2 文本对象

  • aw:一个词
  • as:一句。
  • ap:一段。
  • ab:一块(包含在圆括号中的)。

y, d, c, v都可以跟文本对象。

6.3 寄存器

  • a-z:都可以用作寄存器名。”ayy把当前行的内容放入a寄存器。
  • A-Z:用大写字母索引寄存器,可以在寄存器中追加内容。 如”Ayy把当前行的内容追加到a寄存器中。
  • :reg 显示所有寄存器的内容。
  • “”:不加寄存器索引时,默认使用的寄存器。
  • “*:当前选择缓冲区,”*yy把当前行的内容放入当前选择缓冲区。
  • “+:系统剪贴板。”+yy把当前行的内容放入系统剪贴板。

13.8 多行缩进缩出

  • 正常模式下,按两下>;光标所在行会缩进。
  • 如果先按了n,再按两下>;,光标以下的n行会缩进。
  • 对应的,按两下<;,光标所在行会缩出。
  • 如果在编辑代码文件,可以用=进行调整。
  • 在可视模式下,选择要调整的代码块,按=,代码会按书写规则缩排好。
  • 或者n =,调整n行代码的缩排。

1.1 Vim的几种模式

  • 正常模式:可以使用快捷键命令,或按:输入命令行。
  • 插入模式:可以输入文本,在正常模式下,按i、a、o等都可以进入插入模式。
  • 可视模式:正常模式下按v可以进入可视模式, 在可视模式下,移动光标可以选择文本。按V进入可视行模式, 总是整行整行的选中。ctrl+v进入可视块模式。
  • 替换模式:正常模式下,按R进入。

4.2 翻屏

  • ctrl+f: 下翻一屏。
  • ctrl+b: 上翻一屏。
  • ctrl+d: 下翻半屏。
  • ctrl+u: 上翻半屏。
  • ctrl+e: 向下滚动一行。
  • ctrl+y: 向上滚动一行。
  • n%: 到文件n%的位置。
  • zz: 将当前行移动到屏幕中央。
  • zt: 将当前行移动到屏幕顶端。
  • zb: 将当前行移动到屏幕底端。

你可能感兴趣的:(IdeaVim/Vim快捷键)