关于VIM编辑器

                                                            vim编辑器
             vi 是一种文本编辑器,所谓文本数据是基于字符编码的文件,常见的编码有ASCII编码,

UNICODE编码等

文本编辑种类分为:
               
行编辑器:所谓航编辑器就是至一行一行来编辑处理的工具,比如sed
                全屏编辑器:编辑空间占据整个屏幕,比如 nano ,vi

                vim 就相当于vi的增强版,vim是模式化的编辑             
vim
在工作过程中有三种模式:
                1命令模式(默认状态)也叫做编辑模式 :可以进行移动光标,
剪切/粘贴复制文本内容
                2输入模式(插入编辑)在文本文件当中进行输入内容;
               
3扩展命令模式(末行模式) vim内置的命令行接口 ,执行vim 的内置命令 ;

                                                                                                                输入
保存退出等命令
                Esc 键 退出当前所在模式,可以从输入模式转换到编辑模式
               

vim 的使用:
    vim [选项] file
    +#  打开文件后,直接让光标处于第#行的行首    

                       例如 ~]# vim +5 f1 命令 打开进入编辑模式光标处于第5行的行首    

                 
    +/pattern (正则表达式)
打开文件后,直接让光标处于第一个被pattern匹配到的行的行首 

                        例如 ~]# vim +/root f  匹配第一个root匹配到的字符的行的行首

    vim + file    直接打开file,光标在最后一行    

                        例如  ~]# vim + f1
    vim -b file   二进制方式打开文件
,处理二进制文本的时候用, 

                       例如 ~]# vim -b /bin/cat   后面跟的是二进制程序
    vim -d
file1 file2 比较多个文件   

                      例如 ~]# vim -d f1 f2  比较两个文件内容,不一样的地方会显示出来      
   
vim -m file   只读方式打开文件      

                      例如 ~]# vim -m f1  
如果对此文本进行修改保存,会提示不能用,打开方式为只读            
    vim -e file   或者使用ex file 
直接进入ex模式    扩展命令模式(ex) 这是文本命令执行模式

                        在命令终端 切换到此模式
   
   
注:如果该file存在,file被打开并显示其中内容; 如果该file不存在,

            当编辑后第一次存盘时创建该file
               
模式转换:
   
1,ESC键可以从插入编辑模式到命令模式
    2, 从命令模式到 插入编辑 可以使用以下命令
      i :
insert,在光标所在处进行输入内容编辑
      I :在当前所在光标所在行的行首输入内容编辑
      a :
append,在光标所在的字符后面输入内容编辑               
      A : 在当前光标所在行的行尾输入内容编辑         

      o : 在当前光标所在行的下方打开一个新行输入内容编辑         
      O
:在当钱光标所在行的上方打开一个新行输入内容编辑         
    3,插入编辑模式 > 到命令模式   可以使用ESC
   
4  命令模式 > 扩展模式(末行模式)  直接输入冒号:  即可在窗口的最下方显示冒号,文本内的命令行
    5  扩展模式 >
命令模式   ESC  
    6  插入编辑模式 > 命令模式 > 扩展模式    插入模式不能直接转换到扩展模式
   
锁定和解锁:
        Ctrl+s  锁定编辑界面不能进行其它操作不能ESC,输出界面不给任何反应       
       
Ctrl+q  解锁编辑界面可以看到锁定时,对键盘输入的某些字符       

关闭和退出文本:           
       扩展模式:(末行模式)        
      
按‘:’进如文本内的命令行扩展模式;处于底部的屏幕最左侧
                :q   退出
                :q! 
强制退出     不存盘退出,即使更改都将丢失
                :wq  保存退出    
写入内容并保存退出
                :wq! 强制保存退出 
                😡  
保存退出
                :w   写(存)磁盘文件      w /root f2 
可以将文件内容写入另一个文件中
                :r   可以读取别的文件到当前光标所在处 例如 在扩展模式下操作 :r
/etc/issue  
                :!   command 可以不用退出当前处理的文本,可进行别的命令操作    例如
:!ifconfig   查看过后按回车又回到当前处理的文本中,非常方便快捷
                :r!  command
可以使用r!将命令执行结果读取到正在处理的文本当中  例如 :r!ifconfig  将执行结果,读取添加到当前文本所在光标的下面
      
命令模式:
               保存退出的快捷键:
                ZZ  
保存退出
                ZQ   不保存退出   

命令模式光标跳转:
        字符之间移动跳转:
                h   左 ←
               
l   右 →
                j   下 ↓
                k   上 ↑
               
#h,l,j,k #代表数字        
                还可以自定义指定跳转指定的个数的行;比如我想从当前光标往右移动10个 
用键盘输入10l 
               
