文本全屏编辑器 vim

         vim在Linux中站着很重要的位置,是每一个学习Linux人员的必须掌握的技能之一,因为vim功能很强大为我们编辑文件和脚本带来了很大的方便。接下来我们来一起了解vim的功能。

 

文本编辑种类:
     行编辑器: sed
     全屏编辑器:nano, vi,vim – Vi Improved
     其他编辑器:
         gedit :一个简单的图形编辑器
         gvim:一个 Vim 编辑器的图形版本

 

 

vi: Visual Interface ,文本编辑器
vim 是 vi 的升级版,vim不仅包含了 vi 的全部功能,而且 vim 还增加了颜色功能,这样更容易编写和查找。

 

一,使用 vim打开文件:
# vim  [OPTION]… FILE…

      vim –b file  二进制方式打开文件
      vim –d file1 file2… 比较多个文件
      vim -m file 只读打开文件

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

vim 指定某行的行首.PNG

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

vim 指定某个单词的行首.PNG

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

vim 指定文件最后一行行首.PNG

 

 

 

二,使用vim打开文件后

vim分为三个模式,分别是命令模式,编辑模式,扩展模式。
       命令模式(默认):移动光标,剪切/ 粘贴文本
       编辑模式:修改文本
       扩展命令模式 :保存,退出等

击键行为是依赖于 vim的“模式”

Esc键 退出当前模式,总是返回到命令模式。

锁定和解锁:CTRL+s,Ctrl+q(所有模式都可以用)三个模式转换.PNG

 

命令模式:

命令模式.PNG

命令模式光标跳转:
字符间跳转:
      h: 左   l: 右  j: 下  k: 上
      #COMMAND :跳转由# 指定的个数的字符;
单词间跳转:
      w :下一个单词的词首
      e :当前或下一单词的词尾
      b :当前或前一个单词的词首
      #COMMAND :由# 指定一次跳转的单词数
当前页跳转:
     H(head):页首   M(middle):页中间行   L(low): 页底
行首行尾跳转:
     ^:  跳转至行首的第一个非空白字符;
     0:  跳转至行首
     $:  跳转至行尾
行间移动:
     #G:跳转至由# (行数)指定行(扩展模式下输入一个数字就是多少行)

扩展模式下输入一个数字就是多少行.PNG    

      G :整个文件的最后一行
     1G, gg:  第一行
句间移动:
       ) :下一句    ( :上一句
段落间移动:
       }: 下一段       { :上一段

命令模式翻屏操作
       Ctrl+f:  向文件尾部翻一屏
       Ctrl+b:  向文件首部翻一屏
       Ctrl+d:  向文件尾部翻半屏
       Ctrl+u:  向文件首部翻半屏
命令模式操作:
字符编辑:
       x:  删除光标处的字符;
       #x:  删除光标处起始的# 个字符(只能删光标所在的一行)
       xp:  交换光标所在处的字符及其后面字符的位置
       ~: 转换大小写
替换命令(r, replace)
        r:  替换光标所在处的字符
        R: 切换成REPLACE下(exc回到命令模式)
删除命令:
        d:  删除命令,可结合光标跳转字符,实现范围删除;
        d$:  删除到行尾
        d^: 删除到非空行首
        d0: 删除到行首
        dw: 删除单词
        #COMMAND
        dd:  删除光标所在的行
        #dd :多行删除
        D: : 从 当前光标位置一直 删除到行尾 ,留空行,等同于d$
复制命令(y, yank): :
         y:  复制,行为相似于d 命令
         y$: 复制到行尾
         y^: 复制到行首
         y0:复制到行首
         yw: 复制单词
         yy :复制行
         #yy:  复制多行
         Y(大): 复制整行
粘贴命令(p, paste): :
       p(小):缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
       P(大) :缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
改变命令(c, change)
      c:  修改后切换成插入模式
      cc :删除当前行并输入新内容
      C(大):删除当前光标到行尾,并切换成插入模式
<start position><command><end position>
      Command:
            y  复制、d  删除、gU  变大写、gu  变小写
      例如 0y$  命令意味着:
            0 → →  先到行头
            y → →  从这里开始拷贝
            $ → →  拷贝到本行最后一个字符
                     ye  从当前位置拷贝到本单词的最后一个字
撤消更改
        u 撤销最近的更改
        #u 撤销之前多次更改
       U  撤消光标落在这行后所有此行的更改
       按Ctrl – r 重做最后的“撤消”更改
       .  重复前一个操作
      n. 重复前一个操作n次
关闭文件
   ZZ:保存退出
   ZQ:不保存退出

 

 

编辑模式:编辑模式.png      i: insert,  在光标所在处输入
      I:在当前光标所在行的行首 输入
      a: append,  在光标所在处后面输入
      A :在当前光标所在行的行尾 输入
      o:  在当前光标所在行的下方打开一个新行
      O:在当前光标所在行的上方打开一个新行

 

扩展模式:

扩展模式.PNG命令:
    r filename  读文件内容到当前文件中
    w filename 将当前文件内容写入另一个文件(也可以在编辑时保存一部分继续编辑)
    !command : 不退出 vim 也可以执行命令

不退出 vim 也可以执行命令.PNG    r!command  : 不退出vim,把后面命令的标准输出读入到当前文件。
不退出vim,把后面命令的标准输出读入到当前文件.PNG   
地址定界
       :start_pos,end_pos
      #:  具体第# 行,例如2 表示第2 行;
      #,#:  从左侧# 表示行起始,到右侧# 表示行结尾
      #,+#:  从左侧# 表示的行起始,加上右侧# 表示的行数
       如:2,+3 表示2 到5行
       .:  当前行
       $:  最后一行
             .,$-1  当前行到倒数第二行
        % :全文,  相当于1,$
         /pat1/,/pat2/
        从第一次被pat1 模式匹配到的行开始,一直到第一次被pat2 匹配到的行结束
        #,/pat/
        /pat/,$
       使用方式:后跟一个编辑命令
           w file:  将范围内的行另存至指定文件中
            r file :在指定位置插入指定文件中的所有内容
查找
      /PATTERN :从当前光标所在处向文件尾部查找
     ?PATTERN :从当前光标所在处向文件首部查找
     n :与命令同方向
     N :与命令反方向
     s:  在扩展模式下完成查找替换操作
            格式:s/ 要查找的内容/ 替换为的内容/ 修饰符
            要查找的内容:可使用模式
            替换为的内容:不能使用模式,但可以使用\1, \2, …等后向引用符号;还可以使用“&” 引用前面查找时查找到的整个内容
     修饰符:
           i:  忽略大小写
           g:  全局替换;默认情况下,每一行只替换第一次出现
           gc: 全局替换,每次替换前询问
查找替换中的分隔符/ 可替换为其它字符,例如
          s@/etc@/var@g
          s#/boot#/#i
关闭文件
    :q  退出(没有修改过的文件)
    :q!  强制退出,丢弃做出的修改
    :wq  保存退出 
    :x  保存退出(一般不常用)    

 编辑二进制文件 
    以二进制方式打开文件
           vim –b binaryfile
    扩展命令模式下,利用xxd 命令转换为可读的十六进制
           :%!xxd
   编辑二进制文件
   扩展命令模式下,利用xxd 命令转换回二进制
          :%!xxd –r
   保存退出

 

 

三,vim 的寄存器
      有26 个命名寄存器和1 个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享。
      用a ,b,…,z 表示, 用“ 寄存器表示,放在数字和命令之间
              如:3"tyy  表示复制3 行到t 寄存器中
             "tp 表示将t 寄存器内容粘贴
       未指定,将使用无命名寄存器
       有10 个数字寄存器,用0 ,1 ,… ,9 表示,0 存放最近复制内容,1 存放最近删除内容。当新的文本变更和删除时,1 转存到2 ,2 转存到3 ,以此类推。数字寄存器不能在不同会话间共享。

四,可视化模式
  允许选择的文本块
       v 面向字符
       V面向行
       ctrl-v  面向块
可视化键可用于与移动键结合使用:
       w , ) )  ,},箭头等
