在很长一段时间里,我都在使用 Emacs 作为我的主力编辑器,所用到的 配置 后来则主要是基于 子龙山人 以及他的 Spacemacs-rocks 系列 ,这些配置文件经过碎月累年的魔改和持续发酵,伴随十数个各种语言的轻量级前后端项目的洗礼,已经像一个隐形的纹身一样成为了我日常生活的一部分。

对于文本编辑器,我的热情由来已久,从大学宿舍到结婚生子的这些年也接触过不少:Vim、WebStorm,Emacs,Sublime,RubyMine 等等,她们或纯粹,或集成,或性感,或智能,每一位都有着令人难忘的鲜明特色,在漫漫编程路上给了我无数的美好回忆和默默陪伴。她们所带给我的影响也不仅仅局限在平时的编码中,而且潜移默化的给我注入了一个重要的价值观 -- 不仅要赢,还要赢的漂亮(好吧这其实是巴萨教给我的。。)

尽管选择众多,但这其中的佼佼者在我心目中则毫无争议的属于"上古时代"的 Emacs 和 vim(Emacs 排在前面仅仅因为我觉得她听上去更加性感,特此说明),两个编辑器的背后都是极富传奇甚至哲学色彩的程序员,且至今影响深远 --- 比如 mac 系统上几乎任何软件的默认快捷键很多就继承自 Emacs (例如 c-f, c-b, c-w, c-k, c-h, c-d, c-p, c-n, c-a, c-e 等等),再比如几乎所有的主流编辑器也都有 vim/emacs 的模拟模式可选等等。前几年出现的 Spacemacs 项目 更是将两者合二为一,妙之毫巅,就像其在仓库标题里所提到的一样:

The best editor is neither Emacs nor Vim, it's Emacs *and* Vim!


那你为啥子要换 VSCode 呢?

最直接的原因是 Spacemacs 这个项目在至少在两年多以前就没有在 master 分支提交过任何代码了,日常 bug/feature 等等都在 develop 分支上,且迟迟没有合并的迹象:

Plans to merge `dev` into `master`? · Issue #12418 · syl20bnr/spacemacs​github.com

我之前一直在忙于个人项目,直到一年多以前发现这个问题,之后曾经尝试手动切换到 develop 分支,结果各种乱起乱七八糟的报错连自定义的主题都直接乱掉,尝试修复又无从谈起,毕竟已经落后了几千个 commit 了。。更重要的是,她让我的 Emacs 配置变成了一潭死水,在可预见的很长一段时间内都无法和社区保持同步、keep sharp了,这种感觉实在糟透了。

年后来到新公司坐班,发现现在搞前端的年轻人都在使用 VSCode ,而且无一例外,失望之余也不免心生好奇,这花里胡哨的东西究竟好在哪里?在又一次尝试 Spacemacs 下的某个新插件 碰壁后 的某个下午,我觉得是时候 give it a try 了。

VSCode 最初印象

  • 很顺滑,这是最直观的印象。

在 Emacs(70年代中期) 和 Vim(80年代末期) 诞生的那个古典年代,鼠标并不是个很普及的东西 -- 如果已经出现了的话,所以在她们的世界中,一切输入操作都是要以键盘完成的。直到今天,即使 Emacs 和 Vim 在各个平台上都有了自己的 GUI 的封装,但是你若用鼠标去完成某个操作还是非常蹩脚和低效的(比如拿鼠标翻页?),和后来的编辑器相比,一点都不“现代”。

VSCode 这方面要好上很多,尤其是你如果在 mac 上使用的话, touchpad 很好用并且就在键盘下方,做很多操作就 "方便" 了很多,据我观察,我们前端组里多数人甚至连基本的上下左右移动都是用手指在 touchpad 上完成的,经常把我看走神 -- 这种感觉就像是直接拿手指而不是用餐具去吃东西一样,不是说吃不到嘴里,就是感觉怪怪的。。扯远了,这不是重点。。

  • 另一大印象就是简洁、默认功能强大。

相比其他的文本编辑器,VSCode 的默认配置已经很全面了,上手即用,几乎没有肉眼可见的学习门槛。

基础配置

