11 vim文本编辑器

时间:2022-04-21 02:02:19

  和sed相比,sed为字处理器(行编辑器),将文本逐行放入到模式空间(也就是内存)中进行处理,并显示在屏幕上。而vim、vi以及nano都是全屏文本编辑器,而vim则是vi的加强版本,相对于vi,vim则拥有特殊字符着色的功能,也是最为常用的功能;

  本节我们重点介绍vim编辑器的常见用法;

vim文本编辑器详解

  *Linux系统的核心就是通过文本来存储所有的软件配置文件*,所以,能够熟练的掌握文本编辑器对于学习Linux系统而言是至关重要的。

  vim编辑器作为vi编辑器的升级版,它将伴随我们学习Linux系统的整个过程!

  vi:Visual interface可视化接口;

  vim:VI iMproved vi的增强版;【vim编辑器实现是语法自动着色,方便我们判断自己缩写的语句是否正确】

vim的模式

  vim编辑器分为三种模式(这点和vi编辑器相同),编辑模式(命令模式),输入模式,末行模式

  在我们通过vim进入文本的时候,默认处于编辑模式。

  模式切换:

    编辑模式 -> 输入模式

      i  在当前光标所在字符的前面,进入输入模式;

        a  在当前光标所在字符的后面,进入输入模式;

      o  在当前光标所在行的下面重启一行,进入输入模式;

      I  在当前光标所在行的行首,进入到输入模式(自动将光标移动到当前行行首);

      A  在当前光标所在行的行尾,进入到输入模式(自动将光标移动到当前行行尾);

      O  在光标所在字符的上一行,转换为输入模式(和 o 正好相反);

    输入模式 -> 编辑模式

      ESC键

    编辑模式 ->末行模式

      输入 “:” 即可

      在输入模式下可以关联vim的相关命令对文本进行编辑,或者切换光标位置:

      例如:5d  #删除第5行

           10,20d  #删除第10行到20行,总共删除11行

           set nu  #显示行号

           ! ls /etc  #在vim下关联shell命令

      【以上操作都是我们比较常用的操作】

   末行模式 -> 编辑模式

      ESC键

   【三种模式之间的切换要注意一点:输入模式不能和末行模式之间直接切换,必须通过编辑模式来进行切换!】

    模式切换总结如下图:

11 vim文本编辑器

vim下的常见操作

一、文本打开方式

  首先  vim /path/FILE  可以直接打开文件;

  特殊使用方式:

    vim +数字 /path/FILE  可以打开文件,且直接将光标定义在数值指定的行;

    vim + /path/FILE  打开文件,将光标处在文件的末尾;

    vim +/string /path/FILE  打开文件,且将光标定义在string字符串处,类似于查找功能;

二、文本关闭方式

  1、常见关闭文本都是在末行模式下进行

    :q  表示退出文本,不保存;

    :wq  保存并退出文本;

    :q!  如果修改了文本,不想保存,则通过 :q! 来强制退出文本;

    :w  只保存,不退出文本;

    :w!  强制保存文本,这个权限只有管理员root才拥有;

  2、在编辑模式(命令模式)下退出文本

    ctrl+z  退出文本,但是不保存

    ZZ  保存并退出文本

三、光标移动

  注意:以下操作均处于编辑模式(命令模式)下运行;

  1、逐字符的移动光标:

    j 下

    k 上

    h 左

    l 右

    【这个“上下左右”要更加好于键盘的“上下左右”,它更加的方便】

    结合数字来使用,既可以同时移动多行,例如:5j  向下移动5行;6l  向右移动6个字符;

  2、按照单词为单位来移动光标

    w  光标处于单词首部,以单词为单位向后移动

    e  光标处于单词尾部,以单词为单位向后移动

    b  光标处于单词首部,以单词为单位向前移动

    同理,可以结合数字来使用:5e  向后移动5个单词位;10b  向前移动10个单词位;

  3、行内跳转

    0  表示跳转到行首(不包含制表符)

    ^  表示跳转到绝对的行首

    $  表示跳转到行尾

  4、行间跳转

    数字G  指定跳转到那个固定行,例如:5G  表示跳转到第5行;

    G  如果不加数字,则是直接跳转到最后一行;

    【末行模式下,也可以进行行间跳转;例如: “:5” 表示跳转到第5行;】

