Vim编辑器

==============================================================================

概述:

   本章将主要介绍Linux中的一种常用文本编辑器vim,具体内容如下:

  • 使用vi和vim的三种主要模式

  • 移动光标,进入插入模式

  • 改变、删除、复制文本

  • 撤销改变

  • 搜索文档

  • vim寄存器

  • 可视化和多窗口

  • vim帮助

==============================================================================

Vim简介

 1.文本编辑器

介绍

  • 文本数据是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。

文本编辑器的种类:

行编辑器:

  • 行编辑器是指一行一行的来编辑处理的工具,如 sed

全屏编辑器

  • 即编辑空间占据整个屏幕,如:nano ,vi

其他编辑器

  • gedit 一个简单的图形编辑器;

  • gvim 一个Vim编辑器的图形版本;

 2.vi,vim编辑器

vi,vim

  • vi:Visual Interface,是一种文本编辑器

  • vim编辑器:即Vi IMproved 是vi的增强版,vim是模式化的编辑;

vi对比vim如下图:

[root@centos7 ~]# which vi
/usr/bin/vi
[root@centos7 ~]# which vim
/usr/bin/vim
[root@centos7 ~]# ll /usr/bin/vi
-rwxr-xr-x. 1 root root 910040 6月  10 2014 /usr/bin/vi
[root@centos7 ~]# ll /usr/bin/vim
-rwxr-xr-x. 1 root root 2289656 6月  10 2014 /usr/bin/vim

# 从数据大小的对比中可以看出vim要比vi大得多,说明vim要比vi的功能更加强大

Vim 基本操作

 1.使用vim打开文件

语法:

  • vim [OPTION]... FILE...(可以同时打开多个文件)

打开文件:

  • +#:打开文件后,直接让光标处于第#行的行首。 如:vim +10 f1

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

  • vim + file:直接打开file,光标在最后一行;

  • vim –b file:二进制方式打开文件(只有在编辑二进制的时候才用到,对于文件来说没效果);

  • vim –d file1 file2… :比较多个文件(如果有不同的话会做出标注)

  • vim -m file:只读打开文件 (只能查案看文件,不能修改);

ex file vim –e:直接进入ex模式(末行模式)

打开文件存在不存在的情况

  • 如果该文件存在,文件被打开并显示内容;

  •  如果该文件不存在,当编辑后第一次存盘时创建它。(注意,打开的是一个文件,而不是目录,目录已经存在,是不允许修改存盘的。)

 2.基本模式

vim在工作过程中有三种模式:

命令模式(默认)

  • 移动光标,剪切/粘贴文本;

插入(编辑)模式

  • 修改文本,在文本文件当中进行输入内容;

扩展命令模式(末行模式)

  • 保存,退出等,执行vim的内置命令。

附图:

wKiom1ezE1binoY5AACWE9iykfA820.png


 3.模式转换

命令模式--> 插入模式

  • i:insert, 在光标所在处输入;

  • I:在当前光标所在行的行首输入;

  • a:append, 在光标所在处后面输入;

  • A:在当前光标所在行的行尾输入;

  • o:在当前光标所在行的下方打开一个新行;

  • O:在当前光标所在行的上方打开一个新行;

插入模式--> 命令模式

  • ESC键

命令模式----> 扩展模式

  • “:”

扩展模式--> 命令模式

  • ESC键

注意:

  • 插入模式不能直接切换至末行模式

  • 锁定屏幕:Ctrl+s

  • 解锁屏幕:Ctrl+q

 4.关闭退出文件

扩展模式下:

  • :q  退出;

  • :q!  强制退出,丢弃做出的修改;

  • :wq 保存退出;

  • :x 保存退出;

其他命令:

创建一个命令提示符“:”处于底部的屏幕左侧

  • w:临时存盘,相当于保存,防止意外掉电等;

  • r /filename:读文件内容到当前文件中;

  • w /filename:将当前文件内容写入另一个文件;

  • !command :不用退出vim,就可以执行命令;

  • r!command:读当前命令的标准输出到文件当中

