当前位置: 首页 > news >正文

【Vim Masterclass 笔记01】Section 1:Course Overview + Section 2:Vim Quickstart

文章目录

  • Section 1:Course Introduction 课程概述
    • S01L01 Course Overview 课程简介
      • 课程概要
    • S01L02 Course Download 课程资源下载
    • S01L03 What Vim Is and Why You Should Learn It 何为 Vim?学来干啥?
      • 1 何为 Vim
      • 2 为何学 Vim
  • Section 2:Vim Quickstart 快速上手 Vim
    • S02L04 Modes(Vim 的模式)
    • S02L05 Vim Quickstart:Vim 快速上手
    • S02L06 Exercise 01 Creating and Editing a New File with Vim
      • 1 训练目标
      • 2 操作指令
        • 1 创建文件
        • 2 启用插入模式
        • 3 给文件添加些文字
        • 4 继续添加文字内容
        • 5 保存文件
        • 6 验证文件已保存
    • S02L07 Exercise 01 Creating and Editing a New File with Vim - Walkthrough(练习01点评)

【写在前面】
从这一篇开始,我将陆续把 Udemy 上的《Vim Masterclass》的学习笔记整理出来放到对应的专栏中,一来可以巩固所学方便查找,二来对于有 Vim 学习需求的朋友也可以作为参考快速上手。在我看来,Vim 就像榴莲,爱之者为其疯狂,恨之者避恐不及。为了解放生产力,花点时间琢磨一下 Vim 还是很有必要的。

Section 1:Course Introduction 课程概述


S01L01 Course Overview 课程简介

课程概要

  1. 快速上手:一个简单的 Vim 练习(最基础)
  2. 以 Vim 特有的方式思考问题
  3. 转换与替换(Transformations & Substitutions):从简单替换入手,进而实现在多个文件中全局替换
  4. Vim 高级功能
    1. 文本对象(Text objects)
    2. 宏(Macros)
  5. Vim 的设置与自定义配置
  6. Vim 图形界面简介

课程使用的 Vim 版本:v8.0


S01L02 Course Download 课程资源下载

通过命令行解压课程源码包:

# unzip -d <path> zipFile
$ unzip -d vimclass vimclass.zip

解压时,目标文件夹若不存在,则会自动创建。

源码包:已上传 CSDN 下载频道,也可从百度网盘下载:vimclass.zip,提取码:i4ya


S01L03 What Vim Is and Why You Should Learn It 何为 Vim?学来干啥?

1 何为 Vim

Vim 是一款高级文本编辑器。

Vim 名称由来 ——

Vim = Vi + Improved

vi 其实是 visual 的缩写。

vi 已被 Vim 事实上取代。

2 为何学 Vim

  1. Vim 无处不在
  2. 功能强大(宏、寄存器、命令、重复、自动补全、文本对象、查询筛选工具、全局替换……)
  3. Vim 的知识点高度 可迁移:将 Vim 集成到 bash 命令行、Gmail 邮箱、定制插件等
    1. 支持 Vim 快捷键的工具:AtomEclipseAbiwordKateSublime TextNotepad++XCode……
  4. 跨平台
  5. Vim 同时支持文字界面(TUI)与图形界面(GUI)
  6. 语法高亮:美观、便于调试(支持各种格式配置文件)
  7. 命令方便识记(i = insert, q = quit, d = delete)
  8. Vim 更像一门语言(d3w: delete 3 words)
  9. 文档极其全面(Vim is thoroughly documented)
  10. 有趣

Section 2:Vim Quickstart 快速上手 Vim

S02L04 Modes(Vim 的模式)

Vim 三大模式:

  • Normal / Command mode:正常模式(命令模式)
  • Insert mode:插入模式
  • Command-line / cmdline / line mode:命令行模式(单行模式)

说明

实测时,通过查看内置帮助文档(使用 :help intro)得知,Ubuntu 上的 Vim 版本为 8.1.2269。此时支持的 Vim 基本模式已增至 7 种:

  1. Normal
  2. Visual
  3. Select
  4. Insert
  5. Command-line / Cmdline
  6. Ex
  7. Terminal-Job

