GMTC北京站9折购票倒计时,部分日程已上线,戳此查看 了解详情
写点什么

我为什么说 Vim 比 VSCode 更好用

  • 2022 年 2 月 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 年 2 月 17 日 10:261983
用户头像

发布了 371 篇内容, 共 109.3 次阅读, 收获喜欢 504 次。

关注

评论 5 条评论

发布
用户头像
虽然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
回复
没有更多了
发现更多内容

TcaplusDB君 · 行业新闻汇编(6月9日)

TcaplusDB

nosql tencentdb TcaplusDB NoSQL数据库

面试官:如何给字符串设计索引?

JavaFish

MySQL 索引 字符串 索引优化

春色满园关不住,带你体验阿里云 Knative

阿里巴巴云原生

云原生

百度灵医智惠明星案例获人民日报点赞:智慧医疗让看病更便捷

百度大脑

人工智能 智慧医疗

[TcaplusDB知识库]TcaplusDB限制条件

TcaplusDB

数据库 nosql tencentdb TcaplusDB

博云作为专业独立PaaS厂商,入选中国PaaS市场研究报告

BoCloud博云

PaaS

☕️【Java技术之旅】带你一起探究String类不可变的特性

浩宇天尚

string 原理 字符串 6月日更

程序员需要了解数据库知识么?

escray

学习 极客时间 朱赟的技术管理课 6月日更

☕️【Java 技术之旅】带你一起攻克String类创建的难点分析

浩宇天尚

Java string pool string 6月日更

开发感想 基于8051的数据采集系统(科技向)

万里无云万里天

经验总结 6月日更

构建高可用的MySQL

林一

MySQ MySQL 高可用 Maxscale

带你剖析鸿蒙轻内核任务栈的源代码

华为云开发者社区

鸿蒙 任务栈 任务调度 任务上下文

一文教会你认识Vuex状态机

华为云开发者社区

Vue 应用 vuex 事件 父子组件

那个陪我打王者的兄弟进了阿里

艾小仙

小白必看的,JS中循环语句大集合

华为云开发者社区

JavaScript js 循环语句 while循环 for循环

想做DBA,多租户管理你一定要知道这些

华为云开发者社区

多租户 GaussDB(DWS) 资源池 存储空间 资源隔离

企业应用AI之路怎么走?飞桨实践有真知

百度大脑

AI 飞桨

【LeetCode】从上到下打印二叉树 Java题解

HQ数字卡

算法 LeetCode 6月日更

质量分析工具-监控大厅大揭秘

anyRTC开发者

音视频 WebRTC sdk

六一儿童节 | TcaplusDB祝大小朋友节日快乐

数据人er

数据库 nosql tencentdb TcaplusDB

如何科学制定和管理项目计划?

万事ONES

项目管理 ONES 项目经理

线程中数据安全的可见性--volatile

卢卡多多

volatile 线程 进程 可见性 6月日更

待办事项列表,敏捷项目管理的核心工件

万事ONES

Scrum 敏捷 研发管理 ONES

如何针对美工与设计师的Maya工具进行版本控制

龙智—DevSecOps解决方案

react源码解析9.diff算法

全栈潇晨

react源码

理解Linux之文件I/O——知其然,知其所以然

奔着腾讯去

文件管理 Linux内核 文件I/O I/O模型

TcaplusDB | 行业新闻汇编(6月1日)

数据人er

数据库 游戏 tencentdb TcaplusDB

宜兴牵手百度智能云共建人工智能应用中心,推动数字经济创新发展

百度大脑

人工智能

基于传感器的人体生命体征监控技术

不脱发的程序猿

物联网 传感器 智能医疗 人体生命体征监控技术

24道几乎必问的JVM面试题,我只会7道,你能答出几道?

北游学Java

Java 面试 JVM

阿里云官方出品:全面总结阿里云云原生架构方法论与实践经验

尹文敏

云计算 阿里云 云原生

我为什么说Vim比VSCode更好用_AI_Sean_InfoQ精选文章