文本编辑器分类:

    行编辑器:sed;

    全屏编辑器:nano、vi(visual interface)、vim(vi improved)

一、vim:文本编辑器:(支持ascii码、unicode码)

1、vim模式化编辑器:

vim模式分类:

    编辑模式:(命令模式);默认模式;

    输入模式:

    末行模式:内置的命令接口;


2、 vim [options] [file ..]

options

    +# :打开文件后,让光标处于第#行的行首,默认是第一行行首;

    +:打开文件,光标处于尾行

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


3、模式转换:

编辑模式转换为输入模式方法一:i键:insert,在光标所在处输入

编辑模式转换为输入模式方法二:a键:append,在光标所在处后方输入;

编辑模式转换为输入模式方法三:0键:在光标所在处下方打开一个新行;

编辑模式转换为输入模式方法四:I键:在光标所在处的行首输入;

编辑模式转换为输入模式方法五:A键:在光标所在处行尾输入;

编辑模式转换为输入模式方法六:O键:在光标所在处的上方打开一个新行;


输入模式装换为编辑模式方法一:ESC键:


编辑模式转换为末行模式方法一::键(冒号)


末行模式转换为编辑模式方法一:两次esc键


保存退出:

    ZZ:保存退出

    :wq :保存退出

    :q! :不保存退出

    :x 保存并退出;

    :w /path/to/somfile :另存为somfile文件;


4、光标跳转:

字符间跳转:

    h左跳一个字符、j向下跳转、k向上跳转、l向右跳转

    #h、#j、#k、#l:依次向相应方向跳转#个字符

单词间跳转:

    w、下一个单词的词首

    e、当前或后一个单词的词尾;

    b、当前或前一个单词的词首;

    #w、#e、#b:依次向相应方向跳转#个单词

行首行尾跳转:

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

    0:零;跳转至行首(绝对行首);

    $:跳转至行尾

行间跳转:

    G:跳转至行尾

    #G:跳转至第#行行首;

    1G或gg:跳转至第一行;

句间跳转:

    ):跳到下一句;

    (:跳到前一句;

    #(、#):跳转到相应方向#句

段间跳转:

    {:前一段落;

    }:后一段落;

    #}、#{:跳转至相应方向#段;


5、翻屏操作:

    ctrl+f:向文件尾部翻一屏;

    ctrl+b:向文件首部翻一屏;

    ctrl+d:向文件尾部翻半屏;

    ctrl+u:向文件首部翻半屏;

    enter:按行向后翻一行;


6、vim编辑命令:

字符编辑:

    x:删除光标所在处的字符;

    #x:删除光标所在处向后的#个字符

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

替换命令:replace

    r:替换光标所在处的字符,方法:输入r,后跟想要替换的字符;

删除命令:删除后会放在缓冲区,删除的东西可被用来粘贴。

    d:删除命令,可结合光标跳转命令,实现范围删除;如:d$,d^,dw,de,db,

    #d:删除#个单词,可结合光标跳转命令使用

    dd:删除一整行;

    #dd:删除#整行

粘贴命令(paste)

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

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

复制命令(yank):

    y:复制,工作行为类似于d命令;也可以结合光标跳转命令使用;

    yy:复制一整行;

    y$,y^,y0,yw,ye,yb,

    #yy:复制#行


改变命令:change,c,类似d命令

    可以实现删除操作时,同时转换为输入模式;

    c$,c^,c0,cw,ce,cb,cc,#cc


可视化模式:(用于区域选择)

    v:按字符选定;

     V:按行选定;

    集合编辑命令:d、c、y


撤销操作:undo

    u:撤销此前的操作;

    #u:撤销此前的#次操作;

    ctrl+r:恢复此前的撤销操作;


重复执行前一个编辑操作:(点号)

    .:点号


vim教程:vimtutor



7、vim末行模式:内建的命令行接口;

7.1、地址定界:

 :start_pos[,end_pos]

    #: 特定的第#行,如5就是第5行;

    #,N:指定行范围,左侧为起始行,右侧为结束行;

    #,+N:指定行范围,左侧为起始行,右侧为相对左侧行的偏移量,如,1,+5,表示从第一行开始加上5行

    .:表示当前行(点)

    $:最后一行

    %:表示全文,也可以用1,$来表示

    /PATTERN/:从光标所在处向文件尾部查找,第一次被模式匹配到的行,

    /PATTERN/,#:表示从光标所在处向文件尾部查找,第一匹配到的行,一直到第#行,参考#,N

    /PATTERN1/,/PATTERN2/:表示从光标处向尾部查找,第一次匹配/PATTERN1/到第一次匹配/PATTERN2/之间的所有行;


地址定界可同编辑命令一同使用,实现编辑操作:如:d、y、c

    格式:地址定界后紧跟操作命令,如#d,表示删除第#行

:w /PATH/TO/SOMEFILE:将范围内的文本保存到指定的文件中。

:r /PATH/FROM/SOMEFILE:将指定文件中的文本读取并插入指定位置;文件合并;


7.2、查找:

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

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

    一般/PATTERN和?PATTERN可以结合n和N命令一起使用,表示根据pattern查找后,用n或N去定位下一个PATTERN;


7.3、查找并替换:末行s命令

格式:s/要查找的内容/替换为的内容/修饰符     //这是标准情况下      

        s@要查找的内容@替换为的内容@修饰符     //有冲突时使用,也可以替换为@和#以外其他非常用字符

        s#要查找的内容#替换为的内容#修饰符         //有冲突时使用

      

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

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

            1) 如果“要查找的内容”部分在模式中使用分组符号,在替换为的内容可以使用后项引用;

            2)直接引用查找模式匹配到的全部文本,要使用&符号;

        如: :1,20s@\<f\([[:alpha:]]\+\)\>@F\1@gi    //表示查找1-20行中所有以f开头的单词,全部替换为F开头,其他字符保持不变;\1表示引用内容([[:alpha:]]\+\);

           1) 后项引用事例:

         :1,20s@\<f\([[:alpha:]]\+\)\>@F\1ABC@gi    //以f头的单词替换为以F开头的单词,且在词尾加上ABC字符;

            2)直接引用事例:

         :1,20s@\<f\([[:alpha:]]\+\)\>@&ABC@gi    //以f头的单词替换为以F开头的单词,且在词尾加上ABC字符;这里是直接使用&符号直接引用前面的内容;

    修饰符:i,g

        i:忽略大小写;

        g:全局替换,一行中如果匹配到多次,则全部替换,默认只替换一行中的第一次匹配;

  如::1,30s/love/LOVE/gi:表示从第一行到第30行,将love替换成LOVE,不区分love(Love、LOVe等)的大小写;

        :%s/\/etc\/init.d/\/tmp/gi:表示将路径/etc/init.d替换为/tmp,由于路径的/和界定的/冲突,因此需要转义字符\来实现;


    如果分隔符和查找的内容有冲突,可以将分隔符替换为其他非常用的字符:

    如:s@@@

        s###

    因此:%s/\/etc\/init.d/\/tmp/gi:可以写成:%s@/etc/init.d@/tmp@gi


