开始之前想必大家都有所耳闻 Vim,玩过服务器的应该都用过。还有不少人被 Vim 的复杂键位劝退,转而使用 vsc 之类简易的 GUI Editor。然而我也是其中之一,曾经多次想过学习 Vim,屡次被劝退。终于这次我在终于学会了使用它

这篇文章主要不是教学,而是介绍 NeoVim 的强大。

主角

这次的主角是 NeoVim,它是 Vim 的升级版,加入了很多 Vim 还没有实现的功能,所以他并不稳定。写这篇文章时,它的版本为 NVIM v0.4.3

NeoVim 依然是一个字符终端下的文本编辑器,所以他先天具有优秀的编辑能力,他可以做到在无显示器的环境下进行编辑。

进入 NeoVim,你会发现它和 Vim 长的一模一样,键位和基本的功能几乎一致。

那。为什么要使用 NVim,因为 NVim 提供了强大的 API,方便开发者使用多种编程语言进行插件开发,而不是 Only VimScript。

基本

Vim 有着大量的键位映射,并不可能每个人都觉得它是有用的,或者它是合理的,所以我对原本的 Keybindings 进行了重新的映射。

Vim 下有以下几个模式:

  • 普通模式 (Normal Mode)
  • 插入模式 (Insert Mode)
  • 可视模式 (Visual Mode)
  • 选择模式 (Select Mode)
  • 命令模式 (Command Mode)

还有一些模式不太常用,暂且不列举。

我对某些键位重新映射以符合我的习惯,比如 ; 映射到 :, S 映射到 :w。对于这些对应的功能是什么,在此不多赘述,因为 Vim 的命令实在太多。

对于 keymap,Vim 提供了下面几种常用的重新映射。(nore 代表不递归映射)

  • noremap <origin> <target> (适用与可视模式,普通模式)
  • nnoremap (仅仅是普通模式)
  • inoremap (仅仅是插入模式)
  • xnoremap (仅仅是可视模式)
  • vnoremap (可视模式和选择模式)
  • snoremap (选择模式)
  • map (仅仅是普通模式,递归映射)
  • imap
  • etc.

我定义了以下映射(将位于文章底部),在定义原本已有的键位时一般使用非递归的映射。

亮点

好像一不小心写歪了,回到正题。为什么说 NeoVim 是神一样的编辑器。

  • 编辑器原本支持很多操作,比如宏录制,多行操作,etc.
  • 插件多,有强大的社区支持。

这次主要介绍一些插件,虽然原生编辑器已经过于强大,使用文档也已经上万行。所以暂且不说。其实我不会

PS:如果你找到此功能在 vscode 中也存在或由插件提供请告诉我。谢谢

全局模糊查找 (Fuzzy Finder)

FZF 是一个模糊查找神奇,比如你只记得一个单词或是几个单词拼接而成,再或者你只记得部分单词,那么发挥它的功能时刻到了。

![](https://cdn.jsdelivr.net/gh/innei/[email protected]/2020-03-06 15.49.38.gif)

编辑记录 (Undo Tree)

他可以记录你一路以来的对文件的所有操作,并且可以回溯。

![](https://cdn.jsdelivr.net/gh/innei/[email protected]/2020-03-06 15.53.58.gif)

快速切换 (Switch.vim)

如果你有一个布尔值为 false,而你想要改成 true

你有一个箭头函数,你想改成 function style?你需要编辑,还要剪切和粘贴?大可不必。

![](https://cdn.jsdelivr.net/gh/innei/[email protected]/2020-03-06 15.58.25.gif)

快速增改括号类型 (vim-surround)

快速跳转 (vim-easy-motion)

etc.

我的配置

https://raw.githubusercontent.com/Innei/nvim/master/init.vim