我的目标基本是把 VSCode 配置成我一直在用的 Spacemacs 的样子,主要包括快捷键和操作习惯等,力争能取众家之长取悦于己。概括来讲主要是三点,

  • 配置基本快捷键:使用 vim 的正常模式作为默认配置,在进入到 vim 的编辑模式下则使用 Emacs 的快捷键。
  • 配置功能快捷键: 使用 spacemacs 的模式配置功能型快捷键
  • 隐藏不必要的花哨元素:比如 tabbar, sidebar,mini-map 等等平时基本用不到但又占空间的的东西。
  • 配置基本快捷键

虽然说了半天 Emacs, 虽然刚开始接触 vim 的时候敲了半天键盘一个字符都没输进去还重启了好几次电脑,但不得不承认 vim 的在行间移动以及三种模式的理念是极其高效的。不出所料的,VSCode 上有很成熟的 vim 插件:

Vim - Visual Studio Marketplace​marketplace.visualstudio.com

但是 vim 有个"缺点",就是在插入模式下不能很好的使用其他模式的快捷键,比如在插入模式下,不能方便的上下左右行移动光标,必须要退出到 Normal 模式下才行,虽然可以绑定诸如 "jj", "fd" 等等方便的退出插入模式,我个人还是倾向于在插入模式下使用快捷键来做这些动作,具体如下:

  • 插入模式下使用 Emacs 的快捷键,比如 c-f, c-b, c-p, c-n 分别对应向前,向后,向上,和向下移动光标,比如 c-a, c-e, c-w, c-b 分别对应行首,行末,删除词/字,c-g 取消各种操作,弹窗提示等等。
  • 在正常的模式下模式使用 vim 的移动快捷键。

同时,我还结合自己的一些习惯绑定了在 vim normal 模式下增强了一些快捷键,比如在原有的 jk 移动基础上添加了 c-j, c-k 的操作,配合 vim 自带的 H,M,L 几乎可以迅速的移动到可视区的任何位置:

// settings.json{"before": ["ctrl+j"],"after": ["j","j","j"]},{"before": ["ctrl+k"],"after": ["k","k","k"]},

按一下顶过去按3下https://www.zhihu.com/video/1138391398238785536

作为补充,c-p,c-n 在正常模式下被映射为向上和向下翻页。

  • 配置功能快捷键

如前所述,在使用 VSCode 之前我用过很长一段时间的 Spacemacs 配置,她给我留下最深刻的印象就是优雅巧妙的区分了功能快捷键,具体操作就是将 vim 的 leader-key 绑定到 "space(空格)",然后将紧接着的按键作为"子菜单入口"进入各种功能区。比如在 Spacemacs 中,按 space-f-s 保存当前文件,space-f-r 打开最近使用的文件等等。

实际上,你可以在按 space-f 后稍做停顿查看提示,你会发现这里全都是和 f(file) 相关的操作:

类似的,你可以使用 space-g- 执行所有和 g(git) 相关的操作:

如果你一看开始不知道干什么,可以直接按 Space,稍作停留后查看所有功能区的入口:

f-文件相关的操作,p-项目相关的操作,t-toggle相关功能等等,一旦你熟悉了她符合直觉命名,你几乎可以想当然的摸索出任何功能的快捷键,且非常高效和优雅,而不是依靠所谓的肌肉记忆和坑长的文档。。

得益于 VSCode 强大的扩展功能,我也照猫画虎的绑定了一些常见的操作:

{"vim.leader": "<space>", // 首先绑定 leader 键到空格// 绑定文件相关操作{"before": ["<leader>","f","S"],"commands": ["workbench.action.files.saveAll"]},{"before": ["<leader>","f","C"],"commands": ["workbench.files.action.collapseExplorerFolders"]}, // ...// 绑定项目相关操作{"before": ["<leader>","p","p"],"commands": ["projectManager.listProjects"]},{"before": ["<leader>","p","e"],"commands": ["projectManager.editProjects"]},// ....// ....}

将常用的功能快捷键按照 spacemacs 的方式整理以后,基本满足了我日常的开发需求,当然很多细节还是有差距,比如 git 操作等等 (emacs 的 magit 实在是太好用了,名字也很好听,相比之下 VSCode 里主流的 gitlens, 感觉就是个花瓶。。)

  • 隐藏不必要的花哨元素

根据我自己的撸码习惯,sidebar,mini-map,tab-bar,active-bar 等等都是十分多余的东西,平时基本都用不到,所以平时我都把他们隐藏起来了,最终大概是这个样子:

插件列表

五花八门的插件可能 VSCode 中最亮眼的风景了,基于 VSCode 这个强悍的深度优化的 web 平台和海量开发者,这些插件在实用之余往往还十分养眼,让人对乔布斯口中那个 "没有设计基因" 的巨硬刮目相看。

我目前所使用的所有插件截图如下:

这些插件大多或看名字就知道用途,或非常流行各种介绍铺天盖地,我就不过多赘述了,我捡几个相对比较"冷门"的一点的聊聊:

  • goto-previous-buffer

说实在的这么实用的功能居然这么少的下载量我是一直没想明白,以至于我是唯一一个留言的用户。。

她的功能很实用,可以让你用命令迅速切换到上一个使用的 "editor" (类似于 emacs 里的 buffer), 我把她绑定到了 SPC-Tab。

我不知道其他大多数 VSCode 是怎么执行类似操作的?比如我在同时编写一个模块的 A, B 文件,需要来回切换,我所知只有三种办法:

  1. 使用 quick-pannel 重新检索之前的文件?
  2. 使用 opend-editors 命令列出打开的所有 editor ?
  3. 在 sidebar 里用鼠标点?

第1,3种办法是在太粗暴了,我之前使用的是第二种,但是这个办法列出的所有 editors 并不会把最近打开使用的排在最前面,非常迷,也非常低效。

  • custom-css

这个插件可以让 VSCode 加载你自定义的 css/js,从而实现一些你想要的,但是目前又没有提供配置选项的功能。比如觉得 VScode 的启动界面实在太难看啰嗦了,你完全可以像调试普通 web 程序一样自定义她:

又比如 VSCode 的多功能搜索框总是在屏幕最上方,在大屏幕上恨不符合我的习惯,你可以用这个插件自定义她的位置:

  • clipboard-manager

可以迅速查看剪切板历史,很实用,很常用。同时建议将她默认的配置关闭:

  "clipboard-manager.preview": false,  // 不预览条目"clipboard-manager.snippet.enabled": false, // 不去管理 snippets

  • clock-in-status-bar

字如其意,我自己 mac 上的 menu bar 并不是一直 fixed 在顶部的,所以有时候想看个时间还得把鼠标移上去或者甚至看一眼手机。。 有了这个就方便多了。

  • file-utils

文件操作相关,可以在 quick-panel 里用命令执行相关操作。我个人一般是关闭 sidebar 的,撸码的时候也不太喜欢用鼠标,在我看来这是很打断思路的行为。这个插件很好的满足了我。

  • polacode

做幻灯片演示的时候很有用处,可以将当前选中的代码块导出成 png 文件。

  • titlebar-less

让 titlebar 不要那么突兀

  • seedling-icon-theme

不突兀的文件类型图标,不会让你分心,不喧宾夺主。

作为糟糕的对比,可以看看其他 icon 是怎么做的:

这些图标在暗色背景下往往非常突兀,虽然乍一看很吸引眼球,典型的花哨有余,实用不足。。


最后附上我的配置,平时的配置是用 code-settings-sync 做的,但是设计私有 token,不方便分享,所以我在 github 上又同步了一份 (可能会有滞后),同时,本文也在持续完善中,欢迎各位 VSCoder 一起交流。

mydearxym/vscode-backup​github.com

vscode主题 webstorm_从 Emacs 和 Vim 到 VSCode相关推荐

  1. vscode更换主题的插件_vscode插件开发:定制 vscode 主题插件扩展

    vscode 自带的几款主题都很漂亮,也支持通过用户配置修改一些常用的配色,但是如果想对很多部分的配色进行修改则没那么容易.我们可以通过基于已有主题定制自己的 vscode 主题扩展来实现该目的. v ...

  2. 分享一个vscode主题收录网站,有了这个网站不用再求别人啦

    VScode现在已经越来越完善,一个好的主题可以使你的工作变得更容易,更有趣和令人兴奋.经常有人问我要vscode主题,今天他来啦, https://vscodethemes.com/ 或者点此跳转 ...

  3. 教你如何创建一款属于自己的VSCode主题

    你有没有想过创建一款属于自己的VSCode主题?没有你想像的那么难,但是真正实现起来也不是那么轻松,需要你对将要去改变的主题的一些属性要有所了解和准备. 如果你要想让你的主题适用于多种编程语言,并且看 ...

  4. 敏捷团队为何失败,Bash技巧,Emacs vs. Vim,为Linux粉丝撰写的12部小说读物,以及其他热门歌曲

    让我们回顾一下6月11日至17日这一周最受欢迎的读物: 史蒂夫·奥文斯(Steve Ovens) 在命令行上每天的重击技巧 Emacs,Vim还是其他? ,由Opensource.com提供 Open ...

  5. VScode主题字体(正体,斜体修改)

    VScode主题字体(正体,斜体修改) 查看当前主题名称 例如 One Monokai Theme 进入C:\Users\Administrator(换成你的用户名).vscode\extension ...

  6. VScode 主题和打字特效配置,让你的VScode活“”起来 [ 二 ]

    前言 上一篇文章 [VScode 主题和打字特效配置,让你的VScode活"

  7. 良心的vscode主题推荐

    良心的vscode主题推荐 AS Roma Dark Cobalt Dark Purple hein Hispter vue theme

  8. 更改vscode主题里的注释斜体

    更改vscode主题里的注释斜体 去C盘-用户-.vscode 找到,找到要改对应主题的json文件 位于C盘的位置 我是用的是ayu一主体,使用vscode打开 ctrl+f 搜索Comment,找 ...

  9. clion下载vscode主题,自定义优美的主题

    这是默认的主题,惨不忍睹 已有的选项还是不喜欢,如果自己一个个设置太耗时间,也尝试设置了以下,设置出来还是巨丑. 找到了已有的主题方案:[IDEA主题样式],可以从这里面找到自己习惯的主题.后导入到c ...

最新文章

  1. JS加强学习-DOM学习01
  2. 如何计算字符串中出现的字符串?
  3. hdu1529 差分约束(好题)
  4. COM原理及应用之COM特性
  5. php常量定义表达式,从表达式创建PHP类常量的最佳解决方法?
  6. python画一束花_用python画一朵玫瑰花,拿去表白趴-Go语言中文社区
  7. Apollo分布式配置中心踩坑
  8. [蓝桥杯2016初赛]平方怪圈-数论,模拟
  9. mac你没有权限打开应用程序_如何管理Mac的隐私权限控制
  10. 什么是ip地址、子网掩码、网关和DNS?
  11. Java Arrays类进行数组排序需要注意的事情
  12. 上传文件到阿里云OSS报错-Unable to execute HTTP request: You have no right to access this object because of buc
  13. zabbix数据库表结构
  14. 动态得到查询结果后绑定
  15. minitab学习系列(2)--CPK、PPK案例解析
  16. Tencent QQ/TIM 文件下载漏洞的研究
  17. javaw和java,java,javaw和javaws之间有什么区别?
  18. 「技术架构」TOGAF建模:环境和位置图
  19. matlab 分段函数 傅里叶变换,2005_09傅里叶变换及其应用 (第3版)_11482158.pdf
  20. 李诞是怎么把吐槽变成一门生意的?

热门文章

  1. 面试题系列(8):什么叫优雅降级和渐进增强?
  2. geetest php,Laravel 集成 Geetest验证码的方法php实例
  3. android item弹出popupwindow recycleview_Android实现RecycleView嵌套RecycleView中的item自动循环滚动功能...
  4. 大数据2019年的三大趋势你看了吗?
  5. C\C++不经意间留下的知识空白------const使用
  6. mathmagic pro mac使用教程|快速地创建任何方程
  7. 并发200_一种单机支持 JavaWeb 容器万级并发的设想
  8. 第十二届 蓝桥杯 青少年C++组 10月比赛 第1题
  9. 第41课 蜗牛与葡萄树 《小学生C++趣味编程》
  10. python利用thinker制作多页面切换的桌面应用实例教程