vim编辑器使用与详解



vim :vi improved


vi的模式:

         编辑模式:键盘操作通常被解析为编辑命令:
         输入模式:
         末行模式:vim的内置的命令行接口,执行vim内置命令

编辑模式-->输入模式

        i:当前光标处输入内容
        I:在当前光标所在行的行首
        a:在当前光标所在处的后面
        A:在当前光标所在行的行尾输入
        o:在光标所在行的下方新增一行空白行
        O:在光标所在行的上方新增一行空白行

        输入模式- -> 编辑模式
        ESC
        编辑模式- ->末行模式
        :
        末行模式- ->编辑模式
        ESC,ESC

vi命令的使用格式

         vim [options] /path/to/file
                 –d file1 file2… 比较多个文件
                 –b file 二进制方式打开文件
                +/PATTERN 让光标处于第一个被PATTERN匹配到的行的行首
                -m file 只读打开文件
                vim -e file 或 ex file 直接进入ex模式

退出:

     :q!强制退出,不保存并退出
     :wq 保存修改并退出
     :x,保存并退出
        w 写(存)磁盘文件
        wq 写入并退出
        x 写入并退出
        q 退出
        q! 不存盘退出,即使更改都将丢失
        r filename 读文件内容到当前文件中
        w filename 将当前文件内容写入另一个文件
        !command 执行命令
        r!command 读入命令的输出
     编辑模式:ZZ,保存退出,ZQ不保存退出

打开:

     多文件跳转
 :next 下一个
 :prev  上一个
 :first 第一个
 :last 最后一个
 :qall 退出所有的文件
 :wqall:修改并退出多个文件

分隔窗口打开多个文件

 -o:水平分隔
 ctrl+w,左右箭头
 -O:垂直分隔
 ctrl+W,上下箭头
 +num:打开文件后在第num号行首
 +:打开文件后在最后一行

光标移动:

单字符移动:
    h:左
    l:右
    j:下
    k:上
  可以和数字组合
单词间移动:
     w:调至下一个单词的词首
     b:当前或前一个的词首
 e:当前或下一个词的词尾
行内移动:
     0:绝对行首
     ^:第一个非空白字符
     $:绝对行尾
句子间移动:
     ):上一句
    (: 下一句
 段落间移动:
     }:上一段
     {:下一段
  行间移动:
     #G:第几行
     G:最后一行
    当前页跳转:
    H:页首 M:页中间行 L:页底
    zt:将光标所在当前行移到屏幕顶端
    zz:将光标所在当前行移到屏幕中间
    zb:将光标所在当前行移到屏幕底端
  编辑操作:
     x:删除光标所在处的字符
     #x:删除光标所在处向后的#个字符

    替换命令(r, replace)
    r 替换光标所在处的字符
    R 切换成REPLACE模式

  d:删除命令
  结果光标跳转命令使用
  %:全部
  dd:删除一行
  #dd:删除所在行后的#行

    字符编辑:
    x 删除光标处的字符
    #x 删除光标处起始的#个字符
    xp 交换光标所在处的字符及其后面字符的位置
    ~ 转换大小写
    J 删除当前行后的换行符

di" 光标在冒号之间,则删除冒号之间的内容

yi(  光标在()之间,则复制()之间的内容
vi[  光标在[]之间,则选中[]之间的内容
dtx  删除字符直到遇见光标之后的第一个 x 字符
ytx  复制字符直到遇见光标之后的第一个 x 字符

末行模式:范围定界

  start,end:可以使用绝对定界,也可以使用相对定界
   .:表示当前行
   $:最后一行
   $-2:倒数第3行
   /pat1/,/pat2/:起始处为光标所在行
    c:修改后切换成插入模式
  跟d一样操作
    y:yank,复制
   跟d一样操作
    p:paste 粘贴
  复制或删除的是整行
    p:当前行的下一行
    P:当前行的上一行
  复制或删除的为非整行
    p:粘贴在光标所在字符的后面
    P: 粘贴在光标所在字符的前面
 撤销编辑
  u:undo
  #u:最近50次操作
 撤销此前的撤销操作
 ctrl+r:
 重复执行此前的命令:
  .
  翻屏:
    ctrl+f:向文件尾部翻一屏
    ctrl+b:向文件首部翻一屏
    ctrl+d:向文件尾部翻半屏
    ctrl+u:向文件首部翻半屏
    Enter:下一行
    k :上一行

  查找:
   /keyword
   ?keyword
   n:
   N:
   支持正则表达式
   :set nohlsearch 关闭高亮显示,对当前shell有效

vim的可视化模式

编辑模式:
 v:按照光标走过的区域选择
 V:选择矩形块
vim可视化模式:
 v: 按光标走过的区域选择
 V: 选择矩形块

打开多个文件,分窗口:

vim -o
vim -O
Ctrl+w, 上下箭头

分割当前窗口:

Ctrl+w, s 水平分割
Ctrl+w, v 垂直分割
Ctrl+w, q 关闭当前光标窗口
Ctrl+w, o 关闭所有窗口

窗口属性的定义:

:set nu
:set nonu

:set ai 自动缩进
:set noai

:set ic
:set noic

显示对应的括号
:set sm (show match)
:set nosm

语法高亮:
:syntax on
:syntax off

搜索高亮:
:set hlsearch
:set nohlsearch

vim的配置文件:

全局:/etc/vimrc
个人:~/.vimrc

查找替换:

:地址定界s/查找模式/替换为的内容/gi
g:全局替换
i:不区分大小写
:地址定界s@查找模式@替换为的内容@gi
&:用于在替换为的内容部分中引用前面匹配到的所有内容

练习:

1.复制/etc/grup.conf至/tmp目录,删除/tmp/grub.conf文件中行首的空白符
    :%s\^[[:space:]]\{1,\}\\g
2.复制/etc/rc.d/rc.sysinit至/tmp目录。将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行,行首加#号
    :%s@^[[:space:]]\{1,\}.*@#&@g
3.删除/tmp/rc.sysinit文件中以#开头且后面跟了至少一个空白字符的行的行首的#和空白符
    :1,%s@^#[[:space:]]\{1,\}@@g
4.为/tmp/grub。conf文件中的前三行的行首加#号
    :1,3s@^@#@g
5.将/etc/yum.repos.d/CentOS-Media.repo中enable=0一行最后的0改为1;
    :%@\(enabled=\)[0-9]@\11@g