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

文章目录

  • [S08L36 Exercise 10 - Visual Mode](#S08L36 Exercise 10 - Visual Mode)
    • [1 训练目标](#1 训练目标)
    • [2 操作指令](#2 操作指令)
      • [2.1. 打开 visual-practice.txt 文件](#2.1. 打开 visual-practice.txt 文件)
      • [2.2. 字符级可视化模式练习 Characterwise Visual Mode](#2.2. 字符级可视化模式练习 Characterwise Visual Mode)
      • [2.3. 文本行可视化模式练习 Linewise Visual Mode](#2.3. 文本行可视化模式练习 Linewise Visual Mode)
      • [2.4. 区块级可视化模式练习 Blockwise Visual Mode](#2.4. 区块级可视化模式练习 Blockwise Visual Mode)
    • [3 退出 Vim](#3 退出 Vim)
  • [S08L37 Exercise 10 - Visual Mode - Walkthrough](#S08L37 Exercise 10 - Visual Mode - Walkthrough)

写在前面

千里之行始于足下,不知不觉中已经整理了八个章节的内容。最近更新笔记也明显感觉到速度有所放缓,这既说明当前这部分内容我还没有熟练掌握,同时也说明眼下所做的工作是十分有必要的------因为 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 文件夹下):

bash 复制代码
cd Downloads
cd vimclass
vim visual-practice.txt

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

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

markdown 复制代码
Use characterwise visual mode to delete this => DELETE ME, DELETE ME, Yes!!! <=

删除后变为:

markdown 复制代码
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 的行级可视化模式合并为一行:

markdown 复制代码
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?

最终效果:

markdown 复制代码
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 命令显示行号来判定这段文本是否属于同一行)

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

markdown 复制代码
This entire paragraph should be on the same line.

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

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

markdown 复制代码
##############################################################################
Header
Description
##############################################################################

使其变为以下效果:

markdown 复制代码
##############################################################################
                                    HEADER
                                 DESCRIPTION
##############################################################################

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

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

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

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

使其最终变为:

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

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

markdown 复制代码
"001","Q-Tips"

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

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

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

改动前的原始版本如下:

markdown 复制代码
This is a comment.
So is this.
Why, this is also a comment.
Please, comment us out!

改动后要变为:

markdown 复制代码
# 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,完成 # 字样的插入。

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

markdown 复制代码
# This is a comment.
# So is this.
# Why, this is also a comment.
# Please, comment us out!

再改为下列版本:

markdown 复制代码
" This is a comment.
" So is this.
" Why, this is also a comment.
" Please, comment us out!

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

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

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

markdown 复制代码
>
>>>
>>>>>
>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>>>
>>>>
>

使其最终变为:

markdown 复制代码
> # 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 来启动。 ↩︎

相关推荐
千航@abc5 小时前
vim文本编辑器
linux·运维·编辑器·vim
千航@abc5 小时前
vim文本编辑器三种模式的转换关系
linux·运维·编辑器·vim
小志biubiu5 小时前
技术洞察:C++在后端开发中的前沿趋势与社会影响
开发语言·c++·笔记·学习·区块链·c11
安冬的码畜日常5 小时前
【Vim Masterclass 笔记20】第九章:Vim 的个性化设置 + S09L38:Vim 设置与 vimrc 文件的用法示例(一)
笔记·vim·自学笔记·vimrc·vim设置·vim定制
mit6.8246 小时前
[实现Rpc] 环境搭建 | JsonCpp | Mudou库 | callBack()
网络·c++·笔记·网络协议·rpc
doubt。6 小时前
【BUUCTF】[NCTF2019]SQLi
网络·笔记·sql·安全·web安全
qw9499 小时前
Maven学习笔记
笔记·学习·maven
有一个好名字13 小时前
sqlfather笔记
笔记
freexyn13 小时前
Matlab自学笔记四十五:日期时间型和字符、字符串以及double型的相互转换方法
开发语言·笔记·matlab