Linux基本知识之Vim编辑器

vim文本编辑器:

   vim是Linux系统上的最著名的文本/代码编辑器,也是早年的vi编辑器的加强版,而gVim则是其windows版。它的最大特色是完全使用键盘命令进行编辑,脱离了鼠标操作虽然Linux基本知识之Vim编辑器使得入门变得困难,但上手之后键盘流的各种巧妙组合操作却能带来极大幅度的效率的提升。

(1)打开文件与关闭文件:

     打开文件:

          vim [options][file..]

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

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

          +:直接打开文件之后,光标直接处在最后一行

          -b:以二进制方式打开文件

          -d file1 file2 …:比较多个文件

          -m:以只读方式打开文件

     关闭文件:

          a.在编辑模式下面连敲两个大写的Z键即可保存并退出

          b.在末行模式下面:

              :wq  保存并退出(:w保存文件)

              😡   保存并推出(相当于:wq平时不太建议使用)

              :q   直接退出(文件没有执行过编辑操作,只是打开查看后退出)

              :q!  不保存退出 

(2)模式转换:默认的模式为编辑模式

     编辑模式–>输出模式:

         i:在光标所在处输入

         a:在光标所在处后方输入

         o:在光标所在处下方打开一个新行

         I:在光标所在行的行首输入

         A:在光标所在行的行尾输入

         O:在光标所在处的上方打开一个新行

     输入模式–>编辑模式:

         ESC

     编辑模式–>末行模式:

         : /  ?

     末行模式–>编辑模式:

         ESC

     锁定和解锁文件:

         Ctrl+s,Ctrl+q(锁定之后文件可以编辑只是屏幕被锁定看不到任何编辑的过程)

