vim浅谈

        在Linux的世界里,绝大部分的配置文件都是以ASCII的纯文本形式存在的,所以作为一名优秀的Geek,熟练掌握一种文本编辑辑器是非常重要的。

        Linux世界中的文本编辑器有很多,比如:Emacs,pico,nano,vim等。

        但是vi是所以类Unix系统都会内置的文本编辑器,功能强大,且具备一定的程序编写能力,(其他文本编辑器则不一定存在哦!)所以下面我们重点介绍vim。

        我们可以把vim视为高版本的vi。

        好了,下面我们说下vim的具体用法吧!

    vim打开一个文件非常简单:

            #vim [option]… [FILE]     例如: #vim /etc/hosts    

QQ截图20150422134441.png

      

QQ截图20150422134349.png

    这样就可以打开文本文件了。

    vim也可以什么都不跟,直接就敲vim,可以查看版本等信息。  

QQ截图20150422134651.png

   

}OM0[YCPITT)YU{T0KST7@P.png

    vim有三种工作模式,分别是:编辑模式(也叫命令模式)、输入模式、末行模式。下面我们分别介绍下! 

        编辑模式:我们先拷贝/etc/rc.d/init.d/functions到/tmp/下,然后在用vim打开function文件。

    

QQ截图20150422135745.png

    

QQ截图20150422135900.png

 QQ截图20150423163425.png

QQ截图20150424143704.png

        这样我们就用vim打开一个文本文件了!当然打开文件不是目的,目的是对文件进行修改配置。

        下面我们就细述下vim。

        

        vim有三种工作模式:编辑模式(也叫命令模式),输入模式,末行模式。我们先谈下三种模式的作用与转换关系。

            编辑模式:用vim打开文件时默认的模式,在这种模式下,键盘的操作常被理解为编辑命令,我们可以移动光标和做删除复制的操作。

            输入模式:可以对文件进行修改和编写,如果想退回编辑模式就要按下【Esc】键了。

            末行模式:vim内置的命令接口,执行vim的内置命令。

        下面用张图展示个人理解三者之间的转换关系:

    

     QQ截图20150424231527.png

                                            男                                     媒人                                女

            如图所示,我们可以把这种相亲,男放有问题需要找媒人沟通,而不能直接找女方,女方同理,编辑模式即起到纽带的作用。

            下面我们介绍下编辑模式下我们可以用到的命令:

                    i:在光标所在处的前方转换为输入模式

                    a:在光标所在处的后方转换为输入模式

                    o:在光标所在处的下方新建一个空白行并转换为输入模式

                    R:转换为输入模式并一直替换光标所在处的字符

                    I:在光标所在行的行首转换为输入模式

                    A:在光标所在行的行尾转换为输入模式

                    O:在光标所在行的上方新建一个空白行并转换为输入模式

         那么当我们编辑完怎样退出呢?

            退出文件:

                    在末行模式下

                    :q!不保存退出

                    :wq 保存退出       

                    :x 保存退出

                    :wq!强制保存并退出

                    :w!若文件属性为“只读”,强制写入。

                    

            光标的移动:

                    h:光标向左移动一个字符

                    j:光标向下移动一行

                    k:光标向上移动一行

                    l:光标向右移动一个字节

                个人习惯了用上下左右键,但是这些键还是有必要知道的。

            单词间的移动:

                    w:下一个单词词首

                    e:当前单词或下一个单词词尾

                    b:当前单词或下一个单词词首

                这里支持#w,#e,#b的是用,#代表数字,比如:3w:后面的第三个单词的词首。

            行内移动:

                    ^:移动到行首(这里指的行内第一个非空白字符)

                    0:绝对行首

                    $:绝对行尾

            

            编辑命令:

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

                #x:删除从光标所在处向右的#个字符

            删除命令d:

                    可以结合w,b,e,$,0,^一起使用

                        例如:

                          dw:删除一个单词

                          dd:删除光标所在行

                          #dd:删除光标所在行及下面的#-1行

                          D:=d$删除光标所在处到行尾

            复制命令:

                y:yank,复制

                同理也可以结合w,b,e,$,0,^来使用

                #yy:复制#行,包括光标所在的行

                Y:=yy

            粘贴命令:

                p:past,粘贴

                    行级别:

                        p:粘贴于当前行下方

                        P:粘贴于当前行上方

                    小于行级别:

                        比如:3yw

                        p:粘贴于当前光标所在处的后方

                        P:粘贴于当前光标所在处的前方

                    修改命令:

                        c:change

                            先删除,再转换为输入模式

                                同理也可以结合光标跳转字符使用w,e,b,$,0,^,修改跳转范围内的字符 2cw

            在我们编辑过程中难免会有操作失误的时候,这里vim同样提供给我们撤销命令。

                    撤销命令:

                        u:在编辑模式下按u键即可,就好比我们在windows下习惯用的Ctrl+z

                        #u:撤销最近的#次操作

                    如果我们不想启用刚刚的撤销操作呢,想返回撤销之前的样子呢?

                        按下Ctrl+r即可

            末行模式:

                在末行模式下也可以锁定行

                    :# 敲回车后直接跳转到第#行

                    

                    :$ 跳转到最后一行

                内容锁定:

                       格式:starpos,endpos

                        #:第#行

                        .:当前行

                        $:最后一行

                        %:全文,相当于1,$

                        例:10,$-1:第十行到倒数第二行

                        c,

d,y等命令可以直接附加在地址范围后使用

                上图说明:

QQ截图20150425093326.png

QQ截图20150425093502.png

QQ截图20150425093546.png

QQ截图20150425093629.png

                内容锁定还支持将选定范围内的内容保存到另一个文件中和将指定文件中的内容读取到指定位置

                   w /path/to/somefile:将选定范围内的内容保存至某文件中 (.,$w /tmp/text.txt)

QQ截图20150425093326.png

QQ截图20150425094925.png

QQ截图20150425095122.png

            将/etc/issue中的内容保存在function中

                

QQ截图20150425095621.png

QQ截图20150425095808.png

QQ截图20150425095846.png

            vim还支持搜索替换

                格式为:s/查找模式/要替换成的内容/gi

                    查找模式:可以使用正则表达式

                    要替换成的内容:不能使用正则表达式,仅能使用引用

                        %s/file/FILE

                        g:global,全局替换

                        i:模式匹配不区分字符大小写

                例如:替换/tmp/functions文件中的/etc/sysconfig/init为/var/log

                    

QQ截图20150425101150.png

QQ截图20150425101215.png

                文本查找:

                    /PATTERN

                    ?PATTERN

        

QQ截图20150425102332.png

                n:搜索文本中的下一个etc单词

                N:搜索上一个

                用?ect大小写n的作用相反

            多文本模式:

                :next 下一个

                :previous 上一个

                :last 最后一个

                :first 第一个

        上图说明:

QQ截图20150425102953.png

QQ截图20150425103131.png

QQ截图20150425103150.png

QQ截图20150425103213.png

QQ截图20150425103228.png

                多文本编辑完后可以按wqall保存并退出。

                

                翻屏操作:

                    Ctrl+f:向文件尾部翻一屏

                    Ctrl+b:向文件首部翻一屏

                    Ctrl+d:向文件尾部翻半屏

                    Ctrl+u:向文件首部翻半屏

                    j:向文件尾部翻一行

                    k:向文件首部翻一行

                多窗口模式:

                    vim

                        -o:水平分割

                        -O:垂直分割

                        Ctrl+w:切换窗口

                        Ctrl+w后按s:水平分割

                        Ctrl+w后按v:垂直分割

                如图:

QQ截图20150425104205.png

QQ截图20150425104337.png

QQ截图20150425104452.png

QQ截图20150425104701.png

             窗口属性定义:

                :set nu 显示行号

                :set nonu 取消行号

                :set ai 自动缩进(提示:同志们写脚本/代码时特别有用哦!)

                :set noai

                :set ic 忽略字符大小写

                :set noic

QQ截图20150425105323.png

                    其他定义还请同志们自行实验。

                语法高亮:

                    :syntax on | off

QQ截图20150425105553.png

QQ截图20150425105621.png

                    搜索高亮:

                        :set hlsearch

                        :set nohlsearch

QQ截图20150425105925.png

QQ截图20150425110001.png

            这些定义的属性都可在配置文件中设置

                全局:/etc/vimrc

                用户:~/.vimrc

            好了vim的常用命令就讲到这里了,有更丰富的用法和讲述不正确的地方还请同志们指正出来!

            谢谢大家!

            

原创文章,作者:水蒸气,如若转载,请注明出处:http://www.178linux.com/3491

(0)
水蒸气水蒸气
上一篇 2015-04-27
下一篇 2015-04-27

相关推荐

  • LVM 与快照

    LVM: Logical Volume Manager 概念 它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。 允许对卷进行方便操作的抽象层,包括重新设定 文件系统的大小  允许在多个物理设备间重新组织文件系统 • 将设备指定为物理卷 • 用一个或者多个物理卷来创建一个卷组 • 物理卷是用固…

    Linux干货 2016-09-05
  • Linux文件权限管理及目录文件的深入理解。

    文件权限及目录 初学Linux,感觉这个东西该复杂,而且逻辑非常的强。难~! 自己根据学习到的理论和实践,得出的对文件权限,进程,以及特殊权限的深入理解。希望能解决初学者对于权限的困惑。如有错误请指正。 文件的权限,指定的是什么? 是文件的权限位上的权限,针对三类用户,任何用户都必须是三类用户中的一种,属主属组和其他人的权限rwx   &…

    Linux干货 2016-08-10
  • etc的常见问答

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost tuser1]# cp -r /etc/skel/ /home/tuser1 [root@localhost tuser1]# chmod -R go= /home/tuser1/ [root…

    2017-12-26
  • 7.28_Linux_ext数据结构inode的原理浅析、软硬链接的区别

    inode表结构浅析 下图以ext文件系统为参考,以4k块大小分区,简单描述一下ext文件系统的数据结构原理,如果有任何错误,烦请各位指出 inode 索引节点 硬盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区。硬盘的读写以扇区为基本单位。 扇区的大小,是2的N次方倍。分区的大小可以有多样,1k、2k、4k…以4k块大小来说明。4k块大…

    Linux干货 2016-08-03
  • Linux程序包管理rpm、yum、源码编译

    概述:     众所周知,Linux操作系统本身,必须要借助额外的一些软件,才能完成某些应用的,操作系统如果没有应用程序的填充,就无法创造出生产力,这样即使再完美的操作系统,也毫无用处。那么本章就简要介绍一下Linux系统上对程序包的管理,分为以下三个部分:     1、程序包的…

    Linux干货 2016-08-24
  • hello 北京&Linux启程

    北京初感&Linux启程

    Linux干货 2018-03-26

评论列表(2条)

  • stanley
    stanley 2015-04-27 21:41

    内容丰满,少了些层次

    • 水蒸气
      水蒸气 2015-04-27 21:45

      @stanley谢谢老师指点!下次改进!