自学内容网 自学内容网

【Vim Masterclass 笔记19】S08L36 + L37:第八章 Vim 可视化模式同步练习(含点评课内容)

写在前面
千里之行始于足下,不知不觉中已经整理了八个章节的内容。最近更新笔记也明显感觉到速度有所放缓,这既说明当前这部分内容我还没有熟练掌握,同时也说明眼下所做的工作是十分有必要的——因为 Learning is a painful process。现在越来越不相信寓教于乐的谎言了,我只相信点点滴滴地用心付出,相信耐心倾注时间和精力的神奇力量。一旦掌握了 Vim 的 visual mode,不仅可以忽略鼠标的存在,还可以告别对 ShiftCtrl 这两个批量编辑必备功能键的重度依赖(想想 notepad++、SublimeText 批量编辑的各种组合键),简直不要太爽。


S08L36 Exercise 10 - Visual Mode

1 训练目标

熟悉 Vim 可视化模式的各种用法。1

2 操作指令

2.1. 打开 visual-practice.txt 文件

Vim 打开源码包内的练习文件 visual-practice.txt(默认解压到 Downloads 文件夹下):

cd Downloads
cd vimclass
vim visual-practice.txt

2.2. 字符级可视化模式练习 Characterwise Visual Mode

试将 =><= 之间的文字内容用字符级视觉模式删除。这是删除前的原始版本:

Use characterwise visual mode to delete this => DELETE ME, DELETE ME, Yes!!! <=

删除后变为:

Use characterwise visual mode to delete this =><=

具体实现:先将光标定位到单词 DELETE 前的空格位置,例如使用 tD 实现。然后键入 V 进入字符级可视化模式,并通过输入 L、或者 W、或者使用正向查找 / 定位到 < 之前的字符,具体方式自行确定,只要不选中 < 即可。最后键入 D 实现文字删除。

下一个练习,要求将第 3 行的句子 Yank this sentence. 存入未命名寄存器。注意不要包含该句后面的空格。具体实现:先将光标定位到这句话的任意位置(例如输入 JJ0 将光标定位到该句开头);然后键入 YIS 实现复制。这里的 yis 表示仅复制句子内容本身。

要查看未命名寄存器中的内容,可输入命令 :reg " + Enter。内容如下:

"" Yank this sentence.

2.3. 文本行可视化模式练习 Linewise Visual Mode

试将下列文字通过 Vim 的行级可视化模式合并为一行:

This entire paragraph should be on the same line.
But it isn't!
I don't know who typed this, but they didn't do a
very
good
job.
Did they?

最终效果:

This entire paragraph should be on the same line.  But it isn't!  I don't know who typed this, but they didn't do a very good job.  Did they?

(注意:只要显示器不够大,一行文字就很可能会折行。此时可以通过 :set nu + Enter 命令显示行号来判定这段文本是否属于同一行)

为此,需要先将光标定位到如下所示的第一行的任意位置:

This entire paragraph should be on the same line.

然后输入 ShiftV 进入行级可视化模式;键入 IP 选中整个段落,这里的 ip 表示 内部段落(inner paragraph)。最后,输入 ShiftJ 完成文本连接操作。

下一个练习,需要利用 Vim 的可视化模式将下列文字内容居中排列:

##############################################################################
Header
Description
##############################################################################

使其变为以下效果:

##############################################################################
                                    HEADER
                                 DESCRIPTION
##############################################################################

实现方法:先将光标定位到 Header 这一行,然后按 ShiftV 启用行级可视化模式;键入 J 让光标下移一行,并输入 ShiftU 将选中内容全部转为大写;再按 GV 重新选中这些文本行,输入命令 :center + Enter 实现文字居中。

2.4. 区块级可视化模式练习 Blockwise Visual Mode

试用 Vim 的区块级可视化模式,对如下文字进行批量操作:

Rank,Item
"001","Q-Tips"
"002","Paper Towels"
"003","Toilet Paper"
"004","Liquid Detergent"
"005","Mouthwash"
"006","Cereal"
"007","Bottled Water"

使其最终变为:

