2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

我为什么说 Vim 比 VSCode 更好用

  • 2022-02-17
  • 本文字数:3257 字

    阅读完需:约 11 分钟

我为什么说Vim比VSCode更好用

Github 被微软收购后迎来了一个相当重要的功能更新,叫做Codespaces


有了它,你就可以直接在你的仓库里写代码,而用不着在自己的电脑上本地编程了。你可以通过浏览器来操控一台运行 VSCode 的超快服务器来运行代码、提供服务和更新代码。


Vim 曾经是可移植性最强的文本编辑器,因为你可以在几乎所有的服务器机器上找到它,并通过 SSH 在终端使用它。


现在,VSCode 也有了一些这样的功能。


你不仅可以在 Github 中运行 VSCode,而且微软还提供了一个可以自服务的 VSCode 版本,叫做Open VSCode Server。你可以用它将 VSCode 安装到一台服务器上,并在你想要的任何端口上为应用提供服务。然后你可以在自己的浏览器中访问服务器地址,并以和 Codespaces 中一样的操作来使用 VSCode,但却是免费的。

微软走向开源世界


微软的 xterm.js(用于 VSCode 自己的终端)是作为微软自己独有的开源项目发布的,它萌生了一大堆各种各样基于浏览器的终端;现在你在几乎每一个服务器托管网站上都能找到一个终端。


这家公司曾长期反对开源模式,但如今他们已经拥抱了开源世界。在 Web 开发领域,他们正在占据主导地位。微软拥有 Ubuntu、Github、npmjs.com,我很少能见到不用 VSCode 的开发者。


当他们开始让 VSCode 也变得有这么强的可移植性之后,甚至我自己也开始尝试 Open VSCode 了。我想看看自己是否喜欢远程写代码的感觉,能不能体会到它那不怎么清爽的 GUI 的优点。


在我每月租金 5 英镑的廉价服务器上运行二进制文件后,它几乎立即崩溃了,我只能重新启动。

Vim 还是更胜一筹


Vim 比任何 GUI 编辑器都更有优势,原因是显而易见的。它轻巧快速,你可以在服务器上通过 SSH 写代码,所有事情都可以在终端中完成。它的应用非常广泛,可移植性和可配置性极佳。


这些原因你可能都已经听过了,所以我想谈谈我喜欢它的一些个人理由,以及一些 VSCode 可能更擅长的领域。

它很难用?


当我刚开始就提到 Vim 很难用时,“麻瓜们”就都被拒之门外了——我是在开玩笑。


实际上,学习 Vim 比学习乐器要容易得多,但很多人都能学会演奏乐器;它也比学习阅读和写作容易得多,后者是一件非常困难的事情,但几乎每个人都能做到。


用起来比较难当然不应该成为阻挡程序员使用的障碍。学习各种各样困难的东西就是我们的安身立命之本。


学习比较困难的东西是有一些好处的,但这些好处与你学习的这件事本身并无直接联系。你在这一过程中可以获得一些元技能。


我的儿子尤里最近学会了骑自行车,这对他来说很困难,因为骑自行车不是你可以一点点学会的东西。学习骑车时会有一个类似于信仰之跃的时刻,你还没在心理上做好准备的时候就必须在行动上尝试,并冒着从车上摔下来的风险。


还有一件事也让自行车学起来更难:在你学会骑自行车之前,自行车对你来说毫无用处。所以他之前喜欢踩着滑板车到处走,因为滑板车学起来容易得多,学习过程也更有趣。


但自从尤里学会骑自行车后就再也没碰过他的滑板车,因为它太慢了,而且没什么乐趣。虽然他没有意识到,但学车的过程中其实也学到了一些元经验。


首先,有时学习一些东西需要来一次信仰之跃,你必须冒着风险来迈出那一步。还有,有些东西在你学会之前毫无用处......然后突然间它们就变得如此迷人了。


VSCode 就像是文本编辑器中的滑板车一样,而 Vim 则是自行车。

Vim 不是异步的


为什么这是个优势?嗯,这就是它如此之快的原因所在。Vim 只有大约 7MB 的空间占用,并且同时只会做一件事。


它不会扫描你的目录来寻找函数定义,它不会穿越语法树给你提供复杂的自动完成建议,它不会计算你光标的上下文并向文档 API 发出请求,它不会对每一行代码做 git blame,它不会自动下载每个文件的语法。


但是 Vim 可以做所有这些事情......只要你让它做就行。

它只做你让它做的事


有些人喜欢自动功能,因为谁都希望自己的生活变得更容易。或者,也许你没有时间或精力来处理这些小事情。


