Linux学习教程(第五章 Vim文本编辑器及其应用)二

第五章 Vim文本编辑器及其应用

七、Linux Vim可视化模式及其用法

相信大家都使用过带图形界面的操作系统中的文字编辑器,用户可以使用鼠标来选择要操作的文本,非常方便。在 Vim 编辑器中也有类似的功能,但不是通过鼠标,而是通过键盘来选择要操作的文本。

在 Vim 中,如果想选中目标文本,就需要调整 Vim 进入可视化模式,如表 1 所示,通过在 Vim 命令模式下键入不同的键,可以进入不同的可视化模式。

表 1 进入Vim可视化模式的方式

命令功能
v(小写)又称字符可视化模式,此模式下目标文本的选择是以字符为单位的,也就是说,该模式下要一个字符一个字符的选中要操作的文本。
V(大写)又称行可视化模式,此模式化目标文本的选择是以行为单位的,也就是说,该模式化可以一行一行的选中要操作的文本。
Ctrl+v(组合键)又称块可视化模式,该模式下可以选中文本中的一个矩形区域作为目标文本,以按下 Ctrl+v 位置作为矩形的一角,光标移动的终点位置作为它的对角。

以字符可视化模式为例,Vim 成功进入该模式的标志是窗口底部出现 --VISUAL-- 标志,如图 2 所示。

图 2 Vim成功进入字符可视化模式

相应地,进入行可视化模式的标志是图 2 标记处显示 --VISUAL LINE--;进入块可视化模式的标志是图 2 标记处显示 --VISUAL BLOCK--。

需要注意的是,当选中文本并做完相应操作(例如选中文件并按 p 键将其复制到剪贴板中)后,Vim 会自动从可视化模式转换为命令模式。当然,也可以再次按 v(或者 V、Ctrl+v)手动退出可视化模式。

另外值得一提的是,之前所学的在 Vim 命令模式下编辑文本的很多命令,在可视化模式下仍然可以使用。表 3 中罗列出了常用的几个可以在可视化模式下使用的命令。

表 3 可视化模式支持使用的命令

命令功能
d删除选中的部分文本。
D删除选中部分所在的行,和 d 不同之处在于,即使选中文本中有些字符所在的行没有都选中,删除时也会一并删除。
y将选中部分复制到剪贴板中。
p(小写)将剪贴板中的内容粘贴到光标之后。
P(大写)将剪贴板中的内容粘贴到光标之前。
u(小写)将选中部分中的大写字符全部改为小写字符。
U(大写)将选中部分中的小写字符全部改为大写字符。
>将选中部分右移(缩进)一个 tab 键规定的长度(CentOS 6.x 中,一个tab键默认相当于 8 个空白字符的长度)。
<将选中部分左移一个 tab 键规定的长度(CentOS 6.x 中,一个tab键默认相当于 8 个空白字符的长度)。

八、Vim多窗口编辑模式

在编辑文件时,有时需要参考另一个文件,如果在两个文件之间进行切换则比较麻烦。可以使用 Vim 同时打开两个文件,每个文件分别占用一个窗口。

例如,在査看 /etc/passwd 时需要参考 /etc/shadow,有两种办法可以实现:

  1. 先使用 Vim 打开第一个文件,接着输入命令 ":sp/etc/shadow" 水平切分窗口,然后按回车键;如果想垂直切分窗口则可以输入 ":vs/etc/shadow";
  2. 可以直接执行命令"vim -o 第一个文件名 第二个文件名",也就是 "vim-o /etc/passwd /etc/shadow"。

得到的结果如图 1 所示。

图 1 使用 Vim 打开多个窗口

切换到另一个文件窗口,可以按 "Ctrl+WW" 快捷键

如果想将一个文件的内容全部复制到另一个文件中,则可以输入命令 ":r 被复制的文件名",即可将导入文件的全部内容复制到当前光标所在行下面。