注意,这时候的输入是不显示出来了,把字符输入成功后观察光标是否移动,其它的我就不举例了
        
单词之间移动跳转:
                w   下一个单词的词首
                e  
当前或下一个单词的词尾
                b   当前或前一个单词的词首
                #w,e,b 
#代表数字   
                单词之间也支持自定义跳转移动;比如我想从当前所在光标跳转到距离有10个单词的词首。用键盘输入10w
此时光标就会移动到此
         当前页面跳转:      
                H  
页首
                M   页中间的行
                L   页底
        
行首行尾跳转:
                ^    跳转至行首的第一个非空白字符  
                0   
跳转至绝对行首   包括空白符
                $    跳转至绝对行尾
        
行之间移动跳转:
                G    最后一行
                #G   #为数字比如我输入10# 
这时候光标会在文本的第10行处; 在扩展模式下可以:10 这样也行,一个概念       
                1G  
跳转光标到第一行所在 ,跟小写gg 一样使用
               
         句子间移动:     

                (    上一句
                 )   下一句
        
段落之间移动:
                {    上一段
                 }   下一段
        
翻屏操作快捷键:
                Ctrl+f   向文件尾部翻一屏       
               
Ctrl+b   向文件首部翻一屏
                Ctrl+d   向文件尾部翻半屏
               
Ctrl+u   向文件首部翻半屏
命令模式操作:
         字符编辑:
                 x   
删除所在光标处的字符        
                 #x   删除所在光标起始的#个字符
#表示数字
                 xp   交换光标所在处的字符以及其后面字符的位置
                 ~   
转换大小写内容
         替换命令:
                 r   替换光标所在处的字符  比如按下r键后输入数字5
原先的内容就会被替换掉
                 R   切换到替换的模式   可以直接输入内容将原先的内容给替换掉
        
删除命令:
                 d   删除命令,可结合光标跳转字符,实现范围删除 
                 d$ 
删除到行尾
                 d^  删除到非空行首
                 d0 
删除到行首
                 dw  删除下一个单词的词首                      

                 de  删除当前或下一个单词的词尾
                 db 
删除当前或前一个单词的词首
                 #command #代表数字  使用举例 10dw 10de
….
                 dd  删除当前光标所在行
                 #dd 多行删除    例如
10dd
                 D   从当前光标位置一直删除到行尾,会留下空行,同等与d$一样的概念
         
复制命令:
                 y  复制,整行的复制 ,可以结合光标跳转字符使用,复制跳转范围内的字符       

                 y$ 复制当前所在光标处之后的行内容
                 y0
复制当前所在光标处之前到非空白行首的内容
                 y^
复制当前所在光标处之间到行首的内容不包括空白行
                 ye
复制当前所在光标处在词首的位置,复制其整个单词;如果光标处在词尾,则复制下一个单词的内容
                 yw
复制当前所在光标处以词首开头的位置复制整个单词内容;如果光标在词尾,则复制单词尾的单个字符内容
                 yb
复制当前所在光标之前的单词
                 yy 复制行内容
                 #yy #为数字  可以复制多行
例如10yy  复制10行内容,可以配合 上面的命令进行操作
          粘贴命令:
                 p 
缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
                 p 
缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
         
修改命令:
                 c 修改后切换到插入模式进行修改
                
c$
                 c^
                 c0
                
cb
                 ce
                 cw
                 #command
#为数字,例如 10cb 10ce
                 cc 删除当前行并输入新内容
                 #cc 
#为数字, 删出当前光标所在处一下的行, 比如删除当前光标之下的10行   就输入10cc
                 C  
删除当前光标到行尾,并且换成插入模式
命令模式撤销更改:
              u   
撤销最近的的更改,在此之前的操作
              #u   撤销之间多级的更改  #为数字
              U   
撤销光标落在这行后所有此行的更改
              .    重复前一个操作
              n.  
重复前一个操作n次
              Cert+r 重做最后一次撤销的更改

扩展模式地址定界:
                 #  表示第几行,例如5表示第5行
                 #,#
表示从左侧#表示行起始,到右侧#表示行结尾      例如 从第1,5行,直接跳转到第1行和第5行                        

                 #+# 从左侧#表示的行起始,加上右侧#表示的行数    两个数字相加 ,例如5+5行

                 .   当前行
                 $   最后一行  还可以 $-5  
表示当前行到倒数第5行
                 %   全文,相当于1,$
                
/pat1/,/pat2/  从第一次呗pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
                
#,/pat/      从第#行开始到第一次匹配到第一次匹配到pat为止  例如3,/^r/  第三行开头为r的字符
                
/pat/,$       从第一次匹配到pat到最后一行
                 使用方式:后面可以跟一个编辑命令 比如,c,d,y
