写点什么

从 VSCode 迁移到 Neovim 的体验

作者:SkyFire
  • 2023-10-14
    中国香港
  • 本文字数:3843 字

    阅读完需:约 13 分钟

从 VSCode 迁移到 Neovim 的体验

目录

简介

vscode 与 neovim 介绍

Visual Studio Code(VSCode)

1. 概述:


Visual Studio Code(简称 VSCode)是由微软开发的免费开源代码编辑器。它被广泛用于多种编程语言和开发任务。


2. 特点:


  • 直观界面: VSCode 具有直观、用户友好的界面,适合初学者和经验丰富的开发者使用。

  • 丰富的语言支持: 通过扩展支持多种编程语言,提供语法高亮、自动补全等功能。

  • 内建 Git 整合: VSCode 具有内建的 Git 整合,可以进行版本控制和协同开发。

  • 扩展市场: 有大量的扩展可用于增强功能和根据特定需求自定义编辑器。

  • 调试功能: VSCode 提供强大的调试界面,支持多种编程语言,有助于识别和修复 bug。

  • 智能感知: 它提供基于上下文的智能代码完成和建议,提高了开发效率。


3. 社区与生态系统:


VSCode 拥有庞大而活跃的社区,为编辑器的扩展、主题和改进做出贡献。这个活跃的生态系统提高了编辑器的整体可用性和多样性。

Neovim

1. 概述:


Neovim 是一个开源文本编辑器,是 Vim 的一个改进版。它面向寻求高度可定制和可扩展文本编辑器的开发者,强调效率和易用性。


2. 特点:


  • 模态编辑: Neovim 使用模态编辑,类似于 Vim,键盘按键的意义取决于编辑器的当前模式(普通、插入、可视等)。

  • 轻量快速: Neovim 被设计为轻量级且快速,适合处理大文件和执行复杂编辑任务。

  • 插件系统: Neovim 内建插件系统,支持多种插件,用户可以定制和扩展编辑器的功能。

  • 内建终端模拟器: 它内置了终端模拟器,允许用户在编辑器内运行 shell 命令和脚本。

  • 跨平台: Neovim 兼容多种操作系统,包括 Windows、macOS 和各种 Linux 发行版。


3. 社区与生态系统:


Neovim 具有不断增长的社区和多样化的插件和配置。它正在积极开发和维护,注重现代化和扩展 Vim 的功能。


VSCode 是功能丰富、现代化的代码编辑器,具有庞大的扩展生态系统;而 Neovim 则是一个高度可定制、快速、高效的文本编辑器,基于 Vim 哲学,适合寻求更简洁、以键盘为中心的文本编辑方式的开发者。

从 VSCode 迁移到 Neovim 的动机

今年之前,我的主开发工具一直是 VSCode ,对 Vim 的了解仅限于会保存、退出、光标移动、打开行号等简单操作。对于网上把 Vim 吹上天的言论一直觉得是由夸大之嫌的。


在学校期间,以及在工作的前几年,也尝试学习下 Vim,但是由于种种原因,经常在坚持一两天后就放弃了(主要是因为 VSCode 等工具真的很好用),所以一直没有真正入门,使用也局限于编辑一下配置文件(不得不用的时候)。


今年步入了 30 岁的门槛,到底还是有一些中年焦虑的,担心自己会失去对技术的敏感度和热情。无意中在一本书中看到一句话:“保持技术热情的一个好方法是每年学习一个新的技能”,这句话让我决心开始再次尝试一下 Vim,并下了学会 Vim 的决心(那时候还不知道 Neovim)。


在折腾了一段时间 Vim 后,有了解到了 Neovim,从此一发不可收拾,再也回不到没有 Neovim 的日志了。从年初到现在,我的主要开发工具一直是 Neovim,VSCode 主要用来查看日志或者编写一些临时性的文档。


