HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

发布了 942 篇内容, 共 535.7 次阅读, 收获喜欢 1105 次。

关注

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

全球区块链专利排行榜中国52家企业上榜

CECBC

定义@WeClub

WeClub

WeClub

高价值干货:这可能是你见过最全的网络爬虫总结

华为云开发者联盟

Python Web 爬虫 python 爬虫 内存数据库

阿里巴巴取消周报?别高兴太早,也不见得是一件好事

非著名程序员

阿里巴巴 程序员 职场成长 职场误区

智算中心开启智慧时代,浪潮信息迎来新发展

Geek_116789

【DevCloud·敏捷智库】如何利用用户故事了解需求

华为云开发者联盟

敏捷开发 需求管理 需求 故事 华为云

字节跳动的ToB生意经

ToB行业头条

我成功转行做了java程序猿!

诸葛小猿

Java 程序员 转行

分布式事务解决方案Seata源码解析

Chank

Java 分布式 分布式事务

调薪

池建强

团队管理 薪酬

推荐一些学习MySQL的资源

Simon

MySQL

Rust多线程之数据共享

编号94530

rust 多线程 数据共享 什么是多线程

计算机网络基础(五)---网络层-IP地址的子网划分

书旅

laravel 计算机网络 网络协议 计算机基础

【写作群星榜】7.11~7.17 写作平台优秀作者 & 文章排名

InfoQ写作社区官方

写作平台 排行榜 热门活动

从IT建设模式变化看客户中心发展

环信

分析师的进阶与升华:努力把自己做“没”

松子(李博源)

方法论 数据模型 数据分析师 指标体系 商业模型

细数2020上半年PC端十大“黑恶势力”,一起康康是谁在“兴风作浪”

360安全卫士

2020技能排名:Python增速爆炸,SQL和Java老当益壮,AWS大吃一惊

程序猿黑哥

Java Python sql

OOP面向对象编程(Object-Oriented Programming)概述

奈学教育

面向对象编程

OOP面向对象编程(Object-Oriented Programming)概述

古月木易

面向对象 oop

小白教程——基于阿里云快速搭建自己的网站

诸葛小猿

阿里云 视频 网站搭建 小白

项目管理:如何显性管理并提升Story分解能力

华为云开发者联盟

项目管理 DevOps 故事 用户研究 华为云

尝鲜刚发布的 SpringFox 3.0.0,以前造的轮子可以不用了...

程序猿DD

Spring Boot

YAPI接口管理平台使用基础入门(一)

Man

DevOps 最佳实践 YAPI API接口管理

犯罪黑客线上拉人入伙,流窜多地网吧植马,仅为盗取游戏账号

360安全卫士

信创舆情一线--台积电宣布9月14日断供华为

统小信uos

华为 芯片 半导体

腾讯员工每天在岗不足 8 小时被辞?背后原因可能不止你看到的这些!

程序员生活志

腾讯 辞退

编程核心能力之复用

顿晓

编程 复用 编程日课 技术思维

Flask-Restful 中 fileds.DateTime 不支持 strftime 格式

Leetao

Python flask web开发 Python框架 flask-restful

案例研究之聊聊 Mybatis 源码 (三)

小诚信驿站

学习 开源 刘晓成 源码解析 小诚信驿站

为什么编译原理被称为龙书?

苹果看辽宁体育

编译原理 编译优化

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