系统基础之vim工具详解

vim工具详解

作为运维人员,每天要面对大量的文件操作,如何使用一个功能强大,操作快捷的文本编辑器,就至关重要.那天,今天给大家详细的介绍下vim这款编辑器,完全符合我们的要求,下面让我们一起来看看吧!


概论:


 文本编辑器:

 文本:纯文本信息,   ASCII text:  纯粹的,不加修饰的文字

 文本编辑种类:

   行编辑器;sed

   全屏编辑器:nano,v,vim

     vi:VIsual interface

     vim:VI Improved

      gedit 一个简单的图形编辑器
      gvim 一个Vim编辑器的图形版本

     


vim基础使用


vim:

  模式化编辑器

  基本模式:

   编辑模式,命令模式

   输入模式:

   末行模式

     内置的命令行接口:

vim基础使用:

 打开文件:

   #vim [options] file… 

     如果事先准备的文件路径不存在,那么事先创建此文件,把编辑的内容保留在文件中,

     如果文件存在,则打开此文件,默认光标停留在文件的第一行的行首 

     +#:打开文件后,直接让光标处于第#行的行首

     +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行首;

     -d file1 file2 : 比较两个文件的不同:

     -b file :二进制方式打开文件

     -m file : 只读方式打开文件

     -e file: 直接进入ex模式

 关闭文件:

   编辑模式:

    ZZ:编辑模式下,保存并退出

     ZQ:不保存退出

    末行模式:

    :q 退出 

    :q!强制退出,不保存此前的编辑操作

    ;wq 保存退出     

     😡 保存退出(尽量别用)

     :w /PATH/TO/FILE   另存为  到某个路径 

  模式转换:

   三种模式: 编辑(命令) ,输入(编辑), 末行(扩展命令)  编辑模式: 默认模式 

   

   编辑模式–>输入模式:

      i: insert   光标所在处输入

      a:append 在光标所在处的后方输入

      o: 在光标所在处的下方打开新行,光标处于行首

      I:在光标所在行的行首输入

      A:在光标所在行的行尾输入

      O:在光标所现在处的上方输入

   输入模式—>编辑模式

      ESC 键

   编辑模式–>末行模式:                `            

      使用冒号 :

   末行模式—>编辑模式:

      两次 ESC 

   锁定和解锁:

     Ctrl +s  Ctrl+q

                                  

 


编辑模式命令:


光标跳转:

   字符跳转:

    h:左 l:右 j:上 k:下

    # command :命令前加数字,指定跳转的字符数

   单词跳转:

     w:下个单词的词首

     e:当前或后一个单词的词尾

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

      # command:  跳转有#指定的个数的单词                      

   行尾行首

     ^:跳转至行首的第一个非空白字符

     0:跳转至行首

     $:跳转至行首

   行间

     #G 跳转至#指定的行;

      1G ,gg:跳转至第一行

     G:跳转最后一行

   句间

      )  下一句

      (  上一句

      #   

   段间

     { 上一段

     } 下一段


翻屏操作:

  Ctrl+f:向尾翻一屏

  Ctrl+b:向首反一屏

  Ctrl+d:向尾反半屏

  Ctrl+u:向首反半屏

  enter:按行向后翻

字符编辑:

    : 删除光标所在处字符

    #x:删除光标所在处起始的#个字符

    xp:交换光标所在处的字符与其后面的字符的位置

替换命令:

    r  :替换光标所在处的字符   r + 字符

删除命令:

    d:删除命令,可结合光标跳转字符,实现范围删除

    d$:删除当前光标所在处到行尾的内容

    d^:删到非空行首

    d0:删到行首  

    # dw   删单词

    # de   

    # db 

    # command:

    #dd:删除光标所在整行 支持加数字  删除内容不会被清除,保留在缓冲区,最后一个可以粘贴 

    

粘贴命令:

    p :缓冲区的内容如果为整行,则粘贴在当前光标所在行的下方,否则,粘贴至当前光标所在的后方;

    P:  缓冲区的内容如果为整行,则粘贴在当前光标所在行的上,否则,粘贴至当前光标所在的前方;

    

复制命令:

    y:复制,工作行为相似与d命令

    ,y$:复制光标到行尾

    y^:复制光标到行首

    y0:      

    # command 

    #yy:复制整行  配合p使用

改变命令:

    编辑模式—–>输入模式:

     实现删除操作;        cc删除整行,在光标处转换为输入模式,

     #cc

可视化模式: 

    v按字符选定:

    V: 按行选定

    结合编辑命令使用,d,c,y,p     


撤销操作:

 u:撤销此前的操作    默认50个,保存在缓冲区,可被撤销.

 #u:撤销此前的#条操作.

 U:撤销光标落在这行的操作恢复到初始化

 crtl+r: 恢复此前的撤销操作 重做

 重复执行前一个操作:点号 .    配合数字,#次重复


寄存器操作:

    有26个命名寄存器和1个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享。
    未指定,将使用无命名寄存器

     有10个数字寄存器,用0, 1, …, 9表示, 0存放最近复制内容, 1存放最近删除内容。

    当新的文本变更和删除时, 1转存到2, 2转存到3,以此类推。

    数字寄存器不能在不同会话间共享。

                                                  

vim自带练习教程:  vimtutor 命令

blob.png


末行模式命令:

vim有内建命令行接口,可以使用命令控制编辑器,运用命令的方式完成众多功能;

(1)地址定界;

   指明 start_post[enq_pos]

   .:当前行   

   $:最后一行

   #:特定的第#行,例如5及第5行

   #,#:指定行范围,左侧围起始行,右侧围结束行,右侧大于左侧

   #,+#:指定航范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量;例如:3+7 从第三行后加7行 一共八行

   .,$-1:当前行到倒数第二行

   1,$:全文    

   %:全文

   /pattern/:光标所在位起始向文件尾部第一个被模式所匹配到的行;

   /first/,$: 第一个被模式所匹配到的行,到最后;

   /patt1/,/patt2/:从光标所在处起始,第一个所由pat1匹配到的行开始,到第一次由pat2匹配到的行结束之所匹配到的所有行

                

   可同编辑命令一同使用,实现编辑操作:

  d:删除

  y:粘贴

  c:改变

  w /PATH/TO/SOMEFILE:将范围内的文本保存至指定的文本中;

  r /PATH/TO/SOMEFILE: 将范围的文件中的文本读取并插入到指定位置;

  !COMMAND:末行模式下执行其他命令

  R!COMMAND: 末行模式下执行命令,并把结果保存在文件中

            

(2) 查找

   /PATTERN:从当前光标所在处向文件尾部查找能够被当前模式匹配到的的所有字符串

   ?PATTERN:从当前光标所在处向文件首部查找能够被当前模式匹配到的的所有字符串

   配合按键实现结果翻看:    

     n:下一个,与命令方向相同

     N:上一个,与命令方向相反

            

(3)查找并替换

   s:末行模式的命令,按使用格式:

      s/要查找的内容/替换的为内容/修饰符

      要查找的内容:可使用正则表达式

      要替换的内容:不能使用正则表达式,但可以引用

      如果"要查找的内容"部分在模式中使用分组符号,在"替换为的内容"中使用后向引用

      直接引用查找模式匹配到的全部文本

   修饰符:

    i:查找时忽略大小写

    g:全局替换,意味着一行中如果 匹配到多次,则均替换;

    可那分隔符替换为其他非常用字符:

       s@@@  ,s###

    实例:

       %s@\<t\([[:alpha:]]\+\)\>@T\1@g                                    
       %s@\<t[[:alpha:]]\+\>@&er@g

    


多文件功能:


vim支持对多文件同时编辑的功能,更加提高运维人员的工作效率;


命令格式

  vim [Options]  file1 file2…

  

   大文件间切换(末行模式):

     :next 下一个

     :prev 上一个

     :first 第一个

     :last 最后一个

   退出所有文件(末行模式):

      :wqall 保存所有文件并退出

      :wall 保存所有文件

      :qall:直接退出所有文件

   多窗口:

      -o:水平分割窗口

        blob.png

      -O:垂直分割窗口

         blob.png

   窗口键切换:Ctrl+w,ARROW

     注:单个文件也可以分割为多个窗口进行查看

     Ctrl+w,s :水平分割窗口

     Ctrl+w,v:垂直分割窗口

     Ctrl w +q:取消相邻窗口

      Ctrl+w+o;取消全部窗口


                                                                     

 


定制vim的工作特性:


每人的使用习惯方式不同,我们可以对vim编辑器进行DIY,根据自己的需要,设定vim的参数;

   注意:设定在末行模式下的设定,仅对当前vim进程有效

   永久有效(修改配置文件):

     全局:/etc/vimrv

     用户:~/.vimrc

1,行号:

   显示:set number.简写为:set nu

   取消:set nonumber 简写为set nonu

2.括号匹配高亮

   匹配: set showmatch,set sm

   取消:set nosm

3缩进

   匹配: set ai

   取消: set noai

4搜索高亮

   显示: set hlsearch

   取消; set hlsearch

5.语法高亮:

   显示:syntax on

    取消 syntax off 

6.忽略字符带小写

   忽略:set lc

   取消:set nolc

7.获取帮助:

   :help    

   :help subject

8.文本格式: 

   windowd文本:set fileformat=dos

   linux文本: set fileformat=unix

9.文本宽度:

   左侧距宽: set textwidth=65

   右侧距宽:  set wrapmargin=15

    


练习:

1.复制/erc/grub2.cfg文件至/tmp目录中,用查找替换命令删除/tmp/grub1.cfg文件中以空白字符开头的行的行首的空白字符                       

:%s@^[[:space:]]\+@@

2.复制/etc/rc.d/init.d/functions文件至/tmp目录中,用替换查找命令为/tmp/functions文件中的每个空白字符开头的行的行首加上#

:$s@^[[:space:]]\+[^[:space:]]@#&@g


3.将/etc/yum.repos.d/Centos-Base.repo中文件所有的enabled=0替换成enable=1,所有gpgcheck=0 

:%s@\(enabled\|gpgcheck\)=0@\1=1@g

4,为/tmp/grub2.cfg文件的前三行的行首加上#号;

     :1,3 s@^@#&@

 


课外作业:

   1、如何设置tab缩进为4个字符?

   [root@wen-7 ~]# cat  .vimrc     (编辑vim的局部配置文件)
    set ts=4
    set expandtab

   2、复制/etc/rc.d/init.d/functions文件至/tmp目录;替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;

    [root@wen-7 ~]# cp /etc/rc.d/init.d/functions /tmp    
    [root@wen-7 ~]# vim /tmp/functions 
    :%s@/etc/sysconfig/init@/var/log@

   3、删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号;   

   [root@wen-7 ~]# vim /tmp/functions 
    :%s@^#[[:space:]]\+@@


                

            

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