c进行修改,d进行删除,y进行复制 可以直接附加在地址范围后使用
                 w /dir/file  
将范围内的行另存至指定文件中去
                 r file       在指定位置插入指定文件中的所有内容  

扩展模式查找:
            /pat     从当前光标所在出向文件尾部查找
            ?pat    
从当前光标所在出向文件首部查找
            n        与命令同方向查找
            N       
与命令反方向查找
扩展模式查找并且替换:
            s 在扩展模式下完成查找替换操作
            格式为:
s/要查找的内容/替换为的内容/修饰符
            要查找的内容:可使用增则表达式,
           
替换为的内容:不能使用模式,仅能使用分组引用比如\1,\2..等后向引用符号,还可以使用&引用前面查找时查找到的整个内容
           
修饰符:
                 i  忽略大小写
                 g 
全局替换;默认情况下,每一行只替换第一次出现的内容
                 gc 全局替换,每次替换前询问
           
查找替换中的分隔符/可替换为其他的字符 例如 s@@@gi #s###gi 等
练习
1 复制/etc/profile 至
/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符           
~]# cp /etc/profile
/tmp/   vim /tmp/profile     扩展模式  :%s@^[[:space:]]\{1,\}@@g   

2 复制
/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号
~]#
cp /etc/rc.d/init.d/functions /tmp/     
:%s@^[[:space:]]\{1,\}.*@#&@        
           
           

           
   关于vim的寄存器           

有26个命名寄存器和1个无名名寄存器,经常存放不同的剪贴板内容,可以不同会话之间进行共享使用         

这26个命名寄存器分别用26为英文字母表示, 用"寄存器表示,放在数字和命令之间
例如  5"wyy   表示复制5行内容到w寄存器中   
"wp 
表示将w寄存器内容粘贴
如果未指定的话,将默认使用无命名的寄存器
另外还有10个数字寄存器,用0-9表示,0存放最近复制内容,1存放最近伤处内容,当新的文本变更和删除的时候,1将转存到2,2转存到3,以此类推。
数字寄存器不能在不同会话之间共享。        

           
           
  处理编辑二进制文件
 以二进制方式打开文件
  vim -b
二进制文件
  扩展命令模式下,利用xxd命令转换为可读的十六进制   例如 %!xxd
                  转换回二进制   
%!xxd -r         
           
vim 可视化模式
    v   光标走过的字符
    V  
光标走过的行        
    Ctrl+v 可视块       
    可以结合编辑命令,d,c,y 
还可以结合移动键等          
    突出显示的文字可以被删除,复制,变更,过滤,搜索,替换等操作。          

           
vim 多文件模式
           vim file1 file2 file3
          
在扩展模式下输入
           next       下一个
           prev       前一个
          
first      第一个
           last       最后一个
           wall      
保存所有
           qall       退出所有
           wqall      保存所有     

           
vim 多窗口模式
           多文件分割:
            vim -o file1
file2
            -o     水平分割显示窗口     
            -O    
垂直分割显示窗口
            在窗口之间进行切换操作:Ctrl+w ,Arrow
           
单文件窗口分割:
            Ctrl+w s     单个文件水平分割
            Ctrl+w v    
垂直分割
            Ctrl+w q     取消相邻窗口      
            Ctrl+w o    
取消全部窗口
            :wqall       退出
           
注意:快捷键使用是不会显示的,按过快捷键后跟字母选项,就能达到效果 
定制vim的工作特性
        
配置文件:永久有效
          全局  /etc/vimrc
          个人  ~/.vimrc
         

    扩展模式下窗口属性定义
         set nu   显示行号
         set nonu
取消显示
         set sm   显示括号匹配
         set nosm 取消括号匹配
         set
ai    启动自动缩进功能  
         set noai  取消自动缩进功能 
         set hlsearch
显示高亮搜索
         set nohlsearch 取消高亮搜索
         syntax no   启用语法高亮   

         syntax off  取消语法高亮
         set ic    忽略字符的大小写
         set
noic   不忽略字符的大小写
         fileformat=unix    启用文件格式
        
fileformat=dos     不忽略
         set textwidth=65   设置文本宽度
         set
wrapmargin=15  设置文本宽度

VI.VIM键盘图.png

 

练习
1 如何设置tab缩进为4个字符

1、 vim /etc/vimrc
        set ts=4 
  
2
复制/etc/rc.d/init.d/functions 文件至 /tmp目录
;替换/tmp/functions文件中的/etc/sysconfig/init为/var/log
 cp
/etc/rcd/init.d/finctions /tmp/             
%s@etc/sysconfig/init@/var/log@gi

 

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

                                                                 
 :%s@^#[[:space:]]\{1,\}.*@@

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