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

news/2025/1/21 0:38:58/

文章目录

  • S08L36 Exercise 10 - Visual Mode
    • 1 训练目标
    • 2 操作指令
      • 2.1. 打开 visual-practice.txt 文件
      • 2.2. 字符级可视化模式练习 Characterwise Visual Mode
      • 2.3. 文本行可视化模式练习 Linewise Visual Mode
      • 2.4. 区块级可视化模式练习 Blockwise Visual Mode
    • 3 退出 Vim
  • 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 文件夹下):

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
##############################################################################

使其变为以下效果:

##############################################################################HEADERDESCRIPTION
##############################################################################

实现方法:先将光标定位到 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 来启动。 ↩︎


http://www.ppmy.cn/news/1564793.html

相关文章

K近邻算法实战——电影分类算法

文章目录 一、k最近邻算法的原理二、k最近邻算法过程详解三、kNN算法的注意事项1. k值的选取2. 距离的度量(1)欧氏距离(2)曼哈顿距离(3)切比雪夫距离3. 特征归一化四、k最近邻算法案例分享1. 电影分类kNN算法实战五、kNN算法优缺点一、k最近邻算法的原理 简单来说,kNN可…

Rust 数据类型详解

一、标量类型&#xff08;Scalar Types&#xff09; 标量类型代表一个单独的值。Rust 中有四大基本标量类型&#xff1a;整数&#xff08;integer&#xff09;、浮点数&#xff08;floating-point number&#xff09;、布尔&#xff08;boolean&#xff09;和字符&#xff08;…

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证6)

重新创建WebApi项目&#xff0c;安装Microsoft.AspNetCore.Authentication.JwtBearer包&#xff0c;将之前JwtBearer测试项目中的初始化函数&#xff0c;jwt配置类、token生成类全部挪到项目中。   重新编写login函数&#xff0c;之前测试Cookie和Session认证时用的函数适合m…

【RK3588 docker编译问题】

问题集合 问题1&#xff1a; 编译lunch出现问题 12:31:21 Build sandboxing disabled due to nsjail error. 12:31:22 Build sandboxing disabled due to nsjail error. In file included from build/make/core/config.mk:313: In file included from build/make/core/envset…

【环境安装】安装LLaMA-Factory

【机器背景说明】Linux-Centos7&#xff1b;显卡驱动&#xff1a;Driver Version: 460.106.00&#xff1b;Tesla P40 * 2 【目标环境说明】 torch1.13.1cu116 llamafactory0.9.2.dev0 1.CUDA11.6软件安装 CUDA11.6软件有两种安装方式,一个是直接安装到Pip环境中、一种是下…

Java爬虫获取淘宝item_search_suggest API接口的搜索词推荐

在电商领域&#xff0c;获取搜索词推荐对于优化用户体验、提升搜索效率和进行市场分析具有重要意义。淘宝作为国内领先的电商平台&#xff0c;提供了丰富的API接口&#xff0c;其中item_search_suggest接口可以获取搜索词推荐。本文将详细介绍如何使用Java爬虫技术调用该API接口…

WinHttp API接口辅助类实现GET POST网络通讯

1、简述 近期需要在MFC基础上开发网络Http通讯,开始使用的WinINet进行通讯,后面发现WinINet对连接超时这块不支持设置,在网上搜索了几种方式效果都不太好,于是决定用WinHttp API接口进行通讯,分别对GET、POST进行了封装。 2、使用到接口 2.1、WinHttpOpen WinHttpOpen 是…

(学习总结20)C++11 可变参数模版、lambda表达式、包装器与部分新内容添加

C11 可变参数模版、lambda表达式、包装器与部分新内容添加 一、可变参数模版基本语法及原理包扩展emplace系列接口 二、lambda表达式lambda表达式语法捕捉列表lambda的原理lambda的应用 三、包装器bindfunction 四、部分新内容添加新的类功能1.默认的移动构造和移动赋值2.声明时…