vim编辑器常用技巧

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vim编辑器常用技巧相关的知识,希望对你有一定的参考价值。

(一).写作缘由:

    在使用linux的过程中,无论是运维管理还是普通用户都难免对操作文件,拥有一款得心应手的编辑器是必不可少的。可以说绝大部分使用者都是使用的vi/vim编辑器,不仅仅是因为它是linux系统默认安装了的软件,还因为它体积很小,功能强大。

    vim(VI iMproved)编辑器可以说是vi(visual interface)的扩展版,vim支持语法高亮等特性,以及各种高效率的操作。使得编辑文件的效率得到提高,当然这需要使用者对其相对较熟悉。


(二).vim的常见模式:

    (1).vim的模式非常多,这里只介绍一部分模式,包括编辑模式,插入模式,末行模式,本文也包含替换模式和可视化模式的内容。

        a.编辑模式:就是使用vim打开文件或者直接输入vim之后的模式,左下角没什么特殊的提示,如下两图:


技术分享图片技术分享图片

    

        b.插入模式:一般按i,a,s,o或其大写等能进入插入模式,在这个模式下输入的内容会写到文件。如下图,在左下角会提示编辑器此时正处于该状态:

技术分享图片

        

        c.末行模式:此模式是在编辑模式下输入':'后进入的模式,该模式下的功能很多包括执行一些其他shell命令等,如下图所示:

技术分享图片


        d.替换模式:该模式是在编辑模式下按R键进入,在该模式下对文本的操作是替换操作,和覆盖差不多,如下图:

技术分享图片


        e.可视化模式:这种模式和windows里面的多选差不多,在编辑模式下按v或者V键能进入该模式,可以对选中的内容进行操作,如下图:

技术分享图片


    (2).这些模式之间是可以相互转换的,下图描述了上面几种模式的相互转换:

技术分享图片



(三).vim的常用技巧:

    (1).打开文件:

        vim  filename: 打开名为filename的文件,光标处于文件的开始位置。

        vim +n filename: 打开文件后,直接让光标处于第n行的行首。

        vim + filename: 打开文件后直接处于最后一行行首(注意加号两边是空格)。

        vim /pattern filename:   打开文件后使光标定位到第一次被pattern匹配到的模式位置(pattern是匹配模式,之后要确定一下,如下图:)

