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

相关推荐

  • awk学习笔记

    一、linux的文本处理器三剑客   文本过滤器:grep、egrep、fgrep   行编辑器:sed(模式空间;保持空间)   报表生成器:awk(格式化文本输出)gawk awk的工作流程: 从文本中读取一行内容,根据指定的分隔符;将读入的一行内容分隔成字段,然后格式化输出指定的字段 二、awk的命令相关的参数及用法 &n…

    Linux干货 2015-06-23
  • linux —————-目录配配置【FHS】

    linux 目录配配置【FHS】 /根目录的意义与内容 根目录是整个系统最重要的一个目录;根目录与开机、还原、系统修复等操作有关 FHS建议标准: 根目录所在的分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好 FHS定义的目录含义 /bin :系统存放执行文件的目录,但是bin比较特殊【bin放置的是在单用户维护模…

    Linux干货 2017-04-17
  • lvs初探

    1,lvs是什么 lvs是Linux Virtual Server缩写,linux虚拟服务器,担任负载调度器(load balance)的角色,它不提供任何服务,用户请求到这里的时候,它是将客户需求转发至后端真正提供服务的服务,LVS分为两部分组成,ipvsadm管理集群服务的命令行工具,ipvs,是内核模块。由于ipvs采用基于ip负载均衡技术,所以具有很…

    Linux干货 2016-10-30
  • iptables

    iptables Firewall:防火墙 隔离工具;Packets Filter Firewall;工作于主机或网络的边缘,对经由的报文根据预先定义的规则(匹配条件)进行检测,对于能够被规则匹配到的报文实行某预定义的处理机制的一套组件; 分类: 硬件防火墙:在硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现; 软件防火墙:应用软件处理逻辑运行于通用…

    Linux干货 2016-11-07
  • Tomcat基于MSM+Memcached实现Session共享

    前言 在Tomcat集群中,当一个节点出现故障,其他节点该如何接管故障节点的Session信息呢?本文带来的解决方案是基于MSM+Memcached实现Session共享。 相关介绍 MSM MSM–Memcached Session Manager是一个高可用的Tomcat Session共享解决方案,除了可以从本机内存快速读取Session信…

    Linux干货 2015-07-03
  • 密码保护:测试信息, 顺便贴上以前年少轻狂的内容.(未整理)

    无法提供摘要。这是一篇受保护的文章。

    Linux干货 2017-07-11

评论列表(2条)

  • stanley
    stanley 2015-04-27 21:41

    内容丰满,少了些层次

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

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