九、Linux Vim批量注释和自定义注释快捷键

使用 Vim 编辑 Shell 脚本,在进行调试时,需要进行多行的注释,每次都要先切换到输入模式,在行首输入注释符"#"再退回命令模式,非常麻烦。

连续行的注释其实可以用替换命令来完成。换句话说,在指定范围行加"#"注释,可以使用 ":起始行,终止行 s/^/#/g",例如:

:1,10s/^/#/g

表示在第 1~10 行行首加"#"注释。"^"意为行首;"g"表示执行替换时不询问确认。如果希望每行交互询问是否执行,则可将 "g" 改为 "c"。

取消连续行注释,则可以使用 ":起始行,终止行s/^#//g",例如:

:1,10s/^#//g

意为将行首的"#"替换为空,即删除。

当然,使用语言不同,注释符号或想替换的内容不同,都可以采用此方法,灵活运用即可。

添加"//"注释要稍微麻烦一些,命令格式为 ":起始行,终止行 s/^/\/\//g"。例如:

:1,5s/^/\/\//g

表示在第 1~5 行行首加"//"注释,因为 "/" 前面需要加转义字符 "\",所以写出来比较奇特。

以上方法可以解决连续行的注释问题,如果是非连续的多行就不灵了,这时我们可以定义快捷键简化操作。格式如下:

:map 快捷键 执行命令

如定义快捷键 "Ctrl+P" 为在行首添加 "#" 注释,可以执行 ":map^P l#<Esc>"。其中 "^P" 为定义快捷键 "Ctrl+P"。注意:必须同时按 "Ctrl+V+P" 快捷键生成 "^P" 方可有效,或先按 "Ctrl+V" 再按 "Ctrl+P" 也可以,直接输入 "^P" 是无效的。

"l#<Esc>" 就是此快捷键要触发的动作,"l" 为在光标所在行行首插入,"#" 为要输入的字符,"<Esc>" 表示退回命令模式。"<Esc>" 要逐个字符输入,不可直接按键盘上的 Esc 键。

设置成功后,直接在任意需要注释的行上按 "Ctrl+P" 快捷键,就会自动在行首加上 "#" 注释。取消此快捷键定义,输入 ":unmap^P" 即可。

我们可以延伸一下,如果想取消文件行首的快捷键,则可以设置 ":map^B 0x",快捷键为 "Ctrl+B", "0" 表示跳到行首,"x" 表示删除光标所在处字符。

再如,有时我们写完脚本等文件,需要在末尾注释中加入自己的邮箱,则可以直接定义每次按快捷键 "Ctrl+E" 实现插入邮箱,定义方法为 ":map^E asamlee@itxdl.net<Esc>"。其中 "a" 表示在当前字符后插入,"samlee@itxdl.net" 为插入的邮箱,"<Esc>" 表示插入后返回命令模式。

所以,通过定义快捷键,我们可以把前面讲到的命令组合起来使用。

将快捷键对应的命令保存在 .vimrc 文件中,即可在每次使用 Vim 时自动调用,非常方便。

十、Vim显示行号

在使用 Vim 进行编辑的过程中,经常会遇到需要同时对连续几行进行操作的情况,这时如果每行都有行号提示,就会非常方便。

在命令模式下输入":set nu"即可显示每一行的行号,如图 1 所示。

图 1 显示行号

如果想要取消行 号,则再次输入":set nonu"即可

如果希望每次打开文件都默认显示行号,则可以编辑 Vim 的配置文件。每次使用 Vim 打开文件时,Vim 都会到当前登录用户的宿主目录(用户配置文件所在地)中读取 .vimrc 文件,此文件可以对 Vim 进行一些默认配置设定。

