写点什么

我为什么说 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:265396
用户头像
李冬梅 加V:busulishang4668

发布了 1108 篇内容, 共 719.2 次阅读, 收获喜欢 1253 次。

关注

评论 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
回复
没有更多了
发现更多内容

手把手教你在昇腾平台上搭建PyTorch训练环境

华为云开发者联盟

人工智能 华为云 昇腾 华为云开发者联盟 企业号 5 月 PK 榜

产品经理们,请小心这 5 种错误的职场打开方式!

LigaAI

产品经理 团队协作 研发协作 产品负责人 企业号 5 月 PK 榜

3D LED显示屏选购指南

Dylan

3D LED显示屏 避坑指南

7个工程应用中数据库性能优化经验分享

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

实例讲解Spring boot动态切换数据源

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

易观千帆 | 2023年4月银行APP月活跃用户规模盘点

易观分析

金融 数字经济 手机银行

技术分享| 融合会议协议大解密

anyRTC开发者

音视频 视频会议 快对讲 H.323 融合会议

数据可视化:部分整体类可视化图表大全

2D3D前端可视化开发

数据分析 数据可视化 数据可视化工具 可视化图表 数据可视化设计

网闸、防火墙、堡垒机三大定义说明

行云管家

防火墙 堡垒机 网闸

inBuilder今日分享丨系统集成系列之背景与方案概述

inBuilder低代码平台

超融合产品集成 Kata 虚拟化容器技术的方案演进 | 龙蜥技术

OpenAnolis小助手

开源 容器 虚拟化 龙蜥社区 龙蜥大讲堂

AI 换脸技术:你的照片可能被滥用了!

郑州埃文科技

AI 数据治理

基于openfaas托管脚本的实践

百度Geek说

数据库 百度 企业号 5 月 PK 榜

Bytebase:更好地管理你的 OceanBase 数据库

OceanBase 数据库

数据库 oceanbase

手机一开,说办就办!指尖上的“数字江西”

OceanBase 数据库

数据库 oceanbase

揭秘百度IM消息中台的全量用户消息推送技术改造实践

JackJiang

消息推送 即时通讯IM im开发

深度解析 slab 内存池回收内存以及销毁全流程

bin的技术小屋

Linux 内存管理 Linux Kenel 内存池 slab

Github标星78k,Alibaba最新发布的Spring Boot项目实战文档!太强了

Java你猿哥

Java 面试 Spring Boot ssm Spring MVC

阻抗板是否高可靠,华秋有话说

华秋电子

C4D 常用 14 款插件

Finovy Cloud

C4D 3D软件

深度学习进阶篇-预训练模型[3]:XLNet、BERT、GPT,ELMO的区别优缺点,模型框架、一些Trick、Transformer Encoder等原理详细讲解

汀丶人工智能

自然语言处理 深度学习 预训练模型 Transformer GPT

杜绝开源依赖风险,许可证扫描让高效&合规「两不误」

极狐GitLab

DevOps DevSecOps 开源许可证 极狐GitLab 安全合规

数据可视化:相关类可视化图表大全

2D3D前端可视化开发

数据可视化控件 数据可视化工具 可视化数据 可视化图表 数据可视化设计

Nodejs 应用编译构建提速建议 | 京东云技术团队

京东科技开发者

node.js 编译 前端构建 企业号 5 月 PK 榜

详解GaussDB(DWS)用户监控原理及应用

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

MobPush iOS端合规指南

MobTech袤博科技

GitHub上标星75k+超牛的《Java面试突击离线版》够你润进去了

程序知音

Java java面试 Java进阶 Java面试题 Java面试八股文

堡垒机免费版有哪些功能啊?后面需要过等保怎么办?

行云管家

安全运维 运维软件 免费运维

设计师解放双手之作!3秒生成风景园林效果图,AIGC赋能景观设计

飞桨PaddlePaddle

人工智能 百度飞桨 AIGC Stable Diffusion

性能测试监控指标及分析调优 | 京东云技术团队

京东科技开发者

性能优化 性能测试 企业号 5 月 PK 榜 测试监控

生态伙伴 | 携手深圳科创学院,持续推动项目落地与成长

华秋电子

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