四、翻屏

  编辑模式下:

  ctrl+f  向下翻一屏

  ctrl+b  向上翻一屏

  ctrl+d  向下翻半屏

  ctrl+u  向上翻半屏

五、删除操作

  删除单个字符

    x  删除光标所处的单个字符;

    数字x  和之前移动光标原理相同,可以删除“数字”个字符;例如:5x  删除5个字符;

  删除命令--d

    dw  删除光标所在的那个单词;

    数字dw  删除“数字”个单词,从当前光标开始算起;

    dd  删除当前行;

    【在末行模式下,可以删除多行“:StartADD,EndADDd”删除startadd到endadd行;这里记住一个特殊符号:. (点,表示当前行),例如: :.,$-3d  这表示删除当前行到倒数第4行之间的所有内容;如果说要删除删除当前行到向下数十行的内容呢? :.,+10d 其中,+ 号表示向下多少行的意思,+多少,就是向下多少行】

    【vim下删除内容的时候要注意:删除的内容不会被立刻清除,还可以恢复删除的内容,最近一次删除的内容可以复制或者剪切到其他的地方,通过p命令粘贴到别的地方】

六、复制--y

  复制的用法基本与删除用法相同

  其中  yy  复制当前行使用最为多;

  数字y  表示复制从当前光标单词算起,复制多少个单词;5y  复制5个单词;

七、粘贴--p和P

  P:如果删除或复制的内容为整行的内容,则粘贴至光标所在行的上方,如果复制或删除的内容为非整行内容,则粘贴在光标的前方;

  p:如果删除或复制的内容为整行的内容,则粘贴至光标所在行的下方,如果复制或删除的内容为非整行内容,则粘贴在光标的后方;

八、修改--c

  先删除掉内容,再转换为输入模式:

  cc  删除当前行后,直接进入输入模式进行编辑;

  c$  删除当前光标到末行的内容,在直接转入到输入模式进行编辑;

  【cc 和 c$ 是比较常见的两种用法】

九、替换--r

  替换操作一般用于单个字符的操作:

  r字符或数字  将光标所在字符替换为输入的字符或数字;

十、撤销--u

  u  撤销前一次的操作,连续桥u命令,则是撤销此前的n次操作;默认情况下最多撤销前50次操作;

  数字u  直接撤销前“数字”次操作;例如,5u  撤销前5次的操作;

  【取消最近一次撤销的操作则为 ctrl+r】

十一、重复前一次的操作--.

  .  (点)这个符号就表示重复上一次的编辑操作

  例如:dd  删除了当前行,此时一致敲 . 则表示重复 dd 的命令;

十二、可视化模式(标记内容)--v和V

  进入可是化模式,通过移动光标来选择要编辑的内容;

  v  表示按照字符来选取内容

  V  表示按照行来选取内容

  选择了对应的内容以后,再进行复制,删除等等操作;

十三、查找,以及查找并替换

  查找:

    这个内容则和less命令的类似,就不在多说

  /PATTERN 从前面往后面找
  ?PATTERN 从后面往前面找
  【支持正则表达式】
  n 下一个
  N 上一个

  查找并替换:

    查找到对应的内容后,可以进行替换操作,这里和sed名的格式有点类似:

    ADDR1,ADDR2s@pattedn@string@gi  #其中ADDR1,ADDR2表示要替换的范围,s可以理解为sed命令,pattern选择出要替换的字符串,替换为后面的string,最后g表示全局替换,而i则表示不区分大小写

    例如: :.,$-1s@he@HE@g  #从当前行到倒数第二行,中的he全部替换为HE

    【1,$表示全文范围,也可以通过%来表示全文范围】

  练习:将/etc/yum.repos.d/server.rpo文件中的ftp://instructor.example.com/pub替换为http://172.16.0.1/yum

  vim /etc/yum.repos.d/server.rpo

  :%s@ftp://inistructor\.example\.com/pub@http://172.16.0.1/yum@g

