文本处理三剑客之vim

由于Linux中的配置文件都是以文本方式存在的,所以在Linux的系统中使用文本编辑器来配置系统是一件很重要的事情。而vim由于程序简单、编辑速度快且能够检查编程中的语法错误,所以已成为最常用也最重要的文本处理工具。下面我们就来介绍一下。


一、vim的模式


Vim在使用过程中,基本上分为三种模式:命令模式、编辑模式与扩展命令模式。在三种模式下,我们可以执行的操作大致如下:

u  命令模式:在此模式中可以进行删除、复制、粘贴、移动光标等操作,但无法编辑文件内容;

u  编辑模式:在此模式中可以修改文本

u  扩展命令模式:在此模式中,可查找替换数据,读取、保存、替换字符,离开vim,相关设置等;

需要注意的是,命令模式与编辑模式及扩展命令模式可相互切换,但编辑模式与扩展命令模式之间不可互相切换,各模式之间的切换如下图所示:

blob.png


二、vim命令语法


vim稍作了解之后,我们来看 一下vim一些具体的命令与选项。

vim [options] [file ..]

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

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

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

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

-d:比较多个文件

-m:以只读方式打开文件,不能强制写入

-e:直接进入命令行模式,与命令ex file相同

需要注意的是,对于vim命令而言,如果要编辑的文件存在,则文件被打开并显示内容;如果文件不存在,则会在编辑后第一次存盘时创建它;


三、vim的按键操作


vim中,我们通过按键来进行相关的编辑操作,而且在不同的模式下,按键的作用可能也并不相同,下面列出一些常用按键的作用。

