文章目录
- [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,不仅可以忽略鼠标的存在,还可以告别对 Shift 和 Ctrl 这两个批量编辑必备功能键的重度依赖(想想 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 键实现);接着按 D 或 X 删除高亮选中的文本。此时 Vim
回到正常模式(normal mode)。
按 L 将光标右移一列,并输入 CtrlV 再次进入块级可视化模式;再次键入六次 J 键将光标下移至 7","Bottled Water"
这行,按 D 或 X 键完成删除操作。
下一个练习,要求用块级可视化模式,在下列每行文字的开头插入 #
字样。
改动前的原始版本如下:
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
本节为同步练习点评课。视频漏掉了将注释标记由 #
批量改为 "
的扩展练习,也没有需要特别补充的知识点。
这里仅列出实测过程中的几个问题:
- 第一个小练习中不能使用尖括号对应的文本对象,因为要删除的内容不在一对完整的
<>
内,而是><
内。 Windows
系统下的光标不是闪烁的矩形,而是一条竖直的细线。它默认选中的字符位于该细线的 右侧 ,执行d
命令时会一并删除。Vim
行号的另一个用法,在于验证某段文字内容是否位于同一行内。- 深度关注批量操作的特点:块级可视化模式下,无论是在每行行首还是行尾批量插入文字内容,均要用大写的
I
和A
进入插入模式;实际编辑虽然只会实时显示第一行的编辑情况,但键入 Escape 后,Vim
会自动补全其余行的内容(这可能也是为了降低多行同时渲染带来的性能损耗吧)。