我想这取决于你觉得你对自己工作水平的感受,你是否有精力使用终端命令来 lint 你的文件,或阅读:help 来找出配置你的.vimrc 文件的方法(我开始使用 Vim 时从未使用:help,一开始互联网资源绝对是你的好朋友)。


但说实话,我认识的很多人会用不那么有趣的方式来浪费他们的时间,比如漫无目的地刷 facebook,或者在 Netflix 上重新看几集老友记之类。


有时我想做一些比较有互动性的事情,而不是从头到尾都在写代码。如果我下班后或周末累了,过去我会玩音乐或电脑游戏;现在我会在家里修一些东西,或者用 Vim 做些修修补补。


我会思考一些可以在 Vimscript 中写出来的小功能,或整合一个有用的命令行工具,甚至只是阅读一些我从未见过的:help……总之让我有事情可做就行,不是什么我必须完成的任务,但也不完全是浪费时间。

Vim 让代码写起来就像打游戏一样


我深入了解 Vim 后就彻底不再玩电脑游戏了,这是因为它的控制方式简直就像游戏一样。Vim 有一个模块化的结构,允许你使用各种命令的组合操作。这很像是你在格斗游戏中进行连击的方式。


大多数命令有两个、三个或四个部分。三部分结构的一个版本是这样的:操作符(operator)-文本对象(text object)-动作(motion)。


操作符包括删除(delete)、更改(change)、视觉选择(visual select)和替换(replace),每次选一个使用。


文本对象要么在内部(inside)要么在周围(around)。


动作有很多种,我们稍后会具体讨论,现在我们可以把动作看作是命令的一种目标。举个例子,我可以按 dib,意思是在块内删除(delete inside block)。


其中操作符是 delete,文本对象是 inside,动作是 block。这样就可以删除一个(括号)块内的所有内容。


可选的组合数量很多:


di'——删除(delete)“单引号”内(inside)的内容。


da"——删除“双引号”周围(around)的内容。


dit——删除 html 标签(tag)内的内容。