移动光标的方法 备注
h或左箭头
或<backspace>
光标向左移动一个字符;<backspace>移动到行首时可自动切换至上一行 如果想要进行多次移动的话,可以使用nCOMMAND,即加上想要进行的次数(数字)后,按下操作即可
j或下箭头 光标向下移动一个字符
k或上箭头 光标向上移动一个字符
l或右箭头或<space> 光标向右移动一个字符;<space>移动到行尾时可自动换至下一行
Ctrl+f 屏幕向下移动一页,相当于PgDn
Ctrl+b 屏幕向上移动一页,相当于PgUp
Ctrl+d 屏幕向下移动半页
Ctrl+u 屏幕向上移动半页
+ 光标移动到下一行的第一个非空白字符
光标移动到上一行的第一个非空白字符
0或Home 光标移动至这一行的绝对行首
^ 光标移动至这一行行首的第一个非空白字符
$ 光标移动至这一行的最后字符处
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 光标移动到这个文件的最后一行的第一个非空白字符
nG n为数字,光标移动至此文件的第n行的第一个非空白字符
gg 光标移动至此文件的第一行的第一个非空白字符,相当于1G
nEnter n为数字,光标向下移动n行,至m+n行的第一个非空白字符(m为当前行)
) 光标移动至下一句的第一个非空白字符
( 光标移动至上一句的第一个非空白字符
} 光标移动至下一段的第一个字符
{ 光标移动至上一段的第一个字符
查找
/word 从当前光标开始向下寻找包含word的字符串
?word 从当前光标开始向上寻找包含word的字符串
n 重复前一个查找的操作,与搜索命令同方向
N 反向进行前一个查找的操作,与搜索命令反方向
删除、复制、粘贴与编辑
x,X x为删除当前光标所在字符,X为删除当前光标所在字符的前一个字符
nx n为数字,从当前光标所在字符连续向后删除n个字符(含当前光标所在字符)
xp 交换光标所在处的字符及其后面字符的位置
dd 删除光标所在的那一整行 vim中的删除命令为d,后面可结合光标跳转字符,实现范围删除
ndd n为数字,从当前光标所在行连续向下删除n行(含当前光标所在行)
d1G 删除从光标所在行至第一行的所有数据
dG 删除从光标所在行至最后一行的所有数据
d$ 删除从光标所在处到该行的最后一个字符,等同于D
d0 删除从光标所在处的前一个字符到该行的第一个字符(包含空白字符)
d^ 删除从光标所在处的前一个字符到该行的第一个非空白字符
yy 复制光标所在的行 vim中的复制命令为y,后面可结合光标跳转字符,实现范围复制
nyy n为数字,复制从光标所在行向下的n行(含光标所在行)
y1G,ygg 复制从光标所在行到第一行的所有数据
yG 复制从光标所在行到最后一行的所有数据
y0 复制从光标所处的前一个字符至该行第一个字符(包含空白字符)的所有数据
y^ 复制从光标所在处的前一个字符至该行的第一个非空白字符的所有数据
y$ 复制从光标所在处字符到该行行尾的所有数据
Y 复制当前光标所在的行
cc 删除当前光标所在行并切换为插入模式 vim中的改变命令为c,后面可结合光标跳转字符,实现范围改变
ncc n为数字,删除从光标所在行向下的共n行(含光标所在行)并切换为插入模式
cgg,c1G 删除从光标所在行到第一行的所有数据并切换为插入模式
cG 删除从光标所在行到最后一行的所有数据并切换为插入模式
c0 删除从光标所在处的前一个字符至第一个字符(包含空白字符)的所有数据并切换为插入模式
c^ 删除从光标所在处的前一个字符至第一个非空白字符的所有数据并切换为插入模式
c$ 删除从光标所在处字符到该行行尾的所有数据并切换为插入模式,等同于C
p,P p:缓冲区存的如果为整行,则粘贴在当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
    P:缓冲区存的如果为整行,则粘贴在当前光标所在行的上方;否则,则粘贴至当前光标所在处的前方
~ 将当前光标所在字符改变大小写
n~ n为数字,将从当前光标所在字符开始的n个字符改变其大小写
g~~ 改变当前光标所在行字母的大小写
U 将可视化模式下选择的字母全部改成大写 vim中大小写转换的命令是gu和gU,gu代表转化为小写,gU代表转化为大写,后面跟光标跳转字符(对这两个命令的地址界定),代表从当前光标所在处(行)到指定位置进行转换
u 将可视化模式下选择的字母全部改成小写
gUU 将当前光标所在行字母全部改成大写
ngUU n为数字,将从当前光标所在行向下共n行的字母全部改成大写
nguu n为数字,将从当前光标所在行向下共n行的字母全部改成小写
J 将当前光标所在行与下一行的数据结合成同一行
u 撤销最近的更改
nu n为数字,撤销最近的n次更改
U 撤销光标落在这行后所有此行的更改
Ctrl+r 重做撤销的更改
. 重复前一个操作
n. n为数字,重复前一个操作n次
ZZ 保存后离开
ZQ 不保存而退出
进入插入或替换的编辑模式
i,I 进入插入模式,i为从当前光标所在处插入,I为从当前所在行的第一个非空格字符处开始插入
a,A 进入插入模式,a为从当前光标所在处的下一个字符开始插入,A为从光标所在行的最后一个字符(包含空白字符)处开始插入
o,O 进入插入模式,o为在当前光标所在处的下一行插入新的一行;O为在目前光标所在处的上一行插入新的一行
r 进入替换模式,只替换光标所在处的字符一次
R 进入替换模式,会一直替换光标所在的文字,直到按下Esc键
Esc 退出编辑模式,回到一般模式中
命令行模式的保存、离开等命令
:w 将编辑的数据写入硬盘文件中
:w! 若文件属性为“只读”时,强制写入该文件,不过,到底能不能写入,与文件权限有关;
    若对文件所在目录有写权限,当对文件没有写权限而强制写入时,会将原文件删除,并创建与原文件同名的新文件
:q 离开vim
:q! 若曾修改过文件,又不想保存,使用:q!为强制离开不保存文件
:wq,:wq! wq为保存后离开;wq!为强制保存后离开
:x,:x! :x为保存后离开;:x!为强制保存后离开
:w/PATH/TO/FILE 将编辑后的数据保存为另一个文件;但若再次编辑仍是在原文件上编辑
:r/PATH/TO/FILE 在编辑的数据中,读入另一个文件的数据,即将FILE这个文件的内容追加到光标所在行的下一行
:地址定界 w /PATH/TO/FILE 将地址定界中的内容保存为另一个文件
:!COMMAND 暂时离开vim到命令行模式下执行COMMAND;按Enter返回vim
:r!COMMAND 在编辑的数据中,读入COMMAND命令的执行结果,即将COMMAND这个命令的执行结果追加到光标所在行的下一行
:e!,:edit! 撤销对文件做的所有更改,回到上一次保存的状态
vim环境的更改
:set nu 显示行号,设置之后,会在每行的前缀显示该行的行号
:set nonu 与set nu相反,为取消行号


四、地址定界与查找替换


1、地址定界

vim中,我们通常需要对范围内的数据进行操作,那么如何进行范围确定呢?这时,就需要用到vim中的地址定界了,其常用的有以下几种

#:具体第#

m,n:从第m行的绝对行首至第n行的行尾

m,+n:从第m行的绝对行首至m+n行的行尾

.:当前行

$:最后一行整行

%:全文,相当于1,$

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

/pat1/,/part2/:从第一次被part1模式匹配到的行的绝对行首开始,一直到第一次被part2匹配到的行的行尾结束

m,/part/:从m行的绝对行首开始,一直到第一次被part匹配到的行的行尾结束


2、查找与替换

在进行地址定界之后,我们就可以在后面跟一些操作命令来实现范围操作,其中的查找与替换时我们比较常用的编辑命令,其具体命令与用法如下:

s:在扩展命令行模式下完成查找替换操作

格式:s/要替换的内容/替换为的内容/修饰符

需要注意的是:

u  要替换的内容可用正则表达式;

u  替换为的内容,不能使用模式,但可以使用\1,\2,…等后向引用符号引用要替换的内容中的组;还可以使用&引用要替换的内容查找到的整个内容;

u  分隔符/可替换为其他字符, 常用的有#@

修饰符:

i:忽略大小写

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

c:每次替换前询问


五、可视化与多窗口


1、可视化模式

我们上面介绍了使用vim的地址定界来实现范围操作,而除了地址定界之外,vim还提供了可视化模式来实现连续范围选取,共有三种选择方式:

u  v:字符选择,会将光标经过的字符选择

u  V:行选择,会将光标经过的行选择

u  Ctrl+v:块选择,可以用长方形的方式选择数据

我们可以对被选择的突出显示的数据进行删除,复制,变更,过滤,搜索替换等。


2、多文件切换

vim的命令 语法中,我们知道vim可以打开多个文件,那么我们如何在各文件间切换呢?vim对于多文件在扩展命令模式下有特定的命令,下面来看一下:

:next,:n 下一个文件

:prev,:N 前以上文件

:first 第一个文件

:last 最后一个文件

:wall 保存所有文件

:qall 退出所有文件

:file 列出目前这个vim打开的所有文件

:wqall 保存并退出所有文件


3、多窗口分割

在一般窗口界面下的编辑软件大多有切割窗口或是冻结窗口的功能来将一个文件切割成多个窗口,vim同样具有这个功能,这就是vim的多窗口功能。

当我们对多文件进行多窗口分割时,我们可以使用如下的命令:

vim -o|-O FILE1 FILE2…

其中-o表示水平分割;-O表示竖直分割。

对于单文件同样可以分割窗口,分割按键如下

:sp [filename]:打开一个新窗口(水平分割),如果有加filename,表示在新窗口打开一个新文件,否则表示两个窗口为同一个文件内容(同步显示)

Ctrl+w,ssplit,水平分割窗口

Ctrl+w,vvertical,竖直分割窗口

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

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

:wqall:保存并退出

而在vim的多窗口分割后,在窗口间切换时的按键为:Ctrl+wArrow

六、vim的环境设置与记录


我们会发现,我们在vim中对字符进行查找、复制、替换等操作时,总会有一些特定的显示格式,而这些格式就是vim的环境设置了。

vim中分别 有针对全局和和个人进行设置的配置文件,其中全局配置文件为/etc/vimrc,个人配置文件为~/.vimrc。对于全局配置文件,我们一般不建议修改,一般建议将配置写到个人配置文件。

同样的,如果我们仅希望一些配置只在当前vim中生效,那么我们可以在扩展命令模式下通过命令来进行设置,在扩展命令模式下的设置仅对当前vim进程有效;在扩展命令模式下可使用:set all来显示目前所有的环境参数设置值;用:set来显示与系统默认值不同的设置参数。

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

(0)
luoliumengluoliumeng
上一篇 2016-08-12
下一篇 2016-08-12

相关推荐

  • Shell编程之位置变量

           linux中命令可以接受参数,同样的,shell脚本也可以接受参数。这些参数用$1、$2、$3…$n表示。       $0  表示脚本本身       $1  传递给脚本的第1个参数 $2  传…

    Linux干货 2016-08-12
  • 学习宣言

    已经虚度了第一个关键的10年,不能再失去下一个10年,3年内年薪20w,5年内年薪30w。

    Linux干货 2016-12-26
  • 文件元数据信息详解

    文件元数据信息详解 文件的元数据是什么? 文件的数据分为两类:一类为数据,即文件的实际内容;另一类为元数据,用来描述文件的特征。 元数据内容: 文件名 文件大小 文件所在数据块 数据块的大小 文件类型 文件所在的Inode 硬链接次数 权限 属主id 属组id 最近一次访问时间戳 最近一次更改文件内容的时间戳 最近一次更改文件元数据的时间戳 查看文件的元数据…

    Linux干货 2017-07-09
  • linux下find(文件查找)命令的详解

    文件查找命令locate和find详解 locate 配合数据库缓存,快速查看文件位置,非实时查找( 数据库查找) find 实际搜寻硬盘查询文件名称 ,实时查找 locate简介 locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locat…

    Linux干货 2016-08-18
  • SRPM具体使用过程

    SRPM 简介:SRAM是Source RPM的意思,就是RPM的源代码的意思,这个SRPM就是没有经过编译的源代码。如果我们想要安装一个SRPM软件,那么就必须: 先将该软件以RPM管理的方式编译,将SRPM编译成为RPM文件 然后将编译完成的RPM文件安装到Linux系统中。 一.程序包编译: 程序包编译安装: Application-VERSION-r…

    Linux干货 2016-08-24
  • Linux各发行版、哲学思想、基础目录

    Linux发行版本? Linux操作系统的发行版本可以大体分为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行版本,前者以著名的Redhat(RHEL)为代表,后者以Debian为代表。               R…

    Linux干货 2016-10-26

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-12 09:06

    关于vim文本编辑器的用法总结的很全面。排版也有很用心哦,