Vim has 7 modes now (v8.1.2269)


S02L05 Vim Quickstart:Vim 快速上手

打开一个命令行会话:

  • Mac OS:Spotlight ➡️ “terminal” ➡️ “vim”
  • Windows:搜索栏 ➡️ “commandline”(“命令提示符”) ➡️ “vim”

Vim 的关闭::q!Enter

进入输入模式:(正常模式下)i

退出输入模式:Esc

保存并退出 Vim:(正常模式下):wqEnter

  • w:write,写入、保存
  • q:quit,退出

S02L06 Exercise 01 Creating and Editing a New File with Vim

1 训练目标

  • 练习用 Vim 创建文件、编辑文件。
  • 练习 Vim 三大模式的切换:常规模式(normal mode)、插入模式(insert mode)、命令行模式(commandline / cmdline / line mode

练习过程中,您将使用 Vim 创建一个新文件,并输入一些内容,最后保存。1

2 操作指令

1 创建文件

先在本地打开一个命令行会话,再用 Vim 编辑一个名为 myday.txt 的新文件。在命令行输入 vim myday.txt,按回车键 Enter 确认:

vim myday.txt
2 启用插入模式

这样就打开了一个新文件,并处在 Vim 的常规模式(normal mode)下。按下小写的 I 键进入插入模式(insert mode)

3 给文件添加些文字

接下来输入一些内容。比如写几句话来描述您一天的开始。输入过程中如果写错了,可以用退格键 Backspace 进行更正。

4 继续添加文字内容

继续向文件添加文本,输入三件让您心怀感激的事物。写完后,按 Esc 键返回常规模式。

5 保存文件

接着保存您的变更内容。这需要在常规模式下进行。若不确定是否在常规模式,可以再按一次 Esc 键进行确认。下一步,输入 :wq + Enter 保存文件并退出 Vim

6 验证文件已保存

您可以通过查看文件内容来确认是否已经保存成功。比如使用 Vim 编辑器打开该文件:输入 vim myday.txt + Enter 即可:

vim myday.txt

这样就能看到您输入并保存到文件中的内容。由于未做任何修改,也没有什么需要保存的变更内容,直接使用 :q! + Enter 键退出即可。


S02L07 Exercise 01 Creating and Editing a New File with Vim - Walkthrough(练习01点评)

本节为 L06 的讲解课(walkthrough)。

要求:必须动手练习。

:q! 中的 ! 表示放弃更改。

Git 命令 DIY

提交 git 的版本通常很固定:git add *; git commit -m 'some comments'; git push,虽然 Windows Terminal 中可以配置 PowerShell 的历史命令,但总要切到中间修改注释信息,时间一长感觉不太高效。如果有个自定义命令,把提交注释放到最后,就会方便很多:

$ git diyCmd 'some comment'

于是尝试用 git 别名:(acpaddcommitpush 的缩写)

$ git config --global alias.acp '!git add * && git commit -m \"$1\" && git push'

但这样配置后,前两个命令能正常运行,但 git push 始终会把我的注释内容理解成要推送的目标分支。为了让 git push 忽略最后的注释,再尝试:

$ git config --global alias.acp '!git add * && git commit -m \"$1\" && git push # '

就是说,让后面的参数在执行时变成一段 shell 脚本注释。经测试,果然能行。以后类似的情况都能应对了。

其实这个别名的第一版是问的 ChatGPT,但 git push 报错后,ChatGPT 分析原因为“Git 不支持在别名中直接传递参数”,建议我通过 .bat 批处理任务实现。试了几次,好歹调通了:

# file path: {GIT_HOME}\cmd\git-acp.bat
@echo off
git add *
git commit -m %1
git push

但这样写效率很低:又要创建文件,又要配置环境变量,运行的格式还必须是 git-acp 'some comment',后面要修改命令更麻烦,没法使用 git 的内置命令。这样写还不如写成 PowerShell 的脚本:

# git-acp.ps1
param([string]$Comment = ""
)
cd "$(pwd)"
git add *
git commit -m "diy commit: $Comment"
git push

感觉越来越跑偏了……本来加个 <空格>#<空格> 就解决的,被 ChatGPT 这么一带就搞错大方向了。可见提高效率的关键还是在于自己的思考和积累。


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

相关文章:

【Vim Masterclass 笔记01】Section 1:Course Overview + Section 2:Vim Quickstart

文章目录 Section 1&#xff1a;Course Introduction 课程概述S01L01 Course Overview 课程简介课程概要 S01L02 Course Download 课程资源下载S01L03 What Vim Is and Why You Should Learn It 何为 Vim&#xff1f;学来干啥&#xff1f;1 何为 Vim2 为何学 Vim Section 2&…...

【数据库系列】Spring Boot 中使用 MyBatis 详细指南

一、基础介绍 1.1 MyBatis MyBatis 是一款优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息&#xff0c;将接口和 Java 的 P…...

Azure Airflow 中配置错误可能会使整个集群受到攻击

网络安全研究人员在 Microsoft 的 Azure 数据工厂 Apache Airflow 中发现了三个安全漏洞&#xff0c;如果成功利用这些漏洞&#xff0c;攻击者可能会获得执行各种隐蔽操作的能力&#xff0c;包括数据泄露和恶意软件部署。 “利用这些漏洞可能允许攻击者以影子管理员的身份获得…...

Python跨年烟花

目录 系列文章 写在前面 技术需求 完整代码 下载代码 代码分析 1. 程序初始化与显示设置 2. 烟花类 (Firework) 3. 粒子类 (Particle) 4. 痕迹类 (Trail) 5. 烟花更新与显示 6. 主函数 (fire) 7. 游戏循环 8. 总结 注意事项 写在后面 系列文章 序号直达链接爱…...

【代码】Python|Windows 批量尝试密码去打开加密的 Word 文档(docx和doc)

文章目录 前言完整代码Githubdocxdoc 代码解释1. msoffcrypto 方法&#xff08;用于解密 .docx 文件&#xff09;read_secret_word_file 函数密码生成与解密尝试try_decrypt_file 函数 2. comtypes 方法&#xff08;用于解密 .doc 文件&#xff09;read_secret_word_file 函数注…...

java开发中注解汇总​​

注解作用位置注意mybatis Data Getter Setter ToString EqualsAndHashCode AllArgsConstructor NoArgsConstructor Data 代替&#xff1a;无参构造&#xff0c;get&#xff0c;set&#xff0c;toString&#xff0c;hashCode&#xff0c;equals Getter Setter 可放在类和方法上&…...

C# 设计模式(结构型模式):外观模式

C# 设计模式&#xff08;结构型模式&#xff09;&#xff1a;外观模式 (Facade Pattern) 在复杂系统中&#xff0c;往往会涉及到多个子系统、模块和类。这些子系统的接口和功能可能会让使用者感到困惑和复杂。在这种情况下&#xff0c;我们可以使用外观模式&#xff08;Facade…...

PowerShell 常见问题解答

PowerShell 是微软开发的一种功能强大的命令行界面和脚本语言&#xff0c;广泛应用于系统管理和自动化任务。以下是一些使用 PowerShell 时常见的问题及其解决方法。 什么是 PowerShell&#xff1f; PowerShell 是基于 .NET 的命令行界面&#xff08;CLI&#xff09;和脚本语言…...

计算机网络 (15)宽带接入技术

前言 计算机网络宽带接入技术是指通过高速、大容量的通信信道或网络&#xff0c;实现用户与互联网或其他通信网络之间的高速连接。 一、宽带接入技术的定义与特点 定义&#xff1a;宽带接入技术是指能够传输大量数据的通信信道或网络&#xff0c;其传输速度通常较高&#xff0c…...

前端Python应用指南(六)构建RESTful API:使用Flask和Django实现用户认证与授权

《写给前端的python应用指南》系列&#xff1a; &#xff08;一&#xff09;快速构建 Web 服务器 - Flask vs Node.js 对比&#xff08;二&#xff09;深入Flask&#xff1a;理解Flask的应用结构与模块化设计&#xff08;三&#xff09;Django vs Flask&#xff1a;哪种框架适…...

【Unity3D】基于UGUI——简易版 UI框架

https://github.com/AMikeW/BStandShaderResources/blob/master/milk_UIFramework.unitypackage UI框架支持如下功能&#xff1a; 1、层级控制 2、支持面板多次打开时&#xff0c;隐藏前一个打开的面板&#xff0c;当关闭面板时&#xff0c;能够恢复前一个打开面板状态 3、支…...

算法排序算法

文章目录 快速排序[leetcode 215数组中的第K个最大元素](https://leetcode.cn/problems/kth-largest-element-in-an-array/)分析题解快速排序 桶排序[leetcode 347 前K个高频元素](https://leetcode.cn/problems/top-k-frequent-elements/)分析题解 快速排序 leetcode 215数组…...

第3章 总线

总线的定义 为多个部件 分时共享 公共信息传送线路。 系统之间、模块之间、芯片内部用来传递信息信号线集合。 共享 总线上可连接多个部件 各部件间相互交换信息 都可通过总线来。 分时 同一时刻 总线上只能传 一个部件信息。 采用标准总线的优点 简化系统软硬件设计 从硬件角度…...

手机实时提取SIM卡打电话的信令声音-双卡手机来电如何获取哪一个卡的来电

手机实时提取SIM卡打电话的信令声音 --双卡手机来电如何获取哪一个卡的来电 一、前言 前面的篇章《手机实时提取SIM卡打电话的信令声音-智能拨号器的双SIM卡切换方案》中&#xff0c;我们论述了局域网SIP坐席通过手机外呼出去时&#xff0c;手机中主副卡的呼叫调度策略。 但…...

共阳极LED的控制与短路问题解析

共阳极LED的控制与短路问题解析 在电子电路中&#xff0c;LED&#xff08;发光二极管&#xff09;是最常见的元件之一。LED的连接方式分为共阳极和共阴极&#xff0c;不同的连接方式决定了LED的控制逻辑。本文将重点讲解共阳极LED的工作原理&#xff0c;并解答“为什么给1不会…...

华为消费级QLC SSD来了

近日&#xff0c;有关消息显示&#xff0c;华为的消费级SSD产品线&#xff0c;eKitStor Xtreme 200E系列&#xff0c;在韩国一家在线零售商处首次公开销售&#xff0c;引起了业界的广泛关注。 尽管华为已经涉足服务器级别的SSD制造多年&#xff0c;但直到今年6月才正式推出面向…...

liunx下载gitlab

1.地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 安装 postfix 并启动 yum install postfix systemctl start postfix systemctl enable postfix ssh服务启动 systemctl enable sshd systemctl start sshd开放 ssh 以及 http 服务&#xff0c…...

深度学习模型预测值集中在某一个值

深度学习模型&#xff0c;训练过程中&#xff0c;经常遇到预测的结果集中在某个值&#xff0c;而且在学习的过程中会变&#xff0c;样例如下。 主要有如下解决方案 1、更换relu ->tanh 或者其他激活函数 2、更改随机种子&#xff0c;估计是没有初始化好&#xff0c;或者调…...

Sqoop的使用

每个人的生活都是一个世界&#xff0c;即使最平凡的人也要为他那个世界的存在而战斗。 ——《平凡的世界》 目录 一、sqoop简介 1.1 导入流程 1.2 导出流程 二、使用sqoop 2.1 sqoop的常用参数 2.2 连接参数列表 2.3 操作hive表参数 2.4 其它参数 三、sqoop应用 - 导入…...

OpenGL ES 04 图片数据是怎么写入到对应纹理单元的

从指定路径加载图像并转换为 CGImage。获取图像的宽度和高度。创建一个 RGB 颜色空间。为图像数据分配内存。创建一个位图上下文并将图像绘制到上下文中。创建一个新的纹理对象并绑定到指定的纹理单元。指定二维纹理图像。释放分配的内存。设置纹理参数&#xff0c;包括放大和缩…...

C# 设计模式的六大原则(SOLID)

C# 设计模式的六大原则&#xff08;SOLID&#xff09; 引言 在面向对象编程中&#xff0c;设计模式提供了高效、可复用和可维护的代码结构。SOLID原则是软件设计中的一组重要原则&#xff0c;用于确保代码具有良好的可维护性、可扩展性和灵活性。SOLID是五个设计原则的首字母…...

数据库自增 id 过大导致前端时数据丢失

可以看到&#xff0c;前端响应参数是没有丢失精度的 但是在接受 axios 请求参数时出现了精度丢失 解决方案一&#xff1a;改变 axios 字符编码 axios.defaults.headers[Content-Type] application/json;charsetUTF-8; 未解决 解决方案二&#xff1a;手动使用 json.parse() …...

第二十六天 自然语言处理(NLP)词嵌入(Word2Vec、GloVe)

自然语言处理&#xff08;NLP&#xff09;中的词嵌入&#xff08;Word2Vec、GloVe&#xff09;技术&#xff0c;是NLP领域的重要组成部分&#xff0c;它们为词汇提供了高维空间到低维向量的映射&#xff0c;使得语义相似的词汇在向量空间中的距离更近。以下是对这些技术的详细解…...

MongoDB 固定集合

MongoDB 固定集合 MongoDB中的固定集合&#xff08;Capped Collections&#xff09;是一种具有固定大小的集合&#xff0c;当集合中的数据达到其最大大小时&#xff0c;它会自动覆盖最早的文档。这种类型的集合在MongoDB中用于实现高效的、固定大小的循环缓冲区。本文将详细介…...

数据结构9.3 - 文件基础(C++)

目录 1 打开文件字符读写关闭文件 上图源自&#xff1a;https://blog.csdn.net/LG1259156776/article/details/47035583 1 打开文件 法 1法 2ofstream file(path);ofstream file;file.open(path); #include<bits/stdc.h> using namespace std;int main() {char path[]…...

Leetcode 1254 Number of Closed Islands + Leetcode 1020 Number of Enclaves

Leetcode 1254 题意 给定一个m*n的矩阵含有0和1&#xff0c;1代表水&#xff0c;0代表陆地&#xff0c;岛屿是陆地的集合&#xff0c;如果一个岛屿和四个方向的边界相连&#xff0c;则不算封闭岛屿。求有多少个封闭的岛屿。 题目链接 https://leetcode.com/problems/number…...

Junit4单元测试快速上手

文章目录 POM依赖引入业务层测试代码Web层测试代码生成测试类文件 在工作中我用的最多的单元测试框架是Junit4。通常在写DAO、Service、Web层代码的时候都会进行单元测试&#xff0c;方便后续编码&#xff0c;前端甩锅。 POM依赖引入 <dependency><groupId>org.spr…...

U盘提示格式化?原因、恢复方案与预防措施全解析

一、U盘提示格式化现象概述 在日常使用U盘的过程中&#xff0c;我们有时会遇到一个令人头疼的问题——U盘插入电脑后&#xff0c;系统却弹出一个提示框&#xff0c;告知我们U盘需要格式化才能访问。这个提示往往伴随着数据的潜在丢失风险&#xff0c;让我们不禁为之心焦。U盘提…...

HTML——13.超链接

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>超链接</title></head><body><!--超链接:从一个网页链接到另一个网页--><!--语法&#xff1a;<a href"淘宝网链接的地址"> 淘宝…...

vue中的设计模式

vue中使用了哪些设计模式 1. 观察者模式&#xff08;Observer Pattern&#xff09; 应用场景&#xff1a;Vue 的响应式系统核心就是观察者模式。 实现方式&#xff1a;通过 Object.defineProperty 或 Proxy 监听数据变化&#xff0c;当数据发生变化时&#xff0c;通知依赖的视…...