vim文本编辑器之快捷键满天飞

vim文本编辑器不同于nano的是其功能非常强大,强大的功能还支持各种快捷键,让我们编辑文本的时候更方便更快捷。

本文将会按照下图所展示的功能来对命令一一讲解,

        vim.png

  •  打开文件:

                vim file:直接打开文件file   

                vim +# file:打开文件后光标在第#行显示

                vim +/partern:打开文件后,直接让光标在第一个被partern匹配到的行的行首处显示

                vim + file:直接打开文件,光标在最后一行显示

                vim -b file:二进制的方式打开文件

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

                vim -m file:只读方式打开

                vim -e file:打开文件后直接进入编辑模式

                注意:如果文件存在,则直接打开显示的内容,如果文件不存在,则在编辑完成之后在末行模式输入wq或者x保存文件时才会写入到硬盘中。

  •  编辑界面:

                vim 进入到文本界面后,我们首先进入的命令模式,在这个界面我们通常需要重复的切换三个模式来进行编辑操作,下面我们来介绍下VIM的三种主要模式及互相的切换方法。

                命令模式:可以使用快捷键移动光标,复制,粘贴,删除或替换字符等操作

                插入模式:此时我们可以编辑文本,修改文本中的内容

                末行模式:可以执行,替换,删除 ,保存退出等操作

                各个模式之间的切换方法:

                命令模式 —–(:)—–> 末行模式

                命令模式 -[iIaAoO]–> 插入模式

                插入模式—(ESC)—-> 命令模式

                插入模式–(ESC)(:)—> 末行模式

                末行模式—-(ESC)—> 命令模式

                末行模式-(ESC)[iIaAoO]-> 插入模式          

                 【iIaAoO】插入模式详解:

                        i:在光标所在处插入要输入的内容

                        I:在光标所在处的行首插入要输入的内容

                        a:在当前光标所在处的后面插入要输入的内容

                        A:在当前光标所在处的行尾插入要输入的内容    

                        o:在当前光标所在行的下一行的行首插入要输入的内容(新建行)

                        O:在当前光标所在行的上一行的行尾部插入要输入的内容(新建行)

  •  关闭文件:

                在末行模式下输入:

                        q:退出

                        q!:强制退出

                        wq:保存退出

                        x:保存退出

                        r /path/to/somefile:读file到文本中

                        w /path/to/somefile:读当前文本中的内容到file中

                        !command:命令的输出会在执行vim命令之前的窗口显示

                         r!command:命令的输出结果会在文本中显示

                 命令模式:

                         ZZ:保存退出

                        ZQ:退出不保存

    vim编辑器的命令分类:光标移动和跳转、命令模式、文本编辑、地址定界、查找及替换、可视化编辑、文本块选择,多文件模式。

  •  光标移动和跳转命令:

                行间跳转:

                        #G:将光标移动到第#行的行首

                        1G:将光标移动到第一行的行首  gg也可

                        G  :将光标移动到最后一行的行首

                            ^:移动到行的第一个单词首部

                            $:移动到行的最后一个单词尾部

                             0:移动到行首部

                单词间跳转: web

                           w:向后移动到下一个单词的行首

                            e:向后移动到下一个单词的行尾

                            b:向前移动到下一个单词的行尾部

                段落间跳转:

                            }:向下移动到下一段的行首

                            {:向上移动到上一段的行首

                句子间跳转:

                            ):下一句

                            (:上一句

                当前页跳转:

                              L:页面尾部   —low

                             M:页面中间  —middle

                              H:页面首部  —head

                按屏幕跳转:fb

                               ctrl+b:向前移动一屏

                                ctrl+f:向下移动一屏—-和more less 快捷键一致

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

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

                上下左右移动:

                                h:向左

                                 j:向下

                                k:向上

                                 l:向右

  • 命令模式相关命令:

                .:重复上一次操作,#. 重复前一个操作n次

               u:撤销上一次的操作,也可#u

               ctrl+r:撤销撤销

                U:撤销当前光标在此行的所有操作

                x:删除当前光标所在的字符,向后删,也可以#x

                r:按下r在按下要替换的字符即可替换

                R:直接进入替换模式,此时可以直接当光标所在处需要替换的字符,与r的区别是r每替换一次则需要按一下r。

                D:从当前光标开始删除至行尾部同d$

                ~:字符大小写转换,小转大,大转小

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

                删除:dd删除整行,d^ 从当前字符开始删除到行首,同理d$,d0,d[web],#dd(向后删除#行,包括当前行)

                改变:cc删除整行,和dd的区别主要时执行完cc操作后直接由命令模式进入插入模式,选项同d类似。

                复制:yy复制整行,y^–>p 从当前字符开始复制到行首并粘贴,同理y$,y0,y[web],#yy(向后复制#行,包括当前行)

                粘贴:p:如果粘贴的是整行,则粘贴在当前光标所在行的下方,否则粘贴当前光标所在处的前方。

                          P:如果粘贴的是整行,则粘贴在当前光标所在行的上方,否则粘贴当前光标所在处的前方。

                应用小技巧:100+i+naruto+esc,在光标所在处插入100个naruto

        

  • 地址定界相关命令:(在末行模式下,配合编辑命令使用,如y、d、w,r等)

                 %:全文

                   .:当前行

                  $:最后一行

                  a,b:a行开始到b行结束

                  a,+#:a行开始到下面#行结束

                  /root/,/user/:从第一个匹配到的root开始,到第一个匹配到user的结束

                  #,/root/:从第#行开始,到第一次匹配到root结束

                  /root/,$:从第一次匹配到的root开始到最后一行结束

  • 查找相关命令:

                    /PATTERN:从当前光标所在处向文件尾部查找
                    ?PATTERN:从当前光标所在处向文件首部查找

                    向上查找匹配到的字符:N

                    向上查找匹配到的字符:n

  •  查找并替换相关命令:

                   vim的末行查找并替换的功能与前面接触过的sed命令类似。

                      格式:地址定界s@要查找的内容@要替换的内容@ig

                      要查找的内容:可以使用正则表达时的匹配模式

                      替换的内容:不能使用模式,只能使用引用功能 \1,\2,还可以使用&,来查找匹配前面匹配到的字符。

                      g:全局替换,默认情况下,每一行只替换第一次匹配到的

                      i:忽略大小写

                      gc:全局替换,替换时交互式询问             

                  

  •  可视化模式:在windows中我们通常可以用鼠标选择文章的某一部分内容,linux也可以实现。

            v:可以按字符选择,配合上下左右键来选择需要的内容

            V:可以按行选择

  • 多文件模式

           多文件模式:vim file1 file2 file3 ……..

            :next 下一个  :prev 前一个

            :first 第一个   :last  最后一个

  •         :qall 保存退出  :wqall 保存所有退出   :wall 保存所有

  • 使用多个文件分割:

  •             vim -o|O:水平或者垂直分割文件显示

                 各个窗口间切换方法:ctrl+ww 或ctrl+w+向上下左右箭头

  • 单文件窗口分割:

  •             ctrl + w,s   水平分割  (split水平)

                ctrl + w,v   垂直分割  (vertical垂直)

                ctrl + w,q   取消相邻窗口   quit退出

                ctrl + w,o   取消全部窗口    gameover

  • 定制vim的工作特性:

  •             全局:/etc/vimrc

                个人:~/.vimrc

           我们也可以通过在末行模式输入相关命令来对vim编辑器进行设置:

                 行首显示行号:

                            显示:set nu

                            取消:set nonu

                  括号成对匹配:

                            匹配:set sm

                            取消:set nosm

                   自动缩进

                             启用:set ai

                             取消:set noai

                    高亮搜索

                            启用:set hlsearch    

                            取消:set nohlsearch

                    忽略字符的大小写

                            启用:set ic

                            禁用:set noic

                    文本格式

                            启用:fileformate=unix

                            禁用:fileformate=dos

                    设置文本宽度

                            set textwidth=65

                            set wrapmargin=15

     vim寄存器:

         vim有26个命令寄存器和1个无名寄存器,常存放不同的剪切板内容,可以不同会话间共享,windows该功能的寄存器就一个,linux中该寄存器的
    命名规则为a…z,默认情况下我们使用的是无名寄存器。linux还有10个数字寄存器,用0-9表示,0存放最近复制的内容,1存放最近删除的内
    容,当新的文本变更和删除时,1缓存2,2转存3,以此类推,数字寄存器不能在不同会话间共享。

                例如:#“tyy 表示复制#行至t寄存器中,tp表示将t寄存器中的内容粘贴

        补充:vim中的 \033 –> ctrl +v +[   (同时按)

    练习:

    1、复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符

        :%s@^[[:space:]]\+@@g

    2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号

        :%s@^[[:space:]]\+@#&@g

    3、如何设置tab缩进为4个字符?

         echo "tabstop=4" >> /etc/vimrc

    4、复制/etc/rc.d/init.d/functions文件至/tmp目录;替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;

         :%s@/etc\/sysconfig\/init@\/var\/log@g

    5、删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号;

        :%s@^#\([[:space:]]\+\)@\1@

             

    

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