从VSC出逃到Neovim最终留在了 vsocode+neovim

12/11/2023

# 从 VSC 出逃到 Neovim 最终留在了 vsocode + neovim

大概 3 周前,有了逃出 vscode 的想法。
理由很多:启动太慢(老生常谈了)、码字的时候好像并不能随心所欲...

怎么算随心所欲呢?在这之前用了很长时间的浏览器插件 vimium (opens new window)

大概就是这样,指哪打哪的哪种 piWGi0x.png (opens new window)

彼时 vscode 的快速移动我只认识 Ctrl+d + 箭头快速跳过一个单词

加上我多少是有点 装逼 极客精神在身。我对命令行是情有独钟的,加上碰巧刷到了一些 neovim 的帖子。话不多说直接一顿安装猛如虎(这时候的我对 vim 的操作也是停留在 :w 保存。:q 退出,简直初生不怕牛犊)

# 转到 vim 的日子

vim 真的是个非常强大的编辑器(编辑器之神不是白叫的)。他的独特就在于他的多模式(正常模式、插入模式、选择模式...)

就是这些各种模式+有限的键盘按键,可以组合出无限的快捷键和操作

当然 vscode 也有组合快捷键,比如先按下 Ctrl + k,然后在按 xxx,但是比起来这些快捷键真的不够看。加上如果你能全部记住那么多快捷键,干嘛不记 vim 的 🤣 piWG7CD.png (opens new window)

上面的简单的 2 个按键的快捷键,代替了许多方向键操作甚至是鼠标移动操作。所以难的不是 vim,而是长期以往的习惯问题。

vim 看上去很难,实际上好记的很,网上说的入门难度和入门时间更多是自己要转换过来熟悉 vim。上手其实半天就能上手了

vim 的命令不需要死记硬背。举些例子

快捷键 作用 记法
dw 删除光标所在的个单词 delete word
yw 复制光标所在的单词 yank word
cw 修改光标所在的单词(删除+ 进入编辑模式) change word
10x 连续删除 10 个字符 数字 + 快捷键组合

# 在 neovim 的日子

直到现在要我评价 neovim ,我依旧能给出非常高的评价

极快的启动速度、极致的操作体验、极细的定制功能、极其丰富的插件生态...


# Neovim:给大家介绍下我新谈的女朋友 VScode

很多人都说 Window 已经最好的 Linux 发行版。

在这里我想说 Vscode 在我心目中也是最好的 Neovim 的 gui 发行版

# 😆 暖场,唠唠家常

这部分不涉及配置和插件推荐,主要是我从 neovim - vscodevim - vscode neovim 这一路上一些踩坑经历,希望也能给准备去踩坑的你一些心里预设(当年我也是不听劝直接进坑,现在看回来真是听人劝吃饱饭),所以总的来说这部分讲的有点啰嗦。
只想看配置部分可以直接跳转到 开始部分

故事的开始是 vscode 用久了,处腻了。不过也知道自己电脑带不动 webstorm,而且jB家的东西都是要收费的。 破解虽好,万一收律师函

其次就是浏览器一直在用 vimium (opens new window) 插件

这种键盘操作+指哪打哪的感觉真的太好了 piWGi0x.png (opens new window)

加上几周前周五摸鱼的时候看到 neovim 的推荐帖子,积压已久的情绪得意发泄。毫不犹豫就入坑了(哪怕我只知道 :w 和 :wq 2 个命令)。

# 入坑和脱坑 neovim

从入坑到脱坑仅仅 2 天。这 2 天发生了很多事情

我先是找了很多从 0 开始配置 neovim 的帖子和视频(文章末尾会给出),跟着动手操作了

看着 neovim 从一个纯黑界面到类似下图这样的(不是我的界面。因为我的配置全删了改成专为 vscode 服务的了,不过当时配置的效果也接近下图)

piWNMRS.png (opens new window)

不得不说这非常酷,界面够极客,操作像手动挡(插件界面都是一手搭出来的)。

但是为啥脱坑了呢?

  • 是 neovim/vim 真的太纯粹。纯粹到一点语法都没有。我要为此找很多的 lsp

lsp 很难找吗?

  • 相反,lsp 多的很,可以说想要的语言基本都能找到,甚至多的我不知道选哪个。

但是装 lsp 和语法提示真的很难。举个例子:

我当时在配 neovim 的配置,用的 lua 语法,我在 neovim 要先找到 lua 的 lsp,到 mason 找 lua 配套的东西,改配置加载 lua 的语法...
最近在 vscode 改 lua 配置,我只需要在安装一个 lua 插件,语法高亮、提示、甚至 format 统统都有了,那么多功能只需要我按下那个 install(谁懂啊!!)

