0%

vim学习笔记

前言

  • vim语法高亮
1
vim ~/.vimrc
2
3
// 然后在文件中添加如下代码
4
syntax on
5
colorscheme darkblue

1. 插入文本

    1. Normal模式与Insert模式
      • Normal模式:键入的每个自负都被视为一个命令
      • Insert模式:键入的自负作为实际要输入的文本内容,使用i命令(insert)
    1. 现在是什么模式?
      • 打开显示模式::set showmode
      • 关闭显示模式::set noshowmode
    1. 模式之灾
      • 使用Vim经常忘记自己身在何种模式,或者不经意敲了那个字符就切换到别的模式去了,按再次Esc,如果Vim以一声蜂鸣来回答你,那说明你已经是在Normal模式了。
    1. 移动光标
      • 移动光标命令
        1
               K  上
        2
        h  左         l  右
        3
               j  下
      • 也可以用箭头键来移动光标,会大大的降低效率,想象一下要是一下你在一小时内这样的做一百次会占用你多少时间?在编辑器中移动光标是十分常用的操作,这些字符在键盘上都分布在你右手周围,精心挑选的。
    1. 删除字符
        1. 删除一个字符命令:x
          • 这是在追忆古老的打字机的时代,在打字机上删除字符就是用xxxx来覆盖它的。
        1. 删除一行命令:dd
          • 删除后下边的行会移上来填补空缺。
        1. 删除换行符命令:J
          • 把两行合并为一行,也就是说两行之间的换行符被删除了。
    1. 撤销和重做
        1. 撤销命令:u(undo)
          • 如果误删除了过多的内容,命令u更简便,它可以撤销上一次的操作。
          • 撤销命令还有另一种形式,U命令,它一次撤销对一行的全部操作,即打开文件时的状态。
        1. 重做命令:ctrl + r(repeat)
          • 如果你撤销了多次,可以用ctrl + r来反转撤销的动作,换句话说它是对撤销的撤销。
        1. 其他编辑命令
            1. 追加
            • 在光标之后插入文本命令:a(append)
            • 另起一行命令:o/O
              • o命令可以在当前行的下边另起一行,并使当前模式反转为Insert模式,而大写的O,是在当前行的上边另起一行。
            1. 使用命令计数
            • 指定的数字要紧挨在它所有修饰的命令前边。
            • 假设你要向上移动9行,这可以用kkkkkkkkk或者9K来完成。
            • 行尾追加三个感叹号,可以用a!!!,另一个办法是3a! <Esc>命令。
            • 删除3个字符可以用3x
            1. 退出
            • 放弃编辑命令:q!
              • 有时你会在做了一连串的修改之后突然意识到最好是放弃所有的修改重新来过,这个命令由3个部分组成:冒号,,用以进入冒号命令行模式:q命令,告诉编辑器退出;最后是强制命令行的修饰符(!)
            • 放弃所有修改后还想以该文件的初始内容作为开始继续编辑:e!(edit)
            • 保存并退出命令:ZZ或者:wq (write quit)

2. 帮助文档

你想做的任何操作都可以在vim的帮助文文件中找到答案,所以不用怕问问题。

    1. 打开帮助命令::help 或者 F1
    1. 打开用户手册的目录::help usr_toc.txt
    1. 常用的帮助命令的使用
        1. 查看关于某个特殊主题的帮助::help {subject}
            1. :help x 关于x命令的帮助
            1. :help deleting 关于如何删除的内容
            1. :helo index 所有vim命令的索引
        1. 关于某个控制字符的帮助: CTRL-{subject}
            1. :help CTRL-A
        1. 查找其他模式下的帮助
            1. :help i_CTRL-H insert模式
            1. :help v_CTRL-B Visusl模式
            1. :help c_CTRL-B Command模式
        1. 关于命令行选项:-{subject}
            1. :help -R vim -R file.txt 以只读模式打开文件
        1. 关于命令行选项的说明:showmode
          • :help 'showmode'
        1. 特殊键用尖括号中的简单的描述性名字表示
            1. :help i_<Up>
        1. 错误ID号的作为帮助的主题
            1. :help {错误ID}
        1. 关于函数subject的帮助
            1. :help add() 在vimscript中使用
        1. 关于编译时特性+subject的帮助
            1. :help +visual
        1. 查找一个以pattern开始的帮助标记,重复按Tab查看其他匹配的帮助标记
            1. :help pattern<Tab>
        1. 同时列出匹配pattern的所有可能的帮助主题
            1. :help pattern<Ctrl-d>
        1. 在所有帮助文档中搜索全部文本查找指定的pattern
            1. :helpgrep pattern
            1. :copen 打开快速列表 直接回车键进入编辑
            1. :cclose 关闭快速列表
            1. :cn 下一匹配
            1. :cprev 或者 :cN 前一个匹配
            1. :cfirst 第一个匹配
            1. :clast 最后一个匹配