十四、同时编辑多个文件

  vim是可以支持跨文件编辑的(例如,将file1中的内容复制粘贴到file2中去)

  vim FILE1 FILE2 FIEL3  #在vim后面接上多个文件的时候,实际上是打开了FILE1,FILE2,FILE3三个文件,但是显示只显示了FILE1的内容。

  在末行模式下:

    :next  切换到FILE2或后者其他文件

    :prev  切回到FILE1或则前面的文件

    :last  切换到最后一个文件

    :first  切换到第一个文件

    :q  只能退出当前文件,如果想退出所有文件,则需要使用

    :qa  退出所有文件

十五、分屏显示同一个文件--ctrl+w [s|v] 或者 -[o|O]

  上面我们说到了同时打开多个文件,但是不在同一个屏幕上面显示,如何才能让屏幕同时显示多个文件呢?

  ctrl+w松开后,再按s  水平分割窗口  

    vim -o FILE1 FILE2

  ctrl+w松开后,再按v  垂直分割窗口  

    vim -O FILE1 FILE2  

  ctrl+w松开后,再按w或是小键盘上下左右  切换光标所在文件

十六、将当前文件中部分内容另存到另外一个文件中--w

  在末行模式下进行操作:

  例如: :.,+5w /path/somefile  #保存当前文件光标所在行,到接下来5行的内容保存到另外一个/path/somefile文件中去;

十七、将另外一个文件的内容填充到当前文件中--r

  在末行模式下进行操作:

  例如: :r /etc/inittab  #将/etc/inittab文件的内容填充到当前文件光标所在的地方;

十九、调用shell脚本程序(调用命令)--!

  在末行模式下进行操作:

  例如: :! ls /etc  #这样就可以直接在vim编辑器中去运行ls /etc的命令;

二十、高级操作

  1、显示或取消行号

    :set number  也就是简写为 :set nu

    :set nonu  取消行号

    【默认情况下是没有行号的,我们所如果想默认进来就看到行号,就必须去修改vim的配置文件】

  2、是否忽略大小写

    :set ignorecase  也就是简写为 :set ic

    :set noignorecase

  3、设置自动缩进功能

    默认情况下回车后是没有缩进的

    :set autoindent  也就是简写为 :set ai

    :set nohlsearch

  4、查找到的文本的高亮显示与取消

    语言着色功能,默认开启(也叫做高亮显示)

    :set hlsearch

    :set nohlsearch  #关闭高亮显示

  5、语法着色功能(vim默认开启)

    :syntax on

    :syntax off  #关闭语法着色功能

二十一、vim的配置文件

  /etc/vimrc  #为所有shell下的主配置文件,修改这里的配置文件,则在所有bash程序下生效;

  ~/.vimrc  #各个用户的家目录下去编辑这个文件(没有的可以自己创建),则只在本bash进程下,对vim的编辑才生效

vim导师(vim的帮助文件)

  vimtutor  #vim编辑器的教程,这里有心的朋友可以自己慢慢去看;

vim编辑文件时非法退出时遇到的问题

  如果在你编辑文件的时候,突然关闭了该shell程序,并不是通过 :q 或者 ZZ 正常退出的文件,则会在当前被编辑文件的同一个目录下生成  .swp  的隐藏文件文件;

  当你再次想编辑这个文件时候则提示如下:

11 vim文本编辑器

  这里提示您上次在 dated 时间的时候进行过编辑,您是否继续编辑;

  O表示打开该文件,但是只读,E表示编辑这个文件,R表示覆盖这个文件重新编辑,D则是删除上次编辑的内容,重新再进行编辑,A则是表示退出并终止;

  此时,我们只需要按E进去正常保存,这样我们之前编辑的内容就不会丢失,再删除掉  .swp 的隐藏文件即可;