• Vim功能大纲


    Vim的风格
    • vim会记住我们的操作,并使最常用的操作触手可及,所以可以很方便地重复执行它们;

    • 当vim让一个操作或移动可以很方便地重复时,它总是会提供某种方式,让我们在不小心做过头时能回退回来;

      • 对.命令而言,我们永远可以按u 键撤销上次的修改;ctrl+r反撤销。
      • 如果在使用f{char}命令后,不小心按了太多次;键,可以再按,键调回去,这个命令会反方向查找上次f{char}所查找的字符;
    • vim会把我们离开插入模式之前的全部按键操作都记录下来,因此整个cwcopy会被当成一个修改。

    • “.范式”:用一次按键移动,另一次按键执行。

    • 大多数普通模式命令可以在执行时指定次数,可以利用这个功能来做简单的算术运算。

    • 很多普通模式命令都可以带一个次数前缀,这样vim就会尝试把该命令执行指定的次数,而不是只执行一次。

    • 执行、重复、回退;

    • 操作符 + 动作命令(motion) = 操作

      操作符的作用范围由动作命令决定。

      命令用途
      c修改
      d删除
      y复制到寄存器
      g~反转大小写
      gu转换为大写
      >增加缩进
      <减小缩进
      =自动缩进
      !使用外部程序过滤{motion}所跨越的行
    • 当一个操作符命令被连续调用两次时,它会作用于当前行:

      • dd:删除当前行
      • >>:缩进当前行
      • gUgU或gUU
    • 符号%代表当前文件名

    基本操作
    1. 移动
    2. 跳转
    3. 重复
    4. 复制
    5. 删除
    6. 粘贴
    7. 查找
    8. 替换
    9. 分屏
    10. 缓冲区、书签页、
    11. 寄存器
    12. 配置.vimrc
    • 四种模式切换

    • 光标移动:

      上下左右hjkl

      面向单词的动作命令:w(word)、b(back)、e(end跳到下个单词的末尾)、ge(调到前一个单词的末尾)

      单词跳转wWbB(w:单词间跳转;W:子串间跳转,子串是以空格来区分的)

      f {char}:对字符进行查找,使用;结合使用,使用,进行回退。

      句跳转()

      段跳转{}

      [[、]]:跳转到上或下个函数

      跳到当前行开头home和结尾end
      ^跳到当前行非空字符前和结尾$

      调到文档开头gg和结尾G

      数字G:跳到对应数字行号

      数字|:调到对应数字的列好

      翻页:

      翻半页: ,Up 和 Down

      移动光标到屏幕的顶部、中间和底部:用 H(High)、M(Middle)和 L(Low)

      把当前行“滚动”到屏幕的顶部、中部或底部。Vim 里的对应按键是 zt、zz 和 zb

      滚动屏幕而不移动光标。需要的按键是

    • 进入插入模式的方式:iIaAoO

    • 剪切:d组合/c组合、撤销:uU、保存:S、

    • 退出:q(quit)、ZZ/wq:存盘退出、:w(writ):存盘

    • 重复.

    • 删除:x(删除当前光标所在的位置)、X(删除光标前面的字符)

    • 粘贴:p(put)

      • p:粘贴在光标的后面
      • P:粘贴在光标的前面
      • ctrl+insert
    • 文本复制:y(yank)

      1. 复制整行:yy、D
      2. 复制对应方向的内容:y数量和方向
      3. 文本对象选择:y、i、a、w、W、‘’、“”、()、[]、{}
      4. 多层对象操作:在a和i前加上数字
    • 文本修改:d(delete)/c(cut)

      1. 删除一个字符:dl
      2. 删除一个完整的单词:daw
      3. 删除光标到单词结尾:dw
      4. 删除光标到字串结尾:dW
      5. 删除一整个段落:dap
      6. 删除整行dd
      7. 删除到行尾D
      8. 删除对应方向的内容dn方向
      9. 文本对象选择:d/c、i、a、w、‘’、“”、()、[]、{}
      10. 多层对象操作:在a和i前加上数字
    • 多文件打开

    • :e[dit]:能以文件路径打开任何文件

    • 缩进层级:>G

      增加从当前行到文档末尾出的缩进层级

    • ;:重复上次命令

    • s:把两个操作合并为一个,它先删除光标下的字符,然后进入插入模式。

    • 替换:: s/target/replacement

    • 转为大写:gU

      • gUaw:把当前单词转换成大写形式
      • gUap:把整段文字转换为大写
    vim的文本对象:i、a

    一般以i(inside)开头的文本对象会选择分隔符内部的文本,而以a(around、all)开头的文本对象会选择包括分隔符在内的整个文本。

    • 分隔符文本对象

    • 范围文本对象:

      一般来说,d{motion} 命令和aw、as和ap配合起来使用比较好,而c{motion}命令和iw及类似的文本对象一起用效果会更好。

    文本对象选择范围
    iw当前单词
    aw当前单词及一个空格
    iW当前字串
    aW当前字串及一个空格
    is当前句子
    as当前句子及一个空格
    ip当前段落
    ap当前段落及一个空行
    查找项
    • 搜索:/?(向上下查找:-=)

    • *:查找当前光标下的单词

    • 寻找字符:f(find)/t(till)、F/T

      f{char}:让vim查找下一处指定字符出现的位置,如果找到了,就直接把光标移动到那里。

      fa:查找光标后面最靠近光标的a;然后使用;符号可以重复之前的操作。

    命令行模式

    可以使用:h xxx 来查看每个命令的说明文档。

    • :colors Tab:选择相应的主题
    • :help Tab:查看帮助文件
    • :set autowrite,告诉 Vim 在切换文件时自动存盘;
    vim脚本
    • 安装插件管理器

      curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
          https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
      
      • 1
      • 2
    • .vimrc文件配置

      call plug#begin()
      " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align
      Plug 'junegunn/vim-easy-align'
      call plug#end()
      
      • 1
      • 2
      • 3
      • 4
    • 命令操作

      CommandDescription
      PlugInstall [name …] [#threads]Install plugins
      PlugUpdate [name …] [#threads]Install or update plugins
      PlugClean[!]Remove unlisted plugins (bang version will clean without prompt)
      PlugUpgradeUpgrade vim-plug itself
      PlugStatusCheck the status of plugins
      PlugDiffExamine changes from the previous update and the pending changes
      PlugSnapshot[!] [output path]Generate script for restoring the current snapshot of the plugins
    • vim包管理器的安装和使用?

    • 插件的查找、安装和使用?

    • vim的运行支持文件

    视频教学
    键盘录制

    qa

    .vimrc
    • set
      • number:设置行号
      • cursorline:设置横线
      • wrap:内容不超过边框,自动换行
      • showcmd:显示输入的命令
      • wildmenu:按Tab查找补全
      • ignorecase:忽略大小写
      • smartcase:适应大小写
    • noremap:键位的更改
    • map:映射
    • exec:执行命令
      • exec “nohlsearch”:每次打开文件执行命令去掉高亮
    分屏:
    • sp{split}
    • vs
    • 向右分屏:map sr :set splitright:vsplit
    • 向左分屏:map sl :set nosplitright:vsplit
    • 向上分屏:map su :set nosplitbelow:split
    • 向下分屏:map sd :set splitbelow:split
    • 打开其他文件::e(edit) PATH
    • :res +5
    • :res -5
    • :vertical resize-5
    • :vertical resize+5
    标签页
    • map tu :tabe
    • map tn :-tabnext
    • map ti :+tabnext
    将键盘的Esc和CapsLock大写锁定互换
    • /etc/default/keyboard中的XKBOPTIONS设置为caps:swapecape,结果如下:

      # KEYBOARD CONFIGURATION FILE
      
      # Consult the keyboard(5) manual page.
      
      XKBMODEL="pc105"
      XKBLAYOUT="cn"
      XKBVARIANT=""
      XKBOPTIONS="caps:swapescape"
      
      BACKSPACE="guess"
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    • 执行配置:sudo dpkg-reconfigure keyboard-configuration

    • 接下来会出来一个让你选择键盘类型的界面,一般一路确认就可以了,可以看一下信息,比方说我的键盘是pc105,所以我选择105的选项。

    原理
    1. 减少无关的移动

      a命令是在当前光标之后添加内容,A命令则是在当前行的结尾添加内容。不管光标当前处于什么位置,输入A都会进入插入模式,并把光标移到行尾。换句话说,它把$a封装成了一个按键操作。
      vim会把我们离开插入模式之前的全部按键操作都记录下来。

      在每行后面添加;符号:
      $:将光标移动到行尾
      a:在光标之后添加内容
      ;
      A:封装$a
      A;
      k:向下移动一行
      k.:在下一行重复上一次的动作
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    2. 复合命令

      复合命令等效的长命令
      Cc$
      I^i
      A$a
      oA
      Ojo
    3. 使修改可重复(充分发挥.命令的最大威力) - 在一个字符前后各添加一个空格

      var foo = "method+alkdj+ladkl+kdlakdjf+dkal"
      f+:将光标移动到第一个+符号
      s␣+␣:删除光标下的字符,进入插入模式,先输入␣+␣,然后退出插入模式
      ;
      .
      
      • 1
      • 2
      • 3
      • 4
      • 5
    4. 使移动可重复

      f+命令跳到下一个+号所在的位置。
      ;命令会重复查找上次f命令所查找的字符;
      
      • 1
      • 2
    5. 执行、重复、回退

      目的操作重复回退
      做出一个修改{edit}.u
      在行内查找下一指定字符f{char}/t{char};,
      在行内查找上一指定字符F{char}/T{char};,
      在文档中查找下一处匹配项/patternnN
      在文档中查找上一处匹配项?patternnN
      执行替换: s/target/replacement&u
      执行一系列修改,宏qx{changes}q@xu
    6. 把撤销单元切成快

      在vim中,我们自己可以控制撤销命令的粒度。从进入插入模式开始,直到返回普通模式为止,在此期间输入或删除的任何内容都被当成一次修改。因此,只要控制好对键的使用,就可使撤销命令作用于单词、句子或段落。

    7. 用次数做简单的算术运算

      • 大多数普通模式命令可以在执行时指定次数,可以利用这个功能来做简单的算术运算。
      • 很多普通模式命令都可以带一个次数前缀,这样vim就会尝试把该命令执行指定的次数,而不是只执行一次。
    普通模式

    程序员通常只花一小部分时间编写代码,绝大多数时间用来思考、阅读,以及在代码中穿梭浏览,而且当确实需要修改时,谁说一定要切换到插入模式才行?我们可以重新调整已有代码的格式,复制它们,移动其位置,或是删除它们。在普通模式中,我们有众多的工具可以利用。

    • 许多普通模式命令可以在执行时指定的次数,这样它们就可以被执行多次。
    • 普通模式命令的强大,很大程度上源于它可以把操作符与动作命令结合在一起。
    • 命令分别对数字执行加和减操作。在不带次数执行时,它们会逐个加减,但如果带一个次数前缀,那么可以用它们加减任意整数。
    • 如果光标不在数字上,那么命令将在当前行正向查找一个数字,如果找到了,它就径直跳到那里。
    可视模式:v/V
    • v:

    • V:进入可视行模式

    • ctrl + v:可视列模式

      • 可以选择多行中的多列并对其进行操作;
      • 进入可视的列模式后,选择多行中的多列,再shift+i进入插入模式,就可以对多列进行写入了;

    插入模式
    • 在所有模式中删除的组合键

      按键操作用途
      删除前一个字符(同退格键)
      删除前一个单词
      删至行首
    • 切换回普通模式

      按键操作用途
      切换到普通模式
      切换到普通模式
      切换到插入-普通模式
    • 插入-普通模式

      能让我们执行一次普通模式命令。在执行一个普通模式命令,执行后,马上又返回到插入模式。

    • 表达式寄存器

      =访问寄存器:该命令会在屏幕下方显示一个提示符,可以在其后输入要执行的表达式,输入表达式后敲一下,vim就会把执行的结果插入文档的当前位置了。
      
      • 1
    可视模式

    可视模式允许选中一块文本区域并在其上进行操作

    vim有三种不同的可视模式,分别用于操作字符文本、行文本和块文本。

    一般情况下,当使用可视模式时,选区的一端固定在一个特定字符上,另一端可以自由移动;当使用l、w及f{char}这类动作命令时,会移动高亮区域的活动端,使选区变大或缩小。

    • 在普通模式下激活可视模式:

      命令用途
      v激活面向字符的可视模式
      V激活面向行的可视模式
      激活面向块的可视模式
      gv重选上次的高亮选区
    • vi}:vim进入可视模式,并选中花括号{}括起来的所有字符。

    命令行模式
    • 在指定范围上执行普通模式命令:normal

      对几十行后都添加一个分号:
      A;
      jVG
      :'<,>'normal .:对高亮选区中的每一行,对其执行普通模式下的.命令。
      
      • 1
      • 2
      • 3
      • 4
    • :%normal A; :符号%代表整个文件范围,因此:%normal A; 告诉vim在文件每行的结尾都添加一个分号。

    • :%normal i# :可以把整个python文件注释掉

    • 键自动补全命令

    • 运行shell命令::!可以调用外部程序,适用于执行一次性命令

    • :shell 命令用来启动一个交互的shell会话,exit退出会话返回vim

      命令用途
      :shell启动一个shell(输入exit返回vim)
      :!{cmd}在shell中执行{cmd}
      :read !{cmd}在shell中执行{cmd},并把其标准输出插入光标下方
      :[range]wirte !{cmd}在shell中执行{cmd},以[range]作为其标准输入
      :[range]!{filter}使用外部程序{filter}过滤指定的[range]
    多文件
    • :ls:列出所有被载入内存中的缓冲区的列表,

      • 用:bn[ext]命令可以切换到列表中的下一个缓冲区。

        :bnext!:叹号会强制vim切换缓冲区,即使当前缓冲区中有未保存的修改,也会继续切换。:ls命令中查看,被标记为a,表示为活动缓冲区(active);被标记为h,表示为隐藏缓冲区(hidden)。

      • 在退出时处理隐藏缓冲区:

        • :write(:w):命令把缓冲区保存到文件;
        • :edit!(:e!):摒弃修改,重新从磁盘读取此文件。
        • :wall(:wa!):保存所有改动的缓冲区而无需逐个检查
        • :qall!(:qa!):退出vim而不想检查未保存的修改
      • :bprev命令可以切换到列表中的上一个缓冲区。

      • :buffer N命令直接凭编号跳转到一个缓冲区;

      • :buffer {bufname}:{bufname}只需包含文件路径中足以唯一标识此缓冲区的字符即可,如果输入的字符串匹配不止一个缓冲区列表中的条目,就可以用Tab补全的方式在这些条目中选择。

      %符号知名哪个缓冲区在当前窗口中可见;

      # 符号则代表轮换文件;

      可以在当前文件和轮换文件间快速切换;

    • :args:把缓冲区列表中的文件分组

    • argdo:在列表中的每个文件上执行Ex命令

    • 删除缓冲区

      • bdelete N1 N2 N3(bd 5 6 7 9 10):删除对应的文件
      • N,M bdelete(5,10bd):删除一个区间的文件
    • 用参数列表将缓冲区分组

      :args:参数列表记录了在启动时作为参数传递给vim的文件列表。

      :args filename1 filename:可以在列表列里增加文件

      • 通配符(:args **/*.js **/*.css)

        • *符号用于匹配0个或多个字符,但它的范围仅局限于指定的目录,而不会递归其子目录;
        • **通配符也匹配0个或多个字符,但它可以递归进入指定目录的子目录。
      • 用反引号结构指定文件

        :args `cat .chapters`:vim 会在shell中执行反撇号括起来的命令,然后把cat命令的输出作为:args命令的参数。

    • 多窗口

      Ex 命令普通模式命令用途
      :clo[se]c关闭活动窗口
      :on[ly]o只保留活动窗口,关闭其他所有窗口
    • 用标签页将窗口分组

      标签页是可以容纳一系列窗口的容器。

      • 用:tabedit {filename}命令打开一个新的标签页,如果省略了{filename}参数会创建一个新标签页,里面包含一个空缓冲区;
      • :close:命令关闭此窗口以及包含此狂口的标签页;
      • :tabc[lose]:命令来关闭当前标签页;
      • :tabo[nly]:命令可以关闭除当前标签页外的所有其他标签页
      • :tu:创建一个新的标签页;
      • :ti:向右切换标签页;
      • :tn:向左切换标签页;
    • :find:

      命令允许通过文件名打开一个文件,但无需输入该文件的完整路径。要想利用此功能,首先要配置“path”选项。

      :set path+=xx/**

      配置号路径之后,只需给出文件名就可以打开指定目录中的文件了;也可以用键自动补全文件名。

    动作(motion)命令:h motion.txt
    • 基于单词移动

      命令光标动作
      w正向移动到下一单词的开头
      b反向移动到当前单词/上一单词的开头
      e正向移动到当前单词/下一单词的结尾
      ge反向移动到上一单词的结尾
    • 查找字符f {char}

      • 可以把f,dt.训练成手指的下意识动作
      命令用途
      f{char}正向移动到下一个{char}所在之处
      F{char}反向移动到上一个{char}所在之处
      t{char}正向移动到下一个{char}所在之处的前一个字符上
      T{char}反向移动到上一个{char}所在之处的前一个字符上
      ;重复上次的字符查找命令
      ,反转方向查找上次的字符查找命令
    • 用查找动作操作文本

      1.用选择模式:

      v:进入可视模式

      /ge:选择光标到指定内容前

      h:往回移一个字符

      d:删除内容

      2.普通模式

      d/ge

    在文件间跳转(:jump)

    任何改变当前窗口中活动文件的命令,都可以被称为跳转命令。

    vim会把执行跳转命令之前和之后的光标位置,记录到跳转列表中。

    可以说大范围的动作命令可能会被当成跳转,但小范围的动作命令只能算移动。

    • :jump:查看跳转列表的内容

    • 命令进行跳转

    • 跳转动作:

      命令用途
      [count]G跳转到指定的行号
      /pattern/?pattern/n/N跳转到下一个/上一个模式出现之处
      %跳转到匹配的括号所在之处
      (/)跳转到上一句/下一句的开头
      {/}跳转到上一段/下一段的开头
      H/M/L跳到屏幕最上方/正中间/最下方
      gf跳转到光标下的文件名
      跳转到光标下关键字的定义之处
      '{mark}/`{mark}跳转到一个位置标记
    • :change :改变列表change list

      vim为每次修改都记录了行号与列号,可以用g;和g,命令反向或正向遍历改变列表。

      ;和,分别用来正向及反向重复f{char}命令。

    • `.标记总是指向上次修改的位置;

    • `^标记则会记录上次退出插入模式时光标所在的位置;如果先退出插入模式,接着又在文档中四处移动,然后又想快速回到退出的地方继续编辑时,用gi命令就行了。

    • 跳转到光标下的文件gf(go to file)

      • :set suffixesadd+=.rb
      • :set path?
    寄存器("a-"Z)

    是一组用于保存文本的简单容器;

    它们既可像剪贴板那样,剪切、复制和粘贴文本,也可以记录一系列按键操作,把它们录制成宏。

    vim的删除、复制与粘贴命令都会用到众多寄存器中的某一个。可以通过给命令加"{register}"前缀的方式指定要用的寄存器。若不指明,vim将缺省使用无名寄存器。

    vim提供了一组以26个英文字母命令的有名寄存器。

    • 使用无名寄存器:

      • xp:可被用于调换光标之后的两个字符;
      • ddp:调换文本行;
      • yyp:创建文本行的副本;
    • 专用寄存器("0)

      "0p

      复制专用寄存器,仅当使用y{motion}命令时才会被赋值。

    • 有名寄存器("a-"Z)

      用小写字母引用有名寄存器,会覆盖该寄存器的原有内容,而换用大写字母的话,会将新内容添加到该寄存器的原有内容之后。

      • "ayy:将当前行复制到寄存器a中,"ap:粘贴寄存器a中的内容
    • 黑洞寄存器

      黑洞寄存器是个有去无回的地方,可用下划线引用它。

      如果运行"_d{motion}命令,vim将删除该文本且不保存任何副本。

      用于只想删除文本却不想覆盖无名寄存器中的内容时。

    • 系统剪贴板("+)

      如果在外部程序中用剪切或复制命令获取了文本,就可以通过"+p命令(或在插入模式下用、+)将其粘贴到vim内部。相反地,如果在vim的复制或删除命令之前加入"+,相应的文本就被捕获至系统剪贴板。

    • 在可视模式下使用寄存器

      在可视模式下使用p命令时,vim 将用指定的寄存器内容来替换高亮选区中的文本。

    宏(qa @a)

    可以用宏把任意数目的按键操作录制到寄存器,用于之后的回放。

    在一组目标上执行宏有两种方式:以串行方式回放或者以并行方式多次运行。

    在录制宏时,要确保每条命令都可被重复执行。

    在录制宏的过程中,禁止使用鼠标。

    • qa:录制宏并将其内容保存至寄存器a中,直到再次按下q键停下为止

    • :reg a:查看寄存器a中的内容

    • 用@{register}命令执行指定寄存器的内容,也可以用@@来重复最近调用过的宏

    • 以并行方式执行宏:以可视模式选取文本,然后执行命令:‘<,’>normal @

    • 给宏追加命令

      在输入qa时,vim将开始录制接下来的按键操作,并将它们保存到寄存器a中,这会覆盖该寄存器原有的内容。如果输入的是qA,vim也会录制按键操作,但会把他们附加到寄存器a原有的内容之后。

    • 编辑宏的内容:

      按G键,跳转到当前文档的结尾,使用:put命令粘贴宏的内容

      编辑完之后,再依次:

      0

      "ay$:复制命令到寄存器a中

      dd

      或者运行"add,该缺点是多了一个拖尾字符^J,即换行符。

    模式
    • 调整查找模式的大小写敏感性

      • :set ignorecase
      • 每次查找时设置大小写敏感性:\c会让查找模式忽略大小写;\C会强制区分大小写
      • :set smartcase
    • 正则匹配

      • \v:使用\v模式开关后,(、)、|以及{字符会表现出特殊含义;
      • \V:会使得其后的模式中只有反斜杠有特殊的意义。
      模式说明
      #\([0-9a-fA-F]\{6}|[0-9a-fA-F]\{3}\)使用magic搜索模式时,必须转义(、)、|以及{字符,赋予它们特殊的含义
      `\v#([0-9a-fA-F]{6}[0-9a-fA-F]{3})`
      `\v#(x{6}\x{3})`
    • 界定单词的边界

      • /v
      • \w:匹配但此类字符,包括字母、数字以及符号“_”
      • \W:用来匹配除单词类字符以外的其他字符
    查找
    • 如果只想在当前光标位置至文档结尾的范围内查找,而不想绕回文档继续查找的话,可以关闭"wrapscan"

    • /键为正向扫描,?键会进行反向查找

    • 在普通模式下使用gn时,光标会跳到下一处匹配,进入可视模式并选中匹配的文本。如果光标已经位于匹配上,gn就会选中当前的匹配;

    • gN进入面向字符的可视模式,并选中上一处匹配。

    • 高亮功能:(:set hls、:set noh

    • 将光标偏移到查找匹配的结尾

      /lang/e
      auage
      n
      .
      n.
      
      • 1
      • 2
      • 3
      • 4
      • 5
    替换

    在缺省情况下,substitute命令仅仅作用于当前行,而且只会修改第一处匹配。因此,为了在整个文件的范
    围内修改每一处匹配,必须指定范围,并使用标志位g。
    : s/going/rolling/g:将当前行上的所有going都替换成rolling

    :%s/going/rolling/g:将整个文本中所有的going都替换成rolling
    :%s/content/copy/gc:引入标志位c后,vim会对每处匹配结果都提示“替换为copy?”,可以按y键完成这次修改,或者按n键跳过这一次修改。

    • substitute命令允许先查找一段文本,再用另一段文本将其替换掉:

      :[range]s[ubstitute]/{pattern}/{string}/[flags]
      
      • 1
    • 手动控制每一次替换操作

      :%s/content/copy/gc
      引入标志位c后,vim会对每处匹配结果都提示“替换为copy?”,可以按y键完成这次修改,或者按n键跳过这一次修改。
      
      • 1
      • 2
      答案用途
      y替换此处匹配
      n忽略此处匹配
      q退出替换过程
      l“last” - 替换此处匹配后退出
      a“all” - 替换此处与之后所有的匹配
      向上滚动屏幕
      向下滚动屏幕
    global命令

    :global 命令允许在某个指定模式的所有匹配行上运行Ex命令。

    在缺省情况下,:global 命令的作用范围是整个文件(%)

    :global 命令在指定 [range] 内的文本行上执行时通常分为两轮。第一轮,vim在所有[pattern]的匹配上做上标记。第二轮,再在所有已标记的文本行上执行 [cmd]。

    查看帮助:
    :h :g
    : [range] global[!] /{pattern}/ [cmd]
    
    [pattern]域与查找历史相互关联。这意味着如果将该域留空的话,vim会自动使用当前的查找模式。
    [cmd]可以是除 :global命令之外的任何Ex命令。如果不指定任何[cmd],vim将缺省使用 :print
    可以用 :global! 或者 :vglobal (v表示invert) 反向[0] :global 命令的行为[0]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    解决交叉编译的依赖问题
    java添加图片到Excel单元格中(POI)
    轻松6步完成App开发
    【机器学习基础】 线性回归
    LDGRB-01 用于在边缘处理人工智能的嵌入式硬件
    如何备份 Docker 卷
    给新入坑的小伙伴们的郑氏Java上路指南
    Docker 学习
    Nginx基本知识
    杭州ALIENWARE外星人电脑(大悦城旗舰店),玩起来就是不一样
  • 原文地址:https://blog.csdn.net/Uranus_user/article/details/128137415