从VSC出逃到Neovim最终留在了 vsocode+neovim
# 从 VSC 出逃到 Neovim 最终留在了 vsocode + neovim
大概 3 周前,有了逃出 vscode 的想法。
理由很多:启动太慢(老生常谈了)、码字的时候好像并不能随心所欲...
怎么算随心所欲呢?在这之前用了很长时间的浏览器插件 vimium (opens new window)
大概就是这样,指哪打哪的哪种 (opens new window)
彼时 vscode 的快速移动我只认识 Ctrl+d
+ 箭头快速跳过一个单词
加上我多少是有点 装逼 极客精神在身。我对命令行是情有独钟的,加上碰巧刷到了一些 neovim 的帖子。话不多说直接一顿安装猛如虎(这时候的我对 vim 的操作也是停留在 :w 保存。:q 退出,简直初生不怕牛犊)
# 转到 vim 的日子
vim 真的是个非常强大的编辑器(编辑器之神不是白叫的)。他的独特就在于他的多模式(正常模式、插入模式、选择模式...)
就是这些各种模式+有限的键盘按键,可以组合出无限的快捷键和操作
当然 vscode 也有组合快捷键,比如先按下 Ctrl + k,然后在按 xxx,但是比起来这些快捷键真的不够看。加上如果你能全部记住那么多快捷键,干嘛不记 vim 的 🤣 (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) 插件
这种键盘操作+指哪打哪的感觉真的太好了 (opens new window)
加上几周前周五摸鱼的时候看到 neovim 的推荐帖子,积压已久的情绪得意发泄。毫不犹豫就入坑了(哪怕我只知道 :w 和 :wq 2 个命令)。
# 入坑和脱坑 neovim
从入坑到脱坑仅仅 2 天。这 2 天发生了很多事情
我先是找了很多从 0 开始配置 neovim 的帖子和视频(文章末尾会给出),跟着动手操作了
看着 neovim 从一个纯黑界面到类似下图这样的(不是我的界面。因为我的配置全删了改成专为 vscode 服务的了,不过当时配置的效果也接近下图)
不得不说这非常酷,界面够极客,操作像手动挡(插件界面都是一手搭出来的)。
但是为啥脱坑了呢?
- 是 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
来给你的编辑器提供语法提示。然后后面还有一堆依赖等着你,其中不乏给电脑装插装服务的。
还有很多零零碎碎的小功能,比如文件夹导航树、快捷打开同项目下的其他文件了... 都得一个个去配置,看看我遗留的插件截图 (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 '' |
在细看键位图。其实每个按键都是一个操作的首单词缩写。
就好像所有人入门要用的 i
指令,其实就是 insert
在 | 前插入。
和它类似的 a
指令,就是 append
在 | 后面追加
和单词移动相关的 w - word
, e - 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>"] }
]
}
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,再按左/右方向键来对齐光标。然后进行批量的文本操作)
其次就是代码折叠后,比如这样的: (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 卡是真的卡,可能一开始没发觉(毕竟自己敲命令也慢)。到后面就真的发觉略卡,导致快捷键没作用到对应的行,代码就错乱了。