对于前端来说更多时候是在和 js、ts、html 打交道。这种看上去非常普遍,甚至是个人都能上手写几句的 js。

在 neovim 中要花费很大的力气和很好的网络 (lsp 多数从 github 去拉)才能达到 vscode 双击安装包安装完成的水平(语法提示,高亮等基础功能)。这不是纯纯的降维打击吗

你以为找到 lsp 就可以了吗,你还得安装 coc/nvim-cmp 来给你的编辑器提供语法提示。然后后面还有一堆依赖等着你,其中不乏给电脑装插装服务的。

还有很多零零碎碎的小功能,比如文件夹导航树、快捷打开同项目下的其他文件了... 都得一个个去配置,看看我遗留的插件截图 piWUwkt.png (opens new window)

最后装到 vue 的 lsp 的时候绷不住了 🤣 然后当初入坑 neovim 也是为了启动速度。看到有帖子说

vsocde 纯启动其实也很快的,任何编辑器装了 lsp 都快不了多少...
neovim 装了 vue 的语法插件一样会变卡 ...

脱坑,回 vscode

# 转向 vsocde-vim

回到 vscode 后一直意难平,毕竟我在配置 neovim 的时候也学了点 vim 的指法。沉醉其中不能自拔那种...

vim 的指法真的非常简单,别看快捷键看起来毫无规律,其实就是背单词

比方说

指令 效果 记法
dw 删除当前光标的那个单词 delete word
yw 复制当前光标的那个单词 yank word
ci' 修改离光标最近的一组'' 里面的内容 change in ''

piWa7PP.png (opens new window)

在细看键位图。其实每个按键都是一个操作的首单词缩写。 就好像所有人入门要用的 i 指令,其实就是 insert 在 | 前插入。
和它类似的 a 指令,就是 append 在 | 后面追加

和单词移动相关的 w - worde - end(移动到单词末尾)b - begin(移动到单词开头) ... 都非常好记

比起在 vscode 数着拍子按上下左右, wbe 可太香了,更加别说 f t

然后二度入坑 vim ,这次是在 vscode 安装 vim 插件。vscodevim (opens new window)

毕竟我是 vim 新手,没那么多自己的键位,我就把部分用得多的 vscode 快捷键放出来。毕竟这些键在 vim 中多数也是快速翻屏的,不用也罢。

我用到的功能还很少,所有配置大概就这些

{
  "vim.easymotion": true,
  "vim.handleKeys": {
    "<C-b>": false,
    "<C-n>": false,
    "<C-p>": false
  },
  "vim.hlsearch": true,
  "vim.incsearch": true,
  "vim.insertModeKeyBindings": [{ "after": ["<Esc>"], "before": ["j", "k"] }],
  "vim.leader": "<space>",
  "vim.normalModeKeyBindingsNonRecursive": [
    { "before": ["<leader>", "n"], "commands": [":nohl"] },
    { "before": ["<leader>", "<C-w>"], "commands": ["workbench.action.closeActiveEditor"] },
    { "after": ["<C-w>", "l"], "before": ["<C-l>"] },
    { "after": ["<C-w>", "h"], "before": ["<C-h>"] }
  ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

是不是感觉配置特别少,因为很多我想要的功能他。。配不出来

比如我在 vscode 心念念的 ctrl + d。我在 vscode 用 ctrl+d 真的是用的走火入魔的地步(我很喜欢竖着拉很多光标(ctrl+alt+下箭头),然后按 ctrl+d,再按左/右方向键来对齐光标。然后进行批量的文本操作)

其次就是代码折叠后,比如这样的: piWd3se.png (opens new window)

这时候如果光标往下走,会触发这个折叠自动打开,在 vim 中可以通过 gj 来避免这个问题,gj就是按当前屏幕显示的行数来跳转的,被折叠的会当成一行。

配置 neovim 的时候学到这么一个小操作:连续按 j 的话,就触发为 gj ,否则就按默认的 j 一行行跳转

-- https://www.reddit.com/r/vim/comments/2k4cbr/problem_with_gj_and_gk/
vim.keymap.set("n", "j", [[v:count ? 'j' : 'gj']], { noremap = true, expr = true })
vim.keymap.set("n", "k", [[v:count ? 'k' : 'gk']], { noremap = true, expr = true })
1
2
3

然而 vsocde-vim 只支持简单的快捷键映射,甚至 j 映射到 gj 都能死循环。。所以我上面的快捷键才那么少,根本不知道我能做什么

就这样又在 vim 下摸索了几天,每天也都在学新的快捷命令。但是 vsocde-vim 卡是真的卡,可能一开始没发觉(毕竟自己敲命令也慢)。到后面就真的发觉略卡,导致快捷键没作用到对应的行,代码就错乱了。

Last Updated: 1/7/2024, 5:51:59 PM