Rank,Item
1,"Q-Tips"
2,"Paper Towels"
3,"Toilet Paper"
4,"Liquid Detergent"
5,"Mouthwash"
6,"Cereal"
7,"Bottled Water"

为此,先将光标定位到如下这行的开头位置:

"001","Q-Tips"

接着输入 CtrlV 启用块级可视化模式 2。键入 L 选中开头两列,然后下移光标到 "007","Bottled Water" 这行(具体可通过按六次 J 键实现);接着按 DX 删除高亮选中的文本。此时 Vim 回到正常模式(normal mode)。

L 将光标右移一列,并输入 CtrlV 再次进入块级可视化模式;再次键入六次 J 键将光标下移至 7","Bottled Water" 这行,按 DX 键完成删除操作。

下一个练习,要求用块级可视化模式,在下列每行文字的开头插入 # 字样。

改动前的原始版本如下:

This is a comment.
So is this.
Why, this is also a comment.
Please, comment us out!

改动后要变为:

# This is a comment.
# So is this.
# Why, this is also a comment.
# Please, comment us out!

为此,先将光标定位到 This is a comment. 这行的 T 字符上,并按 CtrlV 进入块级可视化模式;接着输入 JJJ 高亮选中后三行的首字符。最后通过输入 ShiftI + #Space + Escape,完成 # 字样的插入。

接着,在改好的文字基础上,在实现另一个练习效果。也就是将刚才的操作结果:

# This is a comment.
# So is this.
# Why, this is also a comment.
# Please, comment us out!

再改为下列版本:

" This is a comment.
" So is this.
" Why, this is also a comment.
" Please, comment us out!

注意:双引号标记的内容在 vimrc 文件中代表注释信息。

GV 快速重新选中刚才的高亮区域,再按 C" + Escape# 批量改为 "

最后一个练习项目,需要再用 Vim 的块级可视化模式,在如下内容的每行末尾分别添加 # EOL 字样:

>
>>>
>>>>>
>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>>>
>>>>
>

使其最终变为:

> # EOL
>>> # EOL
>>>>> # EOL
>>>>>>> # EOL
>>>>>>>>>> # EOL
>>>>>>> # EOL
>>>>> # EOL
>>>> # EOL
> # EOL

为此,先将光标定位到文本区首行首列(可通过 27gg 实现);然后按 CtrlV 开启块级可视化模式,并按八次 J 键选中整个文本块的首列;接着键入 $ 来选中各行其余文本。最后按 ShiftA 批量添加文字,输入 Space + # EOL + Escape 即可。

3 退出 Vim

若要放弃文件变更以便下次重新练习,使用退出命令 :q! + Enter


S08L37 Exercise 10 - Visual Mode - Walkthrough

本节为同步练习点评课。视频漏掉了将注释标记由 # 批量改为 " 的扩展练习,也没有需要特别补充的知识点。

这里仅列出实测过程中的几个问题:

  1. 第一个小练习中不能使用尖括号对应的文本对象,因为要删除的内容不在一对完整的 <> 内,而是 >< 内。
  2. Windows 系统下的光标不是闪烁的矩形,而是一条竖直的细线。它默认选中的字符位于该细线的 右侧,执行 d 命令时会一并删除。
  3. Vim 行号的另一个用法,在于验证某段文字内容是否位于同一行内。
  4. 深度关注批量操作的特点:块级可视化模式下,无论是在每行行首还是行尾批量插入文字内容,均要用大写的 IA 进入插入模式;实际编辑虽然只会实时显示第一行的编辑情况,但键入 Escape 后,Vim 会自动补全其余行的内容(这可能也是为了降低多行同时渲染带来的性能损耗吧)。

  1. 本节练习另附精美排版 PDF 格式,阅读体验更佳,详见:vimclass/Exercise-10-VisualMode.pdf ↩︎

  2. 为避免和系统内置的粘贴快捷键相冲突,对于 Windows 版本的 Vim,块级可视化模式通过 Ctrl + Q 开启;而在 WSL 环境下 Ubuntu 系统中的 Vim,则需要通过 Ctrl + Alt + V 来启动。 ↩︎


原文地址:https://blog.csdn.net/frgod/article/details/145227939

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!