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

[ The Missing Semester of Your CS Education ] 学习笔记 Vim篇

“Writing English words and writing code are very different activities. When programming, you spend more time switching files, reading, navigating, and editing code compared to writing a long stream.”
—— < The Missing Semester of Your CS Education >

Vim 是一个模态编辑器(modal editor),它的设计哲学是:编辑操作应当通过键盘组合完成,而非依赖鼠标或菜单。

“Vim avoids the use of the mouse, because it’s too slow; Vim even avoids using the arrow keys because it requires too much movement.”
—— < The Missing Semester of Your CS Education >

Vim认为使用鼠标浪费时间,会降低效率,因为手从鼠标移动到键盘需要一定时间,对程序员来说反复来回的切换是很annoying的。因此,所有的vim功能都可以通过键盘操作,或许一开始你并不习惯,但等你使用久了,便能发现它得到程序员青睐的原因!

课程相关视频与讲义:Editors (Vim)

核心特性

  • 普通模式:用于导航和操作文本(默认模式)
  • 插入模式:像常规编辑器一样输入文本(按 i 进入)
  • 可视模式:选择文本块(按 v 进入)
  • 命令行模式:执行保存/退出等命令(按 : 进入)

基础操作

使用 Vim 时会经常使用<ESC>键,而它不在主键盘区,显然不那么方便,于是很多程序员考虑将 Caps Lock 重新映射到 Escape或使用简单的键序列创建替代映射!

模式切换

操作功能
vim进入vim编辑器
vim 文件名打开特定文件(不存在时会新建)
i(insert)进入插入模式
Esc返回普通模式
:进入命令行模式

光标移动

操作功能
h j k l左/下/上/右移动
0移动到行首
$移动到行尾
^移动到行首非空字符
G移动到文件底部
gg移动到文件顶部
H移动到窗口顶部
L移动到窗口底部
Ctrl+u上翻半页
Ctrl+d下翻半页
Ctrl+b上翻整页
Ctrl+f下翻整页

编辑功能

文本操作

操作功能
o下方新建行并插入
O上方新建行并插入
u撤销
Ctrl+r重做
x删除字符
dw删除单词
dd删除整行
cc删除并进入插入模式

复制粘贴

操作功能
y (yank)复制
yy复制当前行
yw复制单词
p(paste)粘贴

可视化模式

操作功能说明
v字符可视化按字符选择
V行可视化按行选择
Ctrl+v块可视化矩形选择

高级功能

搜索与替换

操作功能
f+字符向前查找字符
F+字符向后查找字符
~大小写转换

批量操作

数字+指令可以进行批量化操作

 4j #向下移动4行 3ee #选择3个单词 7dw #删除7个单词

文件操作

保存与退出

操作功能
:w(write)保存文件
:q(quit)退出
:qa(all)退出所有窗口
:wq保存并退出

实战演示

学习了上面那么多的指令不妨自己创建一个python文件,结合之前学习的shell命令,在实践中感受Vim的魅力吧!

import sys #导入sys来接受shell中的参数def fizz_buzz(limit):for i in range(1, limit + 1):if i % 3 != 0 and i % 5 != 0:print(i)elif i % 3 == 0 and i % 5 != 0:print('fizz')elif i % 5 == 0 and i % 3 != 0:print('buzz')else:print('fizzbuzz')def main():fizz_buzz(int(sys.argv[1]))if __name__=='__main__':main()
$ python3 fizzbuzz.py 30
1
2
fizz
4
buzz
fizz
7
8
fizz
buzz
11
fizz
13
14
fizzbuzz
16
17
fizz
19
buzz
fizz
22
23
fizz
buzz
26
fizz
28
29
fizzbuzz
http://www.lryc.cn/news/602965.html

相关文章:

  • 前端实现银河粒子流动特效的技术原理与实践
  • Linux 软件包管理详解:从命令到实战
  • 计算机网络编程-Socket通信以及实战
  • STM32 USB HOST 驱动FT232 USB转串
  • 安装anaconda后,如何进入python解释器
  • SSH 远程控制及相关工具
  • 常见的JVM虚拟机的参数详解
  • “量子通信”
  • 【C语言网络编程基础】TCP并发网络编程:io多路复用
  • 五自由度磁悬浮轴承转子:基于自适应陷波器的零振动攻克不平衡质量扰动的终极策略
  • linux du、df命令使用教程
  • 面向对象设计原则和设计模式分类
  • 开源AI智能体-JoyAgent集成Deepseek
  • C++模板元编程从入门到精通
  • [论文阅读] 人工智能 | 机器学习工作流的“救星”:数据虚拟化服务如何解决数据管理难题?
  • [机缘参悟-236]:通过AI人工神经网络理解人的思维特征:惯性思维、路径依赖、适应性、不同场合不同言行、经验、概率、常规与特殊情形(正态分布)、环境适应性
  • 5 分钟上手 Firecrawl
  • Java项目:基于SSM框架实现的社区团购管理系统【ssm+B/S架构+源码+数据库+毕业论文+答辩PPT+远程部署】
  • js的学习1
  • 如何理解有符号数在计算机中用​​补码​​存储
  • 阿里给AI To C战略戴上眼镜
  • 案例开发 - 日程管理 - 第三期
  • Android Handler 完全指南
  • 【QT搭建opencv环境】
  • 商城系统-项目测试
  • redis未授权getshell四种方式
  • Ubuntu24安装MariaDB/MySQL后不知道root密码如何解决
  • 基于STM32设计的智慧果园云监测系统_256
  • 基于Uniapp及Spring Boot的奢侈品二手交易平台的设计与实现/基于微信小程序的二手交易系统
  • linux安装zsh,oh-my-zsh,配置zsh主题及插件的方法