:%s@^#@@gi:将以#开头的行替换为不以#开头,即删除#符号  (将#替换为无) 

:%s@^[[:space:]]\+@@gi                                      //删除以空白字符开头文本的空白字符;

:%s@^[[:space:]]\+[^[:space:]]@#&@gi                //将空白字符开头的行加上#;(空白行除外)

:%s@\(enabled\|gpgcheck\)=1@\1=0@gi            //将文件中的enabled=1改为enabled=0,gpgcheck=1改为gpgcheck=0;


7.4、vim多文件模式:一次打开多个文件

7.4.1:多文件:

格式:vim FILE1 FILE2 ......

如:vim a b c 同时打开三个文件,默认显示第一个文件a,

如果要切换到下一个文件在末行模式下输入:next ;

如果要切换到上一个文件在末行模式下输入:prev ;

如果要切换到最后一个文件在末行模式下输入:last ;

如果要切换到第一个文件在末行模式下输入:first ;


退出所有文件并保存:wqall ;

退出所有文件不保存:qall ;

保存所有文件:wall ;


7.4.2:多窗口

vim -o FILE1 FILE2:水平分割窗口显示;

    ctrl+w:切换到下一个窗口,然后用上下箭头

vim -O FILE1 FILE2:垂直分割窗口显示;

    ctrl+w:切换到下一个窗口,然后用左右箭头


单文件分成两个或多个窗口:

    ctrl+w松开后按s键;    //使用多次,水平分割成多个窗口;窗口切换:ctrl+w,然后用上下左右键

    ctrl+w松开后按v键;    //使用多次,垂直分割成多个窗口;窗口切换:ctrl+w,然后用上下左右键

    q键退出一个窗口;

    qall退出所有窗口;


7.5、定制vim工作特性:(末行模式)

末行模式下的设定仅在当前vim进程有效;

如果要永久有效,需要更改配置文件(配置文件分类:全局、个人)

vim全局配置文件:/etc/vimrc

vim个人配置文件:~/.vimrc     //可能不存在,需自己创建;在里面输入相应命令(末行模式下命令)


    :set number或:set nu     //显示行号;

    :set nonumber或:set nonu     //取消行号;

    :set showmatch或:set sm    // 高亮显示匹配;

    :set noshowmatch或set nosm    //取消高亮显示匹配

    :set ai     //启用自动缩进;

    :set noai    //取消自动缩进;

    :set hlsearch    //启用搜索高亮显示

    :set nohlsearch    //取消搜索高亮显示

    :syntax on    //启用语法高亮显示;默认此项

    :syntax off    //取消语法高亮显示;

    :set ic    //启用忽略字符大小写;

    :set noic    //取消忽略字符大小写;    

    

    :help    //查看末行命令帮助手册

    :help 命令    //查看具体命令帮助;如 :help set