(3)光标跳转:

     字符间跳转:

        h键或左箭头 :光标向左移动一个字符

        j键或下箭头 :光标向下移动一个字符

        k键或右箭头 :光标向右移动一个字符

        i键或上箭头 :光标向上移动一个字符

            #COMMAND:根据COMMAND命令跳转相应的#个字符

    单词间跳转:

        w:下一个单词的词首

        e:当前或后一个单词的词尾

        b:当前或前一个单词的词首

            #COMMAND:根据COMMAND命令跳转相应的#个单词

    行首行尾跳转:

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

        0:跳转至行首(跳转至绝对的行首,但是托字符除外)

        $:跳转至行尾

    行间跳转:

        #G或#gg:跳转至由#指定的行

        1G或gg:跳转至首行

        G:跳转至尾行

    句间跳转:

        ):跳转至下一句、

        #):跳转至下#句

        (:跳转至上一句

        #(:跳转至上#句

    段间跳转:

        }:跳转至下一句、

        #}:跳转至下#句

        {:跳转至上一句

        #{:跳转至上#句

    页间跳转:

        H:跳转至当前页的页首

        M:跳转至当前页的页中间行

        L:跳转至当前页的页底

(4)翻屏操作:

    Ctrl+f:向文件尾部翻一屏

    Ctrl+b:向文件首部翻一屏

    Ctrl+d:向文件尾部翻半屏

    Ctrl+u:向文件首部翻半屏

    Enter:按行向后翻

(5)编辑命令:

    字符编辑:

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

        #x:删除光标所在处起始的#个字符

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

        ~:替换字符的大小写

    替换命令:

        r(char):替换光标所在处的字符(将字符替换成char)

        R:切换成REPLAVCE模式

        删除命令:删除的内容不会被清理掉,储存在缓冲区中

        d:删除命令,可结合光标跳转字符,实现范围删除;

        d$:从光标开始处删除至最后一个字符

        D: 从当前光标位置一直删除到行尾

        d^:从光标开始处删除至最前一个字符

        dd:删除光标所在的那一整行

        #dd:删除多行

        dw:从光标所在处删除至下一个单词的开头

        de:从光标所在处删除至当前或后一个单词的词尾

        db:从光标所在处删除至当前或后一个单词的词首

            #COMMAND:执行#次COMMAND命令

    粘贴命令:缓冲区中的命令可以粘贴多次

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

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

    复制命令:

        y:复制命令,可结合光标跳转命令,实现范围复制

        y$:从光标开始处复制到最后一个字符

        y^:从光标开始处复制到最前一个字符

        y0:从光标开始处复制到本行的最前一个字符

        yy:复制光标所在的那一整行

        Y:复制光标所在的整行

        yw:从光标所在处复制至下一个单词的开头

        ye:从光标所在处复制至当前或后一个单词的词尾

        yb:从光标所在处复制至当前或后一个单词的词首

        #yy:复制了#行

        #COMMAND:执行#次COMMAND命令

    改变命令:

        c:编辑模式–>输入模式,实现先删除后输入的效果,可结合光标跳转命令实现组合改变命令

        用法同删除命令d和复制命令y

        cc:删除当前行并输入新内容

        #cc:删除多行并输入新内容

        C:删除当前光标到行尾,并切换成插入模式

        重复上面的编辑操作:.(点号)

(6)可视化模式

    v:根据光标所走的位置,实现单字符和整行选定

    V:实现光标所在行的选定

    编辑命令使用;d删除,c修改,y复制

(7)撤销操作: undo

    u:撤销此前的操作,按步撤销执行的命令,在手动保存之前,默认最多可撤销50次

    #u:撤销最近执行过的#次命令(按执行命令顺序的倒序撤销)

    U:撤销光标落在这行后所有此行的更改

    Ctrl+r:撤销之前的撤销操作

    .:重复前一个撤销操作 

    n.:重复前一个撤销操作n次

(8)vim自带的练习操作:#vimtutor

(9)vim末行模式:

    末行模式下的命令:

        输出命令:

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

        :ADDR1,ADDR2w /path/to/somewhere

        将某些地址(ADDR1,ADDR2)之间的内容转存到/path/to/somewhere这个文件下

        插入命令:

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

    内建的命令行接口

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

        :start_pos[,end_pos]

        .:当前行

        $:最后一行、

        %:全文

        /pattern/:从光标所在处开始向文件尾部第一次被模式所匹配到的行

        /pat1/,/pat2/:从光标所在处起始,第一次由pat1匹配到的行开始,至第一次由pst2匹配到的行结束的所有行,

        #:特定的第#行,例如5,即第5行

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

        #,+#:指定行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量,

    ②查找:

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

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

        n:下一个,与命令方向相同

        N:上一个,与命令方向相反

    ③查找并替换:

        s:末行模式的命令:使用格式:

        s/要查找的内容/替换为的内容/修饰符

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

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

        如果"要查找的内容"部分在模式中使用分组符号,在"替换为的内容"中使用后向引用

        直接引用查找模式匹配到的全部文本。

        修饰符:

            i:忽略大小写

            g:全局替换,默认情况下,每一行只替换第一次出现。

            gc:全局替换,每次替换前询问是否替换

(10)vim环境变量的设置:

    整体vim的设置值一般放在/etc/vimrc(通常不建议去用root用户去直接修该文件)

    单用户的配置文件为家目录下的 ~/.vimrc (默认不存在,自行手动创建)

    vim会主动将记录你曾经做过的行为,为家目录下面的:~/.viminfo

    vim环境参数设置:

        ①:set nu/:set nonu   设置与取消行号

        ②:set hlsearch/:set nohlsearch   设置与取消查找字符高亮的设置值,默认值为hlsearch

        ③:set autoindent/:set nosutoindent     设置与取消自动缩进(set ai/set noai)

        ④:syntax on/off 设置与取消设置语法高亮

        ⑤:set ignorecase/noignorecase     区分与忽略字符大小写(set ic/noic)

        ⑥:set showmatch/noshowmatch         设置与取消括号成对匹配(set sm/nosm)

        ⑦:fileformat=unix/dos                设置与使用unix/dos环境编程

        ⑧:set textwidth=65 set wrapmargin=15 设置vim编辑的文本的宽度(vim only)

        ⑨:help option-list            查看需要设置的文件的所有的简写清单

(11)vim自带的寄存器:

    有26个命名寄存器和1个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享。用a,b,…,z表示, 用“寄存器表示,放在数字和命令之间” 如:3"tyy:表示复制3行到t寄存器中,"tp 表示将t寄存器内容粘贴

未指定,将使用无命名寄存器,有10个数字寄存器,用0,1 ,… ,9 表示,0存放最近复制内容,1 存放最近删除内容。当新的文本变更和删除时,1转存到2,2转存到3,以此类推。数字寄存器不能在不同会话间共享。

(12)多文件编辑模式:

    vim FILE1 FILE2 FILE3…

        :next  编辑下一个文件

        :prev  编辑前一个文件

        :first 编辑第一个文件

        :last  编辑最后一个文件

        :wall  保存所有文件

        :qall  退出所有文件

        :wqall 保存并退出所有文件

(13)屏幕显示:

    多文件分割:

    vim -o | -O FILE1 FILE2..

        -o:水平分割

        -O:垂直分割

        在窗口间切换:Ctrl+w,Arrow

    单文件窗口分割:

    Ctrl+w,s:split,水平分割

    Ctrl+w,v:vertical,垂直分割

    Ctrl+w,q:取消相邻窗口

    Ctrl+w,o:取消全部窗口

    :wqall 退出全部的窗口编辑

(14)编辑二进制文件:

    以二进制方式打开文件:

    vim -b binaryfile

    扩展命令模式下,利用xxd命令转换为可读的十六进制

    :%!xxd

    编辑二进制文件

    扩展命令模式下,利用xxd命令转换回二进制

    :%!xxd -r

    保存并退出

(15)可视化编程:(相当于用键盘代替鼠标进行操作)

    允许选择的文本块

    V面向行编辑

    v面向字符进行编辑

    ctrl+v 面向块编辑

    可视化可用于与移动键结合使用:

    w,),},箭头等使用;

    突出显示的文字可以被删除,复制,变更,过滤,搜索/替换等

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