技术分享图片


    (2).关闭文件:一般在末行模式或者编辑模式下关闭文件

            末行模式下:

                q:    退出(不会保存内容,若此时编辑了内容,是不能退的,会让你确认是否保存)

                wq:   保存并退出

                q!:   不保存并退出

                w:    保存

                w!:   强制保存(需要特定权限)

                x:    与wq一样


            编辑模式下:

                zz:   保存退出


      (3).编辑器的一些常见设置:可以更改/etc/vimrc文件或者~/.vimrc,在末行模式下添加如下内容,也可以在末行模式下执行如下内容:

            :set nu            让编辑器行号(nu为number)

            :syntax on         开启语法高亮       

            :set ts=4          设置tab长度为4

            :set autoindent    设置自动对齐

            :set cindent       C语言编码时,内嵌代码自动缩进

            这个设置完全可以按自己的喜好设置,网上很多,这里就不一一例举了。

       

    (4).光标移动:

            a.逐个字符移动

                h: 左移光标

                l: 上移光标

                j: 下移光标

                k: 右移光标

                数字n与以上几个键组合: 可一次移动n个字符(例如3j: 光标从当前位置开始下移三个位置)

            

            b.逐个单词移动

                w: 移到下个单词词首

                e: 移到当前或下一个单词的词尾

                b: 跳到当前或上一个单词的词首

                数字键n与上面的键组合: 可一次移动n个单词位置(例如5w: 向后移动五个单词的位置,且到单词首字母位置)


    (5).行内跳转:

            0: 跳到行首(绝对行首)

            ^: 跳到行首(相对行首)

            $: 跳到行尾


    (6).行间跳转:

            G:     跳到最后行

            gg:    跳到第一行

            n + G: 跳转到第n行

            在末行模式下跳转只需输入行号即可跳转,如下图:

        技术分享图片


    (7).翻屏操作:

            Ctrl + f: 向下翻一屏

            Ctrl + b: 向上翻一屏

            Ctrl + d: 向下翻半屏

            Ctrl + u: 向上翻半屏


    (8).删除单个字符:

            x:  删除光标所在处的单个字符

            nx: 删除光标所在处及向后的共n个字符


    (9).删除命令d:

            a.编辑模式下,与跳转命令组合使用可以删除多少内容:

                dw:  删除一个单词

                dd:  删除当前光标所在行

                ndd: 删除包括当前光标所在行内的n行

        b.末行模式下

                m, nd:删除m到n行

                ., +5d:删除当前行到当前行之后的5行(共5行)

                ., 100d:删除当前航到100行

                ., $-9d:删除当前行到倒数第10行

              

            c.说明: 删除的内容并没有被立即清空,而是在内存中,最后一次删除的内容可用于粘贴


    (10).粘贴命令:

            p: 如果删除或复制为整行内容,则粘贴到光标所在行的下方,如果复制或者删除的内容不是整行,则粘贴到光标所在字符的后面

            P: 如果删除或复制为整行内容,则粘贴到光标所在行的上方,如果复制或者删除的内容不是整行,则粘贴到光标所在字符的前面


    (11).复制命令y:

            用法与d命令一样,将d换成y即可,也可在变模式和末行模式下进行,使用方法完全一样。


    (12).修改命令c: 先删除内容,再转换为插入模式。

            用法与d命令一样,将d换成c即可,也可在变换,如: c$: 先删除当前光标所在位置到末行的内容,然后进入插入模式。

        

    (13).替换命令r:

            按了r之后,输入要替换成的字符

            也可与n组合,达到同时替换多个字符(一般不会那么干,很少有意义)

        

            R:直接进入替换模式,输入的内容将覆盖原有的内容

        

    (14).撤销编辑:

            u:  撤销前一次编辑操做

            nu:撤销前n次操作(一般只保留50次修改操作)

            撤销刚刚撤销的操作:Ctrl + r


    (15).重复前一次编辑操作

            .: 按'.'即可重复上一次操作,例如:dd会后,再按'.',则会继续执行dd命令


    (16).可视化模式(如下图):

            v: 按字符选取

            V: 按矩形选取

技术分享图片技术分享图片


    (17).查找替换:

            /pattern:从文件首向尾部查找

            ?pattern:从当前光标位置向文件首部查找

            n:跳到下一个匹配到的对象

            N:跳到上一个匹配到的对象

    

    (18).查找并替换(在末行模式下):

            m, ns/pattern/string/g(全局替换)i(忽略大小写)

            m, [email protected]@[email protected](与上面效果完全一样)

            在第m行到n行搜索partern(可以正则),替换成string,即使一行有多个全部替换,忽略大小写

        例如:

                s/pattern/string/:      替换当前行匹配到的pattern的第一个对象为string

                s/pattern/string/g:     替换当前行匹配到的pattern的所有对象为string

                m, $s/pattern/string/:  替换从m行到最后一行匹配到的pattern的第一个对象为string    

                m, $s/pattern/string/g: 替换从m行到最后一行匹配到的pattern的所有对象为string

                ., $s/pattern/string/g: 替换从当前行到最后一行匹配到的pattern的所有对象为string

                1, $s/pattern/string/g: 替换文本中所有的匹配到的pattern为string

            

                %s/pattern/string/:     替换每一行匹配到的pattern的第一个对象为string

                %s/pattern/string/g:    替换每一行匹配到的pattern的所有对象为string

    

            说明: '/'与'@'效果在这里是一样的。


(四).如有不足之处,还请斧正:

        这里只是写了vim的一少部分常用的功能,若你所找的答案不在其中,还请使用man帮助或者其他相关资料进行查阅。


            

以上是关于vim编辑器常用技巧的主要内容,如果未能解决你的问题,请参考以下文章

第十九篇 vim编辑器的使用技巧

上古神器——Vim使用技巧

vim使用技巧(常用指令)

vim常用操作和使用技巧

Linux生产环境上,最常用的一套“vim“技巧

Linux系统 vi/vim文本编辑器