ci[——改变(change)[方括号] 内的内容。


正如我前面所说的,可供选择的动作命令有很多,它们的表现也各不相同,具体取决于你是在三部分组合中使用(如上所述),还是在两部分组合中使用(这时去掉文本对象,让命令从光标位置向后运行)。


下面是你可以在上述三段式组合中使用的一些相关动作的清单。--------------------------------------------------| motions                           | key        ||-----------------------------------|------------|| word                              | w          || WORD (includes special chars)     | W          || block (of parentheses)            | b or (     || BLOCK (of curly braces)           | B or {     || brackets                          | [          || single quotes                     | '          || double quotes                     | "          || tag (html or xml <tag></tag>)     | t          || paragraph                         | p          || sentence                          | s          |--------------------------------------------------
复制代码


这些命令可以让你快速而轻松地改变一个函数的参数、一个字符串的内容或一个 if 块的内容。一旦你学会了这些命令,在哪里你都会想用一用。


其他文本编辑器都会让人感到繁琐和笨重,你会在每一个你能找到的环境中安装“Vim 模式”。

关于动作的更多信息


动作是你在 Vim 中使用最多的按键命令类型,因为它们可以单独用来移动光标。有些动作可以单独使用,而有些动作只有在作为组合的一部分使用时才能发挥作用。


例如,w(forword)键会将光标一次向前跳过一个单词,但'单引号不是一个单独的动作,它的作用完全是另一回事。


有些动作会变成不同的类型,取决于它们是组合使用还是单独使用。例如,在上面的三段式组合中,b 键的意思是块,但当你单独使用它时,它的意思是返回(back),并且每次向后移动光标一个单词。


Vim 的命令是上下文感知的,也是模块化的。不同的键意味着不同的操作,这取决于你何时使用它们以及光标位于何处。


它很像一种语言,你可以把这些命令看成一个句子:删除这些'单引号'内的内容(delete inside these ‘single quote’。


原文链接https://sean-warman.medium.com/why-vim-is-better-than-vscode-d09e2355eb37

2022-02-17 10:265363
用户头像
李冬梅 加V:busulishang4668

发布了 1086 篇内容, 共 703.7 次阅读, 收获喜欢 1242 次。

关注

评论 6 条评论

发布
用户头像
我主要是不会用vim ..
2024-04-26 10:49 · 浙江
回复
用户头像
虽然VIM是我的最爱,但是不得不承认,VS Code还是相当不错的,我也经常一起使用。
2022-02-26 09:59
回复
用户头像
除去了vscode GUI对带宽的占用这一点,可是别忘了vscode还有V im的插件,
2022-02-19 23:07
回复
用户头像
它不会扫描你的目录来寻找函数定义,它不会穿越语法树给你提供复杂的自动完成建议,它不会计算你光标的上下文并向文档 API 发出请求,它不会对每一行代码做 git blame,它不会自动下载每个文件的语法。

这就是vim最大的问题了,绝大部分时候自动提示可以算是刚需了
2022-02-17 16:43
回复
“但是 Vim 可以做所有这些事情......只要你让它做就行。”
——
刚需的是“功能”,不是“自动”
2022-02-18 09:38
回复
实际上,是否简单易用反而比有没有,对80%的人来说,比那点顺畅感更重要了。因为四处查找脚本,一脸懵逼的不断看着vim工作与期望不一样,那是相当劝退的体验了。就像五笔练好了可以碾压拼音
2022-02-21 09:06
回复
没有更多了
发现更多内容

如何设计一组会出现死锁(Deadlock)的ABAP程序

汪子熙

操作系统 SAP abap 8月月更 ABAP死锁

使用脚手架 快速开发 React组件 npm包 (基于TSDX)

HullQin

CSS JavaScript html 前端 8月月更

直播预告 | Authing 如何打造云原生 SaaS 产品架构?

Authing

Netty进阶 -- WebSocket长连接开发

Bug终结者

8月月更

Open Office XML 格式中的 Style 设计原理

汪子熙

xml 微软 Office 8月月更 openOffice

在座的Python爬虫工程师,你敢爬律师事务所站点吗?

梦想橡皮擦

Python 爬虫 8月月更

如何解决 “主节点故障恢复的自动化” 问题?

八点半的Bruce.D

突破次元壁垒,让身边的玩偶手办在屏幕上动起来!

HarmonyOS SDK

CCF大会腾源会专场即将召开,聚焦基础软件与开发语言未来发展

腾源会

开源 腾源会

有了阿里这5份Java架构师手册,学习起来轻松多了!

冉然学Java

Java 算法 java面试 性能调优实战 并发架构设计思想

巧用自定义函数,文本控件秒变高速缓存

明道云

兴盛优选:时序数据如何高效处理?

TDengine

数据库 tdengine 时序数据库

SAP ABAP 里存在 Java List 这种集合工具类么?CL_OBJECT_COLLECTION 了解一下

汪子熙

设计模式 迭代器模式 SAP abap 8月月更

数字钱包红海角逐,小程序生态快速引入可助力占领智慧设备入口

FinClip

浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试

汪子熙

编程语言 oop aop spring aop 8月月更

从普通程序员晋升到架构师需要掌握哪些技术,这份37W字Java高性能架构用13个章节彻底讲明白了

Java永远的神

Java 程序员 面试 程序人生 架构师

开源一夏 | 使用 CSS 的水波文本动画(免费代码)

海拥(haiyong.site)

开源 8月月更

开源一夏 |卷王必备学习的MyBatis-Plus用法~

叶秋学长

开源 mybaits 8月月更

阿里云 Hologres助力好未来网校实时数仓降本增效

阿里云大数据AI技术

数据分析 数据治理 数据安全

Go-Excelize API源码阅读(七)—— CopySheet(from, to int)

Regan Yue

开源 源码阅读 8月日更 8月月更

ABAP应用服务器的HTTP响应状态码(Status Code)

汪子熙

前端开发 HTTP web开发 SAP 8月月更

深度解析佛萨奇,Forsage魔豹联盟系统开发方案(源码部署)

开发微hkkf5566

阿里架构师首发:80W字微服务架构手册GitHub上杀疯了

冉然学Java

Java 编程 程序员 架构 微服务

从滴滴被罚款事件思考企业数据治理问题

墨天轮

大数据 滴滴 数据治理 数据安全

SAP 产品增强技术回顾

汪子熙

SaaS SAP 企业级应用 云应用 8月月更

5 张弹珠图彻底弄清 RxJS 的拉平策略:mergeMap、switchMap、concatMap、exhaustMap

掘金安东尼

前端 RXJS 8月月更

运动健康服务场景事件订阅,让应用推送“更懂用户”

HarmonyOS SDK

分析 Flink 任务如何超过 YARN 容器内存限制

移动云大数据

Flink 平台

TiSpark 原理之下推丨TiDB 工具分享

PingCAP

TiDB

AS北京站如约而至!发布参会感想有机会获得官方周边奖励

InfoQ写作社区官方

热门活动 ArchSummit

我为什么说Vim比VSCode更好用_AI&大模型_Sean_InfoQ精选文章