如果 .vimrc 文件存在,就先读取其中对 Vim 的设置;否则就采取默认配置。在默认情况下,用户宿主目录中是没有此文件的,需要在当前用户的宿主目录中手工建立,如"vim~/.vimrc","~"代表宿主目录,root 的宿主目录为 /root/,普通用户的宿主目录存放在 /home/ 目录下。可以直接使用 Vim 编辑生成此文件,并在此文件中添加一行"set nu",保存并退出,如图 2 所示。

图 2 .vimrc配置文件

之后此用户登录,每次 Vim 打开文件时,都会默认显示行号。常见的可以写入 .vimrc 文件中的设置参数如表 3 所示。

表 3 常见的可以写入.vimrc文件中的设置参数

设置参数含 义
:set nu
:set nonu
设置与取消行号。
:syn on
:syn off
是否依据语法显示相关的颜色帮助。在Vim中修改相关的配置文件或Shell脚本文件 时(如前面示例的脚本/etc/init.d/sshd),默认会显示相应的颜色,用来帮助排错。如果觉得颜色产生了干扰,则可以取消此设置
set hlsearch
set nohlsearch
设置是否将査找的字符串高亮显示。默认是hlsearch高亮显示
set nobackup
set backup
是否保存自动备份文件。默认是nobackup不自动备份。如果设定了:set backup,则会产生“文件名〜”作为备份文件
set ruler
set noruler
设置是否显示右下角的状态栏。默认是ruler显示
set showmode
set noshowmode
设置是否在左下角显示如“一INSERT--”之类的状态栏。默认是showmode显示

设置参数实在太多了,这里只列举了常见的几个,可以使用":set all"命令査看所有的设置参数。这些设置参数都可以写入 .vimrc 配置文件中,让它们永久生效,也可在 Vim 中执行,让它们临时生效。

有关 .vimrc 配置文件,下节再进行详细讲解。

十一、Vim配置文件(.vimrc)详解

Vim 启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim。

Vim 配置文件分为系统配置文件和用户配置文件:

  • 系统配置文件位于 Vim 的安装目录(默认路径为 /etc/.vimrc);
  • 用户配置文件位于主目录 ~/.vimrc,即通过执行 vim ~/.vimrc 命令即可对此配置文件进行合理修改。通常情况下,Vim 用户配置文件需要自己手动创建。

注意,Vim 用户配置文件比系统配置文件的优先级高,换句话说,Vim 启动时,会优先读取 Vim 用户配置文件(位于主目录中的),所以我们只需要修改用户配置文件即可(不建议直接修改系统配置文件)。

Vim 提供的环境配置参数有很多,本节不一一列举,大家可以在 Vim 中输入“:set all”指令来查询,本节仅对常用的几个功能设置做详细介绍。

表 1 Vim环境设置参数

设置参数功能描述
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
设置编码格式,encoding 选项用于缓存的文本、寄存器、Vim 脚本文件等;fileencoding 选项是 Vim 写入文件时采用的编码类型;termencoding 选项表示输出到终端时采用的编码类型。
set nu
set number
nu 是 number 的缩写,所以上面两个配置命令是完全等效的,二选一即可。取消行号可使用 set nonu。
set cursorline突出显示当前行。
set mouse=a
set selection=exclusive
set selectmode=mouse,key
Vim 编辑器里默认是不启用鼠标的,通过此设置即可启动鼠标。
set autoindent设置自动缩进,即每行的缩进同上一节相同。
set tabstop=4设置 Tab 键宽度为 4 个空格。

注意,表中各配置参数前面可以添加冒号(:),也可以省略,两种写法都可以。

通过以上方式,可以对用户配置文件(.vimrc)进行编辑,进而实现对 Vim 的永久自定义。

在 Vim 编辑模式中,通过 “:set nu” 命令也可以让 Vim 显示行号,但只是临时有效,下次使用 Vim 编辑文件还是不显示行号。而本节介绍的编辑配置文件设置 Vim 的方式,对 Vim 的设置是永久的。

十二、如何在Vim中执行Linux命令?