突出显示的文字可以被删除,复制,变更,过滤,搜索 / 替换等

多文件模式
 vim FILE1 FILE2 FILE3 …(编辑过的文件必须保存过才能切换其他文件)
      :next  下一个
      :prev  前一个
      :first  第一个
      :last  最后一个
      :wall  保存所有
      :qall  退出所有
      :wqall

使用多个“窗口”
    多文件分割
          vim -o|-O FILE1 FILE2 …
          -o:  水平分割
          -O:  垂直分割
          在窗口间切换: Ctrl+w(按上下键切换v), Arrow
单文件窗口分割:
      Ctrl+w,s: split,  水平分割
      Ctrl+w,v: vertical,  垂直分割
       ctrl+w,q :取消相邻窗口
       ctrl+w,o: 取消全部窗口
      : wqall 退出

五,定制vim 的工作特性
     配置文件:永久有效
          全局:/etc/vimrc
           个人:~/.vimrc
     扩展模式:当前vim 进程有效
     (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 nohlsearch
      (5)  语法高亮
             启用:syntax on
             禁用:syntax off
      (6)  忽略字符的大小写
             启用:set ic
             不忽略:set noic
      (7)  文件格式
             启用:fileformat=unix
             不忽略: fileformat=dos
      (8)  设置文本宽度
              :set textwidth=65 (vim only)(从左算起65个字符换行)
              :set wrapmargin=15(从右算起15个字符换行)
       :help option-list
       :set or :set all
vi/vim 内置帮助
       :help (在 vim 内就可以查看)
       :help topic
       Use :q to exit help
Vimtutor (不是只读的,也可以修改,不过关闭后再开,你修改的会自动消失)

 

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

(0)
上一篇 2016-08-15 09:24
下一篇 2016-08-15 09:24

相关推荐

  • shell编程之循环及函数

    for 循环 for 变量名 in 列表;do    循环体 done   执行机制: 依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中 的元素耗尽,循环结束   列表生成方式: (1)直接给出列表 (2)整数列表: (a) {start..end} (b) $(seq [start [s…

    Linux干货 2016-08-24
  • 到处都是Unix的胎记

    一说起Unix编程,不必多说,最著名的系统调用就是fork,pipe,exec,kill或是socket了(fork(2),execve(2), pipe(2), socketpair(2), select(2), kill(2), sigaction(2))这些系统调用都像是Unix编程的胎记或签名一样,表…

    Linux干货 2015-04-03
  • 第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限  cp -r /etc/skel  /home/tuser1   chmod 700 /home/tuser1 2、编辑/etc/gro…

    Linux干货 2016-12-27
  • 第三周

    第三周 1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@node1 ~]# who -q | sed -n ‘1p’ centos root fedora redhat mint 2.取出最后登录到当前系统的用户的相关信息。 [root@node1 ~]# who -a | tail -1 mint +…

    Linux干货 2017-07-25
  • 基本脚本编译

                                  …

    2017-08-05
  • 网络班N22期第三周博客作业

    一、列出当前系统所有已经登录的用户名,且同一个用户登录多次只显示一次 [root@bogon ~]# w  15:17:44 up 15:28,  2 users,  load average: 0.00, 0.00, …

    Linux干货 2016-08-29