关于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! 强制保存退出 
                :x  
保存退出
                :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

(0)
小马哥小马哥
上一篇 2016-08-11
下一篇 2016-08-11

相关推荐

  • C语言的整型溢出问题

    整型溢出有点老生常谈了,bla, bla, bla… 但似乎没有引起多少人的重视。整型溢出会有可能导致缓冲区溢出,缓冲区溢出会导致各种黑客攻击,比如最近OpenSSL的heartbleed事件,就是一个buffer overread的事件。在这里写下这篇文章,希望大家都了解一下整型溢出,编译器的行为,以及如何防范,以写出更安全的代码。 什么是整型溢出 C语言…

    Linux干货 2016-06-03
  • 软链接与硬链接的分析

    Linux引用硬链接与软链接,是为了实现文件的共享,更有隐藏文件路径、增加权限安全及节省存储等的好处。很多新手不知道软链接与硬链接的区别,今天大家一起总结它们的区别吧^_^ 一,硬链接 硬链接的特性可以体现出什么是硬链接: 通过索引节点来进行链接,文件要有相同的inode及data block 不允许跨分区创建 只有在同一文件系统中的文件之间才可以,不能交叉…

    2017-07-22
  • 基于ssl协议和openssl工具建立私有CA

    前言     要自建CA需先了解openssl工具和ssl协议还有各加密类型     ssl(Secure Socket Layer)安全套接字层当前版本为3.0,浏览器与Web服务器之间的身份认证和加密数据传输,它工作在传输层和各应用层之间,用户可以选择是否使用ssl进行传输,选择ssl协议将调用…

    Linux干货 2015-05-07
  • 浅析linux软、硬链接

    软链接 硬链接 不同点 创建时会占用新的inode号, 不会占用 可以跨分区 不可以跨分区 与源文件是两个不同的文件,不会增加文件链接数 与源文件数据相同,会增加文件链接数 依赖于链接的文件名,当删除或移动源文件后,连接可能失效 不依赖于源文件名,删除或移动源文件后,硬链接依然使用 对文件,目录都可以执行链接操作 只能对文件执行链接操作 大小为指向源文件路径…

    Linux干货 2016-12-05
  • 常见的单机虚拟网络类型

    前言:   无论是互联网还是物联网,他们的网络模型都是可以见的,而虚拟化和云计算中的网络模型 要比这些模型要复杂的多,有些设备你是可以到也有一些设备你是看不到的,这给我们运维人员带来的技术挑战。通过学习Xen、KVM虚拟化技术,对单机虚拟网络模型有了初步的认识,以下是我对单机虚拟网络模型的认识。 一、NAT模型    …

    Linux干货 2015-09-01
  • PXE自动化安装系统

    PXE自动化安装的流程: 开机自检 > 加载ROM中的bios代码 > 检查设备启动顺序,由于PXE自动安装是基于网卡作引导的,所以,会选择网卡 > 网卡中会有PXE的模块,从dhcp服务器获取ip地址 掩码 网关 dns 重要的是tftp服务器的地址 从tftp服务器需要获取的bootloder的文件名的信息 > 从tftp中加载p…

    Linux干货 2015-08-11