Vim 编辑器不仅提供了大量的命令来方便和加快我们的文件编辑工作,在此编辑器中,我们还可以直接使用 Linux 命令来进一步提高文件编辑的效率,这就是 Vim 编辑器的所谓过滤功能。

由于 Vim 编辑器中支持直接执行 Linux 命令,从而可以方便快捷地对文件完成以下操作:

  1. 将一个命令的输出结果存入正在编辑的文件;
  2. 将正在编辑的文件中的一些数据作为某个指定 Linux 命令的输入。

下面,通过一个简单的例子,来演示如何在 Vim 编辑器中执行 Linux 命令。

首先,我们新建一个 demo.txt 文件,并手动输入如下内容,并将光标移动至下一行开头:

http://c.biancheng.net

在此基础上,按 Esc 令 Vim 返回到命令模式,再按下!!,这时在窗口的左下角会出现:.!的提示信息,这就表明我们可以输入 Linux 命令了。例如,我们输入 date 命令,如图 1 所示:

图 1 向文件中输入命令的执行结果

注意,窗口左下角的:.!表示操作文本的范围,其中 . 表示从光标所在行开始,! 表示后续会执行 Linux 命令,整体表示命令的执行结果将插入到光标所在行的位置,因此,如果光标所在位置处有数据,就会被命令的执行结果直接覆盖掉。

确认光标位置无误后,按 Enter(回车)键,这时会发现系统当前的日期和时间写到了 demo.txt 文件中第 2 行的位置:

http://c.biancheng.net
Tue Nov 12 07:20:49 PST 2017

在此基础上,再向该文件中手动输入以下数据:

http://c.biancheng.net
Tue Nov 12 07:20:49 PST 2017
1 C语言中文网
3 c.biancheng.net
2 Linux教程

输出完成之后,将光标调整至第 3 行第 1 个字符的位置,然后按 Esc 使 Vim 进行命令模式,并按下!}组合键,你会看到窗口的左下角出现:.,$!的提示信息,如图 2 所示。

图 2 Vim命令模式下按 !} 的提示信息

其中 . 表示光标所在的当前行,$ 表示文件最后一行,因此和之前不同,这次选取的是文件中第 3 行及之后的所有内容。

在此基础上,我们使用 sort 命令对选中文本按照第 1 列进行降序排序,执行命令如下:

:.,$!sort -nr -k1

有关 sort 命令的用法,由于不是本节重点,这里不再做过多讲解。

按 Enter(回车)键,可以看到,demo.txt 文件中的内容变成:

http://c.biancheng.net
Tue Nov 12 07:20:49 PST 2017
3 c.biancheng.net
2 Linux教程
1 C语言中文网

由此,通过将所选文件作为 sort 命令的输入,实现了对该部分文本的降序排序操作。

除此之外,表 3 罗列出了常用的几种 Vim 和 Linux 命令搭配使用的方式

表 3 Vim执行Linux命令的方式

格式功能
:!命令直接运行一个 Linux 命令,运行完毕之后,即可返回到 Vim 中。
:w!命令将 Vim 中所有的文本内容作为指定命令的输入。但命令的执行结果不会写入到当前文件中。
:r!命令将命令执行的结果写入到当前 Vim 中,例如 :!ls 表示将 ls 的执行结果输入到 Vim 中。
:nr!命令其中 n 为数字,表示将命令的执行结果写入到 Vim 第 n 行的位置。例如,:3r!date 表示将 date 命令的执行结果写入到第 3 行文本处。
:n,m!命令其中 n 表示起始行号,m为结束行号,功能是将 Vim 中指定的部分文本作为某个命令的输入,同时将命令的输出也插入到当前指定的位置。
:n,m w!命令其中 n 表示起始行号,m为结束行号,其功能是 Vim 中指定的部分文本作为某个命令的输入,但命令的执行结果不会写入到文件中。
!!date向 Vim 中插入当前时间。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值