命令模式下:不建议使用

  • ZZ:保存退出

  • ZQ:不保存退出

命令模式下的光标跳转和操作

 1.光标跳转

命令模式下光标的跳转:

字符间跳转:

  • h:左

  • l:右

  • j:下

  • k:上 

  • 方向键也可以实现上下左右跳转

#COMMAND:跳转由#指定的个数的字符; 如 10 +h(按下数字再按方向)

单词间跳转:

  • w:下一个单词的词首;

  • e:当前或下一单词的词尾

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

  • #COMMAND:由#指定一次跳转的单词数    如:5 +w (调到第五个单词的词首)

当前页跳转:

  • H:(head)跳转至当前页的页首 ;

  • M:(middle)跳转至当前页的中间行;

  • L:(low)跳转至当前页的页底

行首行尾间跳转:

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

  • 0:跳转至行首;

  • $:跳转至行尾

行间移动:

  • #:跳转至由#指定行    如 :100 (跳到100行)

  • G:直接跳转至文章的最后一行;

  • #G:直接跳转至指定的#行   如:1000 G (直接跳到1000行)

  • 1G, gg:直接跳至全文的第一行

句间移动:

  •  ):下一句 

  • (:上一句

段落间移动:

  •  }:下一段

  • {:上一段

翻屏操作

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

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

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

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

 2.命令模式下的操作

操作方法:

字符编辑

  • x:删除(实则为剪切)光标处的字符;;

  • #x:删除光标处起始的#个字符;

  • xp:交换光标所在处的字符及其后面字符的位置;(如:ou会变成uo)

  • ~:转换大小写

替换命令(r,replace)

  • r:替换光标所在处的字符;

  • R:切换成REPLACE模式(输入什么就会替换掉原来的字符显示输入的字符。退出按Esc)

删除命令:d

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

  • d$:删除到行尾;

  • d^:删除到非空行首;

  • d0:删除到行首;

  • dw:删除光标之后的一个单词;

  • de:删除到单词的尾部;

  • db:删除前一个单词;

  • dG:从当前光标删到文章的尾部;

  • dgg:从当前光标删除到文章的首部;

  • #COMMAND:如:10 dw  删10个单词

  • dd:删除光标所在处的行

  • #dd:删除光标所在处的行起始的共#行;

  • D:从当前光标位置一直删除到行尾,留空行,等同于d$

注意:

  • 删除后的内容会被保存在缓冲区当中,但是如果粘贴的话只能粘贴最后一个执行删除命令的内容,(删除和粘贴中间不要有其他操作)

复制命令:

  y:复制,行为相似于d命令

  • y$:

  • y0:

  • y^:

  • ye:

  • yw:

  • yb:

  • #COMMAND:

  • yy:复制光标所在处的行;

  • #yy:复制光标所在处的行起始的共#行;

  • Y:复制整行

粘贴命令:

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

  • P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面;

改变命令:

 c:修改后切换成插入模式(命令模式--> 插入模式y$:

  • c0:

  • c^:

  • ce:

  • cw:

  • cb:

  • #COMMAND:

  • cc:删除当前行并输入新行

  • C:删除当前光标到行尾,并切换成插入模式,同c$用法

可视化模式:

  • v:按字符选定;

  • V:按行选定;

 可视化建一般会结合编辑命令:d,c,y操作;

撤销操作:

u:撤销最近的更改

  • #u:撤销之前多次更改;

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

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

重复执行编辑操作

  • 重复执行前一个编辑操作

  • n. 重复前一个操作n次

vim末行模式和内建的命令行接口

 1.内建的命令行接口

地址定界

格式: :start_pos,end_pos(起始位置,结束位置)

  • #:具体第#行,例如2表示第2行;

  • #,#:从左侧#表示行起始,到右侧#表示行结尾;

  • #,+#:指定行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量 ;   如:2,+3 表示2到5行

  •  .:当前行;

  • $:最后一行;

  • .,$-1: 当前行到倒数第二行;

  • %:全文, 相当于1,$;

  • /parttern/:光标所在处起始向文件尾部第一次被模式所匹配到的行;如:/first/,$

  • /pat1/,/pat2/:从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束;

  • #,/pat1/

地址定界可同编辑命令一同使用:(直接附在地址定界的后面,不要有空格)

  • d:删除;

  • y:复制     如:3,/^U/y 表示从第三行开始一直到一以U大头的行中间的内容复制;

  • w /PATH/TO/SOMEFILE:将范围内的行另存至指定文件中;

  • r file:在指定位置插入指定文件中的所有内容;

查找

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

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

  • n:与命令同方向

  • N:与命令反方向

查找替换

  • s:在末行模式下完成查找替换操作;

格式:

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

注意:

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

替换为的内容:

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

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

修饰符

  • i:忽略大小写;

  • g:全局替换,意味着一行中如果匹配到多次,则均替换;默认情况下,每一行只替换第一次出现;

  • gc:全局替换,每次替换前询问;

查找替换中的分隔符/可替换为其它字符,例如@#$

  • s@/etc@/var@g

  • s#/boot#/#

示例:

  • :%s/this/This/g    表示:全文查找this替换为This

  • :1,20s/this/THIS/ig  表示:查找1到20行中的this,然后替换为THIS,并且查找时要忽略字符大小;

  • :%s@/cgroup/systemd@/etc/sysconfig@g  表示:全文查找/cgroup/systemd替换为/etc/sysconfig;

  • :%s@\<t\([[:alpha:]]\+\)\>@T\1@g 表示:全文查找以t开头的单词,替换为T打头的单词;

  • :%s@\<t[[:alpha:]]\+\>@&er@g   表示:全文查找以t开头的单词,并在词尾加er;

  • :%s/^#//:表示全文查找以#开头的行,并删除开头的#号

  • :%s@\(enabled\|gpgcheck)=0@\1=1@g 表示:全文查找并替换enabled=0或者gpgcheck=0为=1

vim其他功能

 1.多文件功能

多文件

格式

  • vim FILE1 FILE2 FILE3 ...

在文件间切换

  • :next 下一个;

  • :prev前一个;

  • :first 第一个;

  • :last 最后一个;

退出所有文件

  • :wall 保存所有;

  • :qall退出所有;

  • :wqall 保存所有退出

多窗口

格式

  • vim -o|-O FILE1 FILE2 ...

选项:

  • -o: 水平分割

  • -O: 水平分割

在窗口间切换:

  • Ctrl+w, 松手后按方向键

  2.多窗口

多文件窗口

格式

  • vim -o|-O FILE1 FILE2 ...

选项:

  • -o: 水平分割

  • -O: 水平分割

在窗口间切换:

  • Ctrl+w, 松手后按方向键

单文件窗口

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

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

  • ctrl+w,q:取消相邻窗口;

  • ctrl+w,o:取消全部窗口;

  • :wqall退出

定制vim工作特性

 1.多文件功能

特性(在末行模式下设定)

行号

  • 显示:set number, 简写为set nu;

  • 取消显示:set nonumber, 简写为set nonu;

括号成对匹配

  • 匹配:set showmatch, 简写为set sm

  • 取消:set nosm

自动缩进

  • 启用:set ai

  • 禁用:set noai

高亮搜索

  • 启用:set hlsearch

  • 禁用:set nohlsearch

语法高亮

  • 启用:syntax on

  • 禁用:syntax off

忽略字符的大小写

  • 启用:set ic

  • 不忽略:set noic

文件格式

  • 启用:fileformat=unix

  • 不忽略:fileformat=dos

设置文本宽度

  • :set textwidth=65 (vim only)

  • :set wrapmargin=15

注意:

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

永久有效

  • 全局:/etc/vimrc

  • 个人:~/.vimrc(需自己创建)

vim获取帮助

vi/vim内置帮助

  • :help

  • :helptopic

  • Use:qto exit help

vimtutor

附图:

  vim键盘图

wKioL1ezE5iCzJeUAATmqXcVkgg613.png