3. 移动

要想把vim玩得好,移动是必备的技能点。

    1. 以word为单位的移动
      • w命令(word):光标向前移动一个word,光标会移动到下一个word的首字符上,同时可以加计数前缀,如3w,将光标向前移动3个word。
      • b命令(backward):光标向后移动到前一个word的首字符上,同时可以加计数前缀,如3b,将光标向后移动3个word。
      • e命令(end of word):光标向前移动到下一个word的最后一个字符上。
      • ge命令:光标向后移动到前一个word的最后一个字符上。
        • 以上命令如果遇到连字符/ - _ . 、(等等,按下大写的命令即可。
        • 混合使用这几种不同的大小写命令,可以让你更快的在文本前后移动。
    1. 移动到行首或行尾
      • $命令:光标移动到当前行行尾,与End键作用相同,可以接受计数命令,如2$表示下一行的行尾。
      • ^命令:光标移动到当前行第一个非空的字符上。
      • 0命令:光标移动到当前行第一个字符上,与Home键作用相同。
    1. 移动到指定的字符上
      • f命令(find):向后单字符搜索命令,如fx在当前行查找下一个字符x,同时也可以使用计数命令,如3fx
      • F命令:向左单字符搜索命令。
      • t命令(to):向右单字符搜索命令,只不过不是把光标停留在被搜索字符上,而是它之前的一个字符上。
      • T命令:向左单字符搜索命令。
        • 可以同时与;键来重复使用这些命令。
    1. 以匹配一个括号为目的移动
      • %命令:光标跳转到与当前光标相匹配的括号上,括号:() [] {}
        • 如果当前光标没有停留在一个可用的括号字符上,会向前找到第一个括号,与之匹配。
    1. 移动到指定行
      • G命令(go):光标定位到计数指定的行,如果没有指定计数,光标会定位到最后一行。
      • gg命令:定位到第一行与1G的效果相同。
      • %命令:光标定位到计数指定的行上,如50%90%等。
    1. 告诉你当前的位置
      • Ctrl-g命令:显示信息行,如行号,总行数,以及当前行在文件中的百分比。
      • set number命令:显示行号。
      • set nonumber命令:关闭显示行号。
      • set ruler命令:显示当前光标的位置。
      • set noruler命令:关闭显示当前光标的位置。
    1. 滚屏
      • Ctrl-u命令(up):文本向下滚动半屏,窗口向上滚动半屏。
      • Ctrl-d命令(down):文本向上滚动半屏,窗口向下滚动半屏。
      • Ctrl-e命令(extra):文本向上滚动一行,窗口向下滚动一行。
      • Ctrl-y命令:文本向下滚动一行,窗口向上滚动一行。
      • Ctrl-f命令(forward):文本向下滚动一屏,窗口向上滚动一屏。
      • Ctrl-b命令(backward):文本向上滚动一屏,窗口向下滚动一屏。
      • zz命令:当前行置于正中央。
      • zt命令(top):当前行置于屏幕顶端。
      • zb命令(bottom):当前行置于屏幕底端。
    1. 简单搜索
        1. 常用命令
          • /{string}命令:向下搜索一个字符串。
          • ?{string}命令:向上搜索一个字符串。
            • n命令:下一次搜索,可以加计数命令。
            • N命令:上一次搜索,可以加计数命令。
              • . * ^ ~ $有特殊的意义,需要一个反斜杠\
        1. 大小写问题
          • :set ignorecase:开启搜索忽略大小写。
          • :set noignorecase:关闭搜索忽略大小写。
        1. 命令历史记录
          • 按下/来搜索,先别按回车键,上箭头键会显示你上一次进行搜索的命令。
        1. 在文本中查找下一个word
          • *命令:向下搜索下一个当前光标所在的单词。
          • #命令:向上搜索下一个当前光标所在的单词。
            • 默认以\<{word}\>,完整的单词搜索。
        1. 查找整个word
          • \>:单词结束符。
          • \<:单词开始符。
          • \<{word}\>:完整的单词搜索。
        1. 高亮显示搜索结果
          • :set hlsearch命令(highlight search): 开启高亮显示搜索结果。
          • :set nohlsearch命令: 关闭高亮显示搜索结果。
          • nohlsearch:去掉当前的高亮显示
        1. 调整搜索
          • :set incsearch:开启使用键入莫表字符串同时就开始搜索。
          • :set noincsearch:关闭使用键入莫表字符串同时就开始搜索。
          • set warpscan:开启到达文件的尾部会向另一个方向进行搜索。
          • set nowarpscan:关闭到达文件的尾部会向另一个方向进行搜索。

4. 简单的搜索模式

vim使用正则表达式进行搜索的功能十分的强大。

    1. 一行的开头与结尾
      • ^字符:匹配一行的开头。
      • $字符:匹配一行的结尾。
    1. 匹配任何一个字符
      • .字符:匹配任何一个字符。
        • 备注:如果是特殊字符,需要反斜杠。

5. 使用标记

    1. 常用命令
      • ``命令:当使用G命令进行跳转时,回到原来的跳转位置。
        • 跳转:包括G / 与n等搜索命令,但不包括fx或者tx,以及word为单位的移动命令,或者光标的移动均不包括。
      • Ctrl-o命令(old):跳转到前一个光标停留的位置。
      • Ctrl-i命令:跳转到下一个光标停留的为位置,与Tab键作用功能相同。
      • jumps命令:显示你曾经跳转过的位置。
    1. 具体的命令的标记命令
      • m命令(mark):定义一个标记,如ms,名为s(start)的标记。
      • ,命令:跳转到某个名字的标记。如s
      • :mark:查看所有的标记。
      • 特殊的标记
        • `:进行此次跳转之前的跳点。
        • ''到上次跳转的位置。
        • [最后一次修改的起始位置。

6. 小幅改动

    1. 操作符命令和位移
      • dw命令(delete word):删除一个word,w可以看作一个word,也可以看作右移了一个word。
      • d4w命令:删除4个word,4w看作一次右移4个word。
      • d2e命令:删除2个word,光标移动到第二个word的尾部。
      • d$命令:删除光标到行尾。
    1. 改变文本
        1. 常用命令
          • cw命令(change word):改变命令,与d命令类似,执行完成之后会进入Insert模式,意为改变一个word。
          • cc命令:改变整行,保持原有的缩进。
            • set all:查看vim所有的一些基础配置。
            • set cindent:开启缩进。
            • set nocindent:关闭缩进。
          • c$命令:删除到行尾的内容,等于d$a
        1. 快捷命令
          • x = dl
          • X = dh
          • D = d$
          • C = c$
          • s = cl
          • S = cc
        1. 命令计数放在哪里?
          • 3dwd3w3d2w,这些有什么区别呢?
          • 第一个数字是计数命令,代表命令的重复次数。
          • 第二个数字是位移命令,代表作用的范围。
        1. 替换单个字符
          • r命令(replace):替换单个字符,你也可以使用s或者cl命令来完成相同的功能,但使用r命令不需要再按Esc键回到Normal模式。
            • 备注:r命令同样可以使用数字计数,如5rx等操作。
        1. 重复改动
          • .命令:重复上一次做出的修改。
            • 如删除Html语言。
          • .命令重复的是修改命令,而不是被改动的内容。
          • 使用.命令来替换。
        1. Visual模式
            1. 选择文本范围
            • v命令:进入visual模式,移动光标覆盖你想操作的文本范围,最后键入操作符。
            1. 选择多行
            • vjj命令:选择3行,可以选择多行。
            1. 选择文本块
            • Ctrl-v:进入visual块模式,以文本块为对象进行操作,常常用来编辑表格。
            1. 文本块操作
            • o命令(other end):会让光标置于被选中的文本的另一端,对角的位置上去,可以通过光标移动进行行块的所选范围进行移动。
            • O命令:同一行左右两个角之间进行移动。
              • 备注:在visual块模式下,进行操作。
            1. 移动文本
            • p命令(put):以前通过用dx进行删除的文本都可以用p命令进行读取。
              • 如:dd删除行后,将光标移动到想要放入的地方然后p命令进行放入。
              • 如:移动某个单词,dw删除后,将光标移动到想要放入的地方然后使用p命令进行放入。
              • 如:交换两个字符,x删除字符,用p命令取回。
            • P命令:把取回的内容放在光标之前。
              • 备注:可以与计数命令一起使用,如:dd删除行之后,3p会将删除的行取回三次放在当前的位置。
            1. 复制文本
            • y命令(yanking): 将文本复制到一个寄存器中,用p命令取回。
              • 备注:
                • d命令类型。
                • yw:复制一个word。
                • y2w:复制两个word。
                • yy:复制一行。
                • y$:复制光标到行尾,Dd$(删除光标到行尾的内容)类似。
                • Y:与yy类似,复制一整行,规律是存在例外的。
            1. 使用剪贴板
            • *yy命令:将一行内容复制到剪贴板中。
            • *p命令:把剪贴板中的内容复制出来。
              • 备至:只适用于gvim,实质上是将内容复制到名为*的寄存器中。
            1. 文本对象
            • daw命令(delete a word):删除一个单词,光标位于单词的中间而你要删除这个单词时使用的。
            • diw命令(delete inner word):删除一个单词,不删除之后的空格符。
            • cas命令(change a sentence):要修改一整个句子,删除之后的空格符,由Normal模式转到Insert模式。
            • cis命令(change inner sentence):要修改一整个句子,不会删除之后的空格符。
            1. 替换模式
            • R命令:键入的字符都会替换当前光标下的字符,键入Esc结束该模式。
              • Insert键可以在Insert模式与Replace模式之间进行切换,Backspace键可以将原来的字符进行修复。
            1. 总结
              1. 操作命令,位移命令和文本对象可以让你在使用这些命令时任意组合,如在使用操作符命令N配上位移命令M来构成一个NM命令。
              1. 操作命令:dcyp
              1. 位移命令:wO^$
              1. 文本对象:awasiwis
              1. 删除文本常用的方法:
                  1. x:删除当前光标下的字符,与dl功能是一样。
                  1. X:删除当前光标之前的字符,与dh功能一样。
                  1. D:删除当前光标到行尾的内容,与d$功能一样。
                  1. dw:删除自当前光标到下一个word的开头。
                  1. db:删除自当前光标到前一个word的开始。
                  1. diw:删除自当前光标到前一个word(不包括空白字符)。
                  1. daw:删除当前光标所在word(包括空白字符)。
                  1. dG:删除当前行到文件尾的内容。
                  1. dgg:删除当前行到文件头的内容。
              1. 更改文本常用的方法
                • 如果用c命令代替d这些命令就都变成来更改命令,如此类推。
                • ~:改变当前光标下字符的大小写,并将光标移动到下一个字符。
                • I:将光标置于当前行第一个非空白字符处并进入Insert模式。
                • A:当前光标置于当前行尾并进入Insert模式。

7. 定制自己的vim

    1. vimrc文件

      • 如果你厌倦了手工键入常用命令,或者要使你喜好的选项和映射一次性准备好,这时可以统统写入到vimrc(vim run command)的文件里,Vim在启动的时会读取这个文件。

      • :read {filePath}命令:读取文件到当前vim编辑器里边。

      • :set filetype={fileNameSuffix}命令:设置当前vim窗口中文件的临时类型。

        1
        // vimrc位置:
        2
        1.Unix and OS/2: ~/.vimrc
        3
        2. Windows: $VIM\_vimrc
        4
        5
        // 设置兼容性
        6
        set nocompatible
        7
        8
        // 设置历史命令缓存数量
        9
        set history=50
        10
        11
        // 设置鼠标支持
        12
        set mouse=a
        13
        14
        // 打开语法高亮
        15
        set syntax on
        16
        17
        // 设置高亮检索
        18
        set hlsearch
        19
        20
        // 设置自动缩进
        21
        set autoindent
        22
        23
        // 设置缩进宽度
        24
        set shiftwidth=4
    1. 简单的映射
      • 一个映射可以把一连串vim命令用一个按键来表示。
      • 如:用一个功能键或者字符串,将某个word单词,变成{word},可以使用:map命令。
      • :map <F5> i{<Esc>ea}<Esc>
    1. 选项窗口
      • :options命令:在帮助主题中寻找或设置相应的选项。
      • set all命令:查看所有的设置选项
    1. 常用选项
      • :help {options}:查看某个选项的帮助。
      • set {options}&:{options}:修改为默认值。
      • set nowrap:不要折行。
      • set sidescroll=10:自动左右滚动10个字符。
      • set whichwrap=b,s,<,>,h,l,[,]:Normal和Insert模式下跨行移动命令。
      • set cmdheight=3:设置命令行高度为3。
    1. 使用高亮
      • syntax enable:打开语法支持。
      • syntax clear:关闭当前高亮。
      • colorscheme {themeName}:打开不同的颜色主题。

8. 编辑多个文件

    1. 编辑另一个文件
      • :edit {fileName}:编辑另一个文件。
      • :hide edit {fileName}:隐藏编辑另一个文件,不进行保存当前缓冲区的内容。
      • :edit! {fileName}:强制编辑另一个文件,不进行保存当前缓冲区的内容。
    1. 文件列表
        1. 打开多个文件
          • vim fileName1 fileName2 fileName3
        1. 文件列表,当前在编辑哪个文件
          • :args命令(arguments): 显示当前的文件列表,当前文件以[]括起来。
        1. 文件列表中的切换
          • :next命令:打开编辑下一个文件。
          • :next!命令:强制打开编辑下一个文件。
          • :wnext命令:完成两个单独的命令。即::write :next
          • :previous命令:打开编辑上一个文件。
          • :wprevious命令:保存当前文件,打开编辑上一个文件。
          • :last命令:打开最后一个文件,wlast命令。
          • :first命令:打开第一个文件,wfirst命令。
          • :2next命令:使用计数命令,向前跳过两个文件。
        1. 自动保存
          • :set autowrite:在不同的文件转移时,不需要每次都执行write命令。
          • :set noautowrite:关闭自动保存。
            • 备注:与word自动保存不同,过一段时间会自动保存,指某个事件发生时自动保存这个文件。
        1. 编辑另一个文件列表
          • args fileName1 fileName2 fileName:优点是不用重启Vim,就可以重新定义一个文件列表。
          • args *.{Filename Suffix}:支持通配符。
        1. 最后文件提醒
          • 当你有一个文件列表要编辑时,Vim会假设你要全部编辑它们,如果你要退出,就需要再执行一个退出命令。
    1. 切换到另一文件
        1. CTRL-^:两个文件之间快速的切换。
          • args fileName1 fileName2打开文件之后,再使用了:next或者previous之后,可以使用这个命令非常方便的在两个文件中进行切换。
        1. 多个文件之间的标记。
          • 全局标记:使用大写字母命名标记。
            • 如:args fileName1后使用m{markFlag},这个时候去别的文件之后可以使用'或者`跳转到自定义标记的位置。
            • 如果你删除了局部标记所在的行,也就相当于删除了这个局部标记。与全局标记不同,全局标记会一直存在下去。
          • 预定义标记
            • `’’:关闭文件时的光标的位置。
            • `.:文件最后一次修改的地方。
            • 在多文件中也可以使用CTRL-iCTRL-o两个同样试用。
    1. 备份
      • :set backup:生成备份文件,文件名为原文件名加一个~
        • 备注:ZZ进行退出,是不能生成备份文件的,需要使用:write
      • :set backupext=.bak:修改生成一个名为原文件名加.bak的备份文件。
      • :set patchmode=.orig:保存一份修改前的原始文件作为副本,同时后缀名为.orig
    1. 在文件之间复制粘贴
        1. 简单的复制粘贴
          • :edit {fileName}打开你要找的文件,然后/{检索内容}搜索你要复制的内容,然后v进入可视模式选择你要复制的内容,然后y复制,然后:edit {fileName}回到你要粘贴的文件,之后/{检索内容}搜索你要粘贴的位置,最后p粘贴刚刚复制的文本。
        1. 使用寄存器
          • 复制多个独立的文本到另一个文件中时,这个时候可以使用寄存器,使用az的字母作为寄存器的名字。
            • 使用可视模式选择文本,然后"{寄存器名称},即:把一整块文本复制到寄存器中。
          • "fyas:把一个句子复制到名为f(first)的寄存器中。
          • "l3Y:把3个整行的内容复制到名为l(line)的寄存器中。
          • "bp:取出寄存器b中的内容文本。
          • wdaw:删除一个word并将其存入名为w(word)的寄存器中。
        1. 向文件中追加内容
          • :read {fileName}:向当前文件进行追加{fileName}文件内容。
          • :write >> {fileName}:将当前文件追加到文件名为{fileName}的文件中去,只能追加到文件的最后。
          • :write {newFileName}:将当前文件写入到名为{newFileName}新文件中去。
          • :'<,'> write >> {newFileName}:在Visual模式下也可以进行选择要写入的文本。
    1. 查看文件
      • vim {fileName}:直接打开编辑文件,可以读写。
      • vim -R {fileNmae}:以只读模式打开文件。
      • vim -M {fileNmae}:强制性的避免对文件进行修改,其中-M选项是告诉Vim工作于viewer模式中。
      • :set modifiable + :set write命令组合让viewer模式下的文件进行读写。
    1. 更改文件名
      • :write {filename}:将当前文件写入到新的文件中。
      • saveas {filename}:将当前文件进行另存为操作,且将新文件直接打开。
      • :file {filename}:与saveas功能相似,也可以实现文件名的更改。

9. 分隔窗口

将一个窗口分隔成多个窗口,可以同时显示或者编辑多个文件,或者可以显示或编辑同一个文件的不同位置。

    1. 分隔一个窗口
      • :split命令:将屏幕分成上下两个窗口,并将光标定位在上面的窗口中。
      • :vsplit命令:将屏幕分成左右两个窗口,并将光标定位在左边的窗口中。
      • CTRL-w w(window)命令:切换当前活动窗口,与CTRL-w CTRL-w功能相同。
      • :close命令:关闭当前活动窗口。比如:quitZZ均可以关闭当前窗口,但是其优点在于可以阻止你关闭最后一个窗口,不会意外的将Vim退出。
      • :only命令:关闭除当前窗口之外的所有窗口。
    1. 为另一个文件分隔出一个窗口
      • :split {otherFile}:打开第二个窗口同时在新打开的窗口中开始编辑。
      • :new:打开一个新的窗口并开始编辑一个空的缓冲区。
        • 备注:可以重复的使用:splitnew命令打开任何你喜欢的窗口数目。
    1. 窗口的大小
        1. :3solit {fileName}:高度为3的新窗口,名为{fileName}的文件。
        1. CTRL-w +:窗口高度增加1行。
        1. CTRL-w -:窗口高度减小1行。
          • 备注:可以增加计数命令,如4CTRL-w -一次减少4行。
          • {height} CTRL-w:窗口高度指定为一个固定的height。
          • 备注:不指定高度时,默认让窗口达到它的最大的高度。
          • :set mouse=a:设置使用鼠标控制窗口调整。
        1. 常用选项
          • winminheight:强制窗口的最小高度,可以使用:set wmh=4
          • winminwidth:强制窗口的最小宽度,可以使用:set smw=4
          • equalalways:自动让所有窗口均摊屏幕上可用的高度和宽度。
    1. 垂直分隔
        1. 常用命令
          • :vsplit命令:将屏幕分成左右两个窗口,并将光标定位在左边的窗口中。
          • :vnew:垂直打开一个新的窗口并开始编辑一个空的缓冲区。
        1. 切换窗口
          • CTRL-w h:切换到左边的窗口。
          • CTRL-w j:切换到下边的窗口。
          • CTRL-w k:切换到上边的窗口。
          • CTRL-w l:切换到右边的窗口。
          • CTRL-w t:切换到顶部的窗口。(top)
          • CTRL-w b:切换到底部的窗口。(bottom)
    1. 移动窗口
      • CTRL-w H:向左移动窗口
      • CTRL-w J:向下移动窗口
      • CTRL-w K:向上移动窗口
      • CTRL-w L:向右移动窗口
    1. 针对所有窗口操作的命令
        1. 常用命令
          • :qall:关闭所有的窗口。(quit all)
          • :wqall:保存所有穿够内容并关闭窗口。(write quit all)
          • :qall!:强制关闭所有的窗口,不为文件保存。
        1. 为每一个文件打开一个窗口
          • vi -o *.txt:水平打开多个文件,并且为每一个文件打开一个窗口。
          • vi -O *.txt:垂直打开多个文件,并且为每一个文件打开一个窗口。
          • :all命令:将文件列表中的文件,各打开一个水平的窗口进行显示或编辑。
          • :vertical all命令:将文件列表中的文件,各打开一个垂直的窗口进行显示或编辑。
    1. 使用vimdiff查看文件的区别
      • 备注:vimdiff是Vim的另一种特殊的启动方式,可以显示文件的不同之处。
        1. 常用命令
          • vimdiff {fileName} {fileName}:以diff模式打开两个文件进行比较。
          • :vertical diffsplit {fileName}:可以运行Vim之后进行比较两个不同的文件。
          • ]c[c:跳到下一个或上一个两个文件的不同的地方。
        1. 消除差异
          • diffupdate:重新比较两个文件,更细差异,主要用于修改文本之后。
          • dp(diff put):将当前窗口不同的内容放到另一个窗口中。
          • do(diff obtain):从另一个窗口中对应的位置上取来了差异的内容。
    1. 其他
        1. CTRL-w CTRL-^:分隔出一个窗口来编辑前一个文件。
        1. 常用选项
          • :set scrollbind:打开同步滚动,通常这个选项是默认开启的。
          • laststatus0 永不;1 只有在有至少两个窗口时;2 总是
          • splitbelow:用来控制新打开窗口出现在当前窗口的下边。
          • splitright:用来控制新打开窗口出现在当前窗口的右边。
    1. 页签
      • 解决平铺在显示屏幕上窗口不够用的问题。
      • CTRL-w T:将当前活动窗口以页签的形式显示。
      • :tabedit {fileName}:以页签的形式显示{fileName}的文件。
      • gt(goto tab):转到下一个标签页,最后一个标签页回到第一个。
      • gT(goto tab):转到上一个标签页,第一个标签页回到最后一个。
      • {count}gt:转到第{count}个标签页,首个标签页的编号为1。
      • :tabonly:关闭除当前页签之后的所有页签。

10. 大刀阔斧

    1. 命令的记录和回放
        1. 操作步骤:
            1. q{register}命令:将后续的动作记录到名为{register}的寄存器中,其中给出的寄存器名字必须是az之间的一个字母。
            1. 执行你要执行的操作,按下q以结束对命令的记录。
            1. @{register}命令:执行刚刚记录下来的宏。
        1. 例子:
            1. qa:开始将后续的命令记入到寄存器a中。
            1. 将光标移动到行首。
            1. i#include "<Esc>,在该行之前插入#include
            1. $将光标移动到行尾。
            1. a.h"<Esc>:在行尾加上.h"字符。
            1. j:移动到下一行。
            1. q:停止记录。
            1. @a:执行记录的宏,可以加计数命令。
            1. @@:重复上一次宏的命令。
        1. 编辑宏的内容
            1. "ap命令:显示宏的内容。
            1. "ad$命令:将编辑好的宏的内容再一次的放入到寄存器中。
            1. qA命令:向寄存器a中追加内容。
    1. 替换
        1. 通用形式
          • :[range]submitute/from/to/[flags]:对一个指定的范围执行替换操作,range指范围,from被替换的内容,与搜索命令所用的正则表达式类似,to替换为的内容,flags指一些常用的标记。
            • 如::s/the /these /g,g是global的意思。
            • 如: :s/one\two/one or two/g
        1. 常用选项
          • range:作用范围,range=%范围为所有行,而缺省只作用于当前行。
          • flags:标记,flags=g(global)将改变一行所有符合目标字符串的全部字符进行替换。flags=c:在执行每个替换前请求用户确认confirm
            • y:好吧,yes。
            • n:不,no。
            • a:全部,all。
            • q:退出,quit。
            • l:把现在这个修改结束后进行退出。
            • CTRL-E:向上滚屏一行。
            • CTRL-Y:向下滚屏一行。
    1. 命令的作用范围
      • :1,5s/this/that/g:对第1行到第5行的文本执行替换操作。
      • :3s/this/that/g:对指定行进行替换操作。
      • :.,$s/this/that/g:当前行到最后一行范围,如:$=1,$
      • :?^Chapter?,/^Chapter/s=this=that=g:使用搜索模式来指定作用范围。
      • :?^Chapter?+1,/^Chapter/-1s=this=that=g:增与减行的范围操作。
      • .+3,$-5s/this/that/g:将当前行的下三行到倒数第6行的作用操作。
      • 't,'bs/this/that/g:使用标记确定操作范围。
      • '<,'>s/this/that/g:Visual模式确定的范围。
      • '>,$:从上一次VIsual模式时选定的文本区域的结束处到文本末尾的这样的区域。
      • .,.+4.当前行到,+4从当前行到向下4行。
    1. 全局命令
      • :[range]global/{pattern}/{command}:找到符合某个匹配模式的行,然后将命令作用于这些行上,全局命令的默认作用范围是整个文件。
      • :g=//=s/foobar/barfoo/g:整个文件中包含//的行,进行替换操作。
      • :g=//=d:整个文件中包含//的行,进行删除操作。
    1. Visual Block模式
        1. 插入文本
          • Insert<Esc>:在文本块的每行的行首,进行插入文本。
          • Astring<Esc>:在文本块的每行的行尾,进行插入文本。
        1. 改变文本
          • cstring<Esc>:修改文本块的文本,仅仅会修改文本块的内容。
          • Cstring<Esc>:修改文本块的文本,会删除文本块尾部的内容。
        1. 改变文本的大小写
          • ~:交换大小写。
          • U:将小写变大写。
          • u:将大写变小写。
        1. 填充命令
          • rx:以字符x进行文本块的填充操作。
        1. 左右移动
          • <命令:会使你的文本向左移动一个shift单位。
          • >命令:会使你的文本向右移动一个shift单位。
          • :set shiftwidth=4:设置一个shift单位的宽度。
        1. 将多行内容粘贴起来
          • J命令:使文本块纵跨的所有文本被连接为一行。
          • gJ命令:如果你想要保留那些前导空白和后缀的空白时,可以使用。
    1. 读写文件
        1. 读取文件
          • :read fileName:读入文件的内容放在当前行。
          • $read fileName:追加到文件的最后。
          • 0read fileName:把文件放在第一行的上面。
          • 60read fileName:那文件放在指定行的上面。
        1. 写入文件
          • :write fileName:没有指定一个范围时该命令将写入整个文件的内容。
          • :.,$write fileName:当前行到文件尾的内容写入文件,如果文件存在则失败。
          • :.,$write! fileName:强制当前行到文件尾的内容写入文件,会进入覆盖模式。
          • :.write fileName:将当前行写入文件中。
          • :.write >> fileName:将当前行的内容追加到文件中。
        1. 格式化文本
          • :set textwidth: 查看键入文字的时候每行的内容能自动调节到适应当前设置的宽度,每一行都会自动调整到只包含最多几个字符,Vim进行格式化文本的时候不会打断你的单词。
          • :set textwidth=100: 设置键入文字的时候每行的内容能自动调节到适应当前设置的宽度,每一行都会自动调整到只包含最多100个字符,Vim进行格式化文本的时候不会打断你的单词。
          • :gqapgq为Vim的一个格式化操作符号,ap是一个文本对象,即:a paragraph。
          • gg gqG:格式化整个文件的内容。
          • gqgq:格式化当前行,可以与.重复命令一起使用。
          • gqj:格式化当前行和它下面的一行。
        1. 改变大小写
          • guw命令:gu是变小写的操作符,w是位移。
          • gUw命令:gU是变大写的操作,w是位移。
          • g~w命令:将字母的大小写进行反转,大写变小写,小写变大写。
          • gugu命令:使一整行变为小写,简写为guu,同理gUgUgUUg~g~g~~
        1. 使用外部程序
          • sort < input.txt > output.txt
          • !5G!过滤操作符,5G为移动命令,决定了将哪个区域送到过滤程序中。
          • !!date!!命令为过滤当前行,date命令显示当前时间。
          • write !wc:将文本写入一个命令wc中,wc命令是统计行数,单词数,字符数。