在切换到 Neovim 期间,我阅读了不少相关的书籍,在这里列一下,给想要切换 Neovim 的同学一些参考。


  • 《Modern Vim》

  • 《Pro Vim》

  • 《像 IDE 一样使用 Vim》

  • 《Learn Vim Tonight>

  • 《The VimL Primer》

  • 《Gourmet Vim Cookbook》

  • 《Vim 实用技巧》

  • 《Vim 实用技巧(第 2 版):使用模式入门篇》

  • 《Vim 8 文本处理实战》


另外介绍一下 B 站上 TheCW 的视频,是很好的入门教程。


Neovim 与 Vim 的关系

Neovim 是 Vim 的一个分支,旨在改进和扩展原始的 Vim 编辑器。它是为了解决 Vim 在一些方面的限制而诞生的,如可定制性、并行处理、插件支持等。Neovim 保留了 Vim 的许多核心功能和特性,同时还引入了一些新功能和改进。


Neovim 的历史可以追溯到 2014 年,由 Thiago de Arruda 发起这一项目。他首先创建了一个名为 "neovim" 的 GitHub 存储库,并邀请其他开发者加入。该项目旨在以兼容 Vim 的方式重构 Vim 的内部架构,以使其更易于理解、扩展和维护。


对于我这种比较低级的使用者来说,Neovim 和 Vim 之间的主要区别包括以下几个方面(能体会到的):


  • 使用 Lua 配置,而不仅仅是 Vimscript

  • 一些新的插件只支持 Neovim,不支持 Vim(主要是因为使用 Lua 开发)

  • 内置了 LSP(Language Service Protocol)

  • 默认配置文件支持 init.lua 和 init.vim,不再是.vimrc 文件


对于其他的差异,没有特别的感受。

Neovim 与 VSCode 的特点对比


从上面的对比来看,好像 VSCode 在多数方面都比 Neovim 优秀,事实上也确实是,VSCode 确实是一个很优秀的编辑器,而且其自身更是在快速迭代过程中。但是 Neovim 仅凭其强大的定制能力、编辑能力和一致性的体验就值得一学。

从 VSCode 迁移到 Neovim 经验

我迁移的经验大致总结如下:


  1. 直接使用 Neovim,不要使用 VSCode+Vim/Neovim 插件的形式

  2. 如果你想使用 Neovim,那么就直接使用 Neovim,而不要使用一些网友推荐的 VSCode+插件的形式。主要有以下原因:

  3. 无法获得完整的 Neovim 体验

  4. 使用这种方式,很多 VSCode 的功能调用还是需要依赖鼠标点点点,感受不到 Neovim 全键盘操作的真实感觉(掌控一切的感觉)。关于是否使用鼠标,我对这个态度其实是很 Open 的,我的看法是:哪种效率高用哪种,但是尽量不要混合使用,很影响体验和效率。

  5. 插件存在很多问题

  6. 除了上面说的无法完全使用键盘控制你的编辑器之外,还有一个更严重的我问题。插件对于 Neovim 的兼容存在很多问题。这会导致你在使用 Neovim 的插件的时候体验都是部分功能或者有问题的功能。

  7. 更倾向于使用 VSCode 的功能和快捷键

  8. 在你使用 VSCode+插件的形式来学习 Neovim 时,你会更加倾向于使用 VSCode 的功能,而不是 Neovim 的功能(如列编辑)。这将产生很强的割裂感,而且对后续完全切换 Neovim 是个不小的阻力。

  9. Neovim 会和 VSCode 一些快捷键产生冲突

  10. 举个例子,在 VSCode 中 Ctrl+o 一般是打开文件,而在 Neovim 中,一般是跳回上一次光标位置。这写冲突有时会导致很差的体验。因此,如果你想要使用 Neovim,那就直接使用 Neovim 吧。

  11. 自己编写配置,不要直接用其他人的配置

  12. 有些文章推荐从一个高手的配置开始(往往这个高手说的就是他们自己),先用起来。但是这种方法很容易劝退。当你遇到一个快捷键不好使,如何查找问题?当你想禁用一些特别的功能,如何做?当你想定制一些功能时,如何在现有框架下增加?作者将一些你用起来很爽的功能删除了,同步还是不同步?

  13. 在我看来,使用他人的配置,就会陷入他人的框架限制,这与使用 VSCode 时受限于 VSCode 的框架限制是类似的。因此,不要使用他人的配置,直接自己从头编写配置。

  14. 有的同学可能会说,太难了,完全不会自己写配置。事实上,一开始我也是这么认为的,后来,我发现这完全是自己给自己设置的门槛,Vimscript 或者 Lua 都很简单。这里初期如果实在不会,可以在 B 站上找找视频看看。或者直接请教一下 ChatGPT,如:


  1. 自己的配置从一个插件管理器开始

  2. 很多初学者无法直接将 Neovim 作为其主要的开发工具,主要原因还是觉得 Neovim 太简陋了,因此第一个配置应该从插件管理器开始,让 Neovim 看起来不那么简陋。这样可以大大增强对 Neovim 的信心。

  3. 目前流行的 Neovim 插件管理器有很多,任选一个即可,差别没有那么大。目前我使用的是 vim-plug(因为我是从 Vim 过渡到 Neovim 的,而 vim-plug 是 Vim 和 Neovim 都可以使用的插件管理器)。

  4. 使用 Git 管理自己的配置

  5. 随着配置越来越多,可以使用 Git 来管理自己的配置。一个比较好的实践是使用共有仓库管理通用配置,使用私有仓库管理自定义配置(包括一些 Key,特定语言插件等),在通用配置中预留一些合并私有配置的点。

  6. 搜索插件的地方

  7. Github 上有些仓库收集了很多优秀的 Neovim 插件,如:rockerBOO/awesome-neovim: Collections of awesome neovim plugins. (github.com)

  8. 这仓库收录的插件都是比较经典的被很多用户使用优化过的插件,质量可以得到保证。

  9. 不要强迫自己适应不习惯的快捷键

  10. 有些教程会让你适应默认的快捷键,而且已经到了几乎偏执的程度,典型的如禁用方向键,使用“HJKL”控制光标移动,使用“jj”替换<ESC>快捷键等。我对此的态度是:自己习惯就好,没必要刻意强迫自己比如我现在更多的使用方向键而不是“HJKL”完成光标移动。

  11. 快捷键是 Neovim 的一个特色,但不是其核心,其高效的编辑模式才是灵魂所在,切勿本末倒置。

  12. 系统学习一次 Vimscript 或者 Lua

  13. 在学习 Neovim 时,前期可能都是零零星星的配置组合,但是如果想要深入学习 Neovim,还是需要系统学习一边 Neovim 的机制的。包括插件的结构,加载顺序,函数,变量使用。

  14. 在此阶段,最好开发一款自己的插件,动手尝试一下,没有想象中那么难。

总结与展望

使用感受

使用 Neovim 快一年,用起来越来越顺手,已经成为主要的开发工具了。各种快捷键(会话切换、文件查找、跳转、查找替换、Git 操作、分屏、多光标、文件系统操作)基本已经形成肌肉记忆,编辑过程中完全不用思考,自然而然就按下去了。有时候再使用 VSCode 的时候会不自觉按下<ESC>:w(事实上我配置了自动保存,但是随时<ESC>:w 还是一个好习惯)。

我的 Neovim

我的 Neovim 配置在:skyfireitdiy/dotfile: my vim config (github.com)


还是那句话,不建议直接使用我的配置,不过配置管理思路还是可以借鉴一下的。


另外我还开发了两个插件:skyfireitdiy/chatgpt: chatgpt vim插件 (github.com)skyfireitdiy/neoai.nvim: Neovim plugin for intracting with GPT models from OpenAI (github.com)


欢迎试用。


最后附上一张我的 Neovim 截图:



发布于: 刚刚阅读数: 4
用户头像

SkyFire

关注

这个cpper很懒,什么都没留下 2018-10-13 加入

会一点点cpp的苦逼码农

评论

发布
暂无评论
从VSCode迁移到Neovim的体验_vim_SkyFire_InfoQ写作社区