neovim、neovide、astronvim 漫游

首先,我觉得应该先从我们日常会使用到的一些小命令来入手。并且,下面的内容会默认使用了 lazyvim 的配置。我这里会在其基础上进行扩展一些我自己的操作。可能会会有一些基础性概念的说明,比如 leader 键的概念,这些会放在本文的后面讲,请留意。

我们什么时候可以评价 vim 究竟是否好用呢?大概是高强度使用了两个星期之后吧。如果更加严苛一点,那就得是当按下一个 vim 的操作像呼吸一样自然的时候,不过,这个时候,我们还离得开 vim 吗?

打开一个新 tab 并且在其中打开 terminal

1
:tabnew | term

参考:https://stackoverflow.com/questions/64584698/how-to-open-a-terminal-in-new-tab-in-neovim-with-only-one-command-without-remap

仅仅是打开一个 buffer,并且让这个 buffer 是 terminal

1
:term

在 buffer 之间进行切换

  • [b: 跳转到左边的 buffer
  • ]b: 跳转到右边的 buffer

我这里还额外映射了 Shift + hShift + l 进行左右跳转。

在 tab 之间进行切换

  • [t: 跳转到左边的 tab
  • ]t: 跳转到右边的 tab

下面的分割线以下的部分是概览性的内容。

在 terminal 中回到 normal 模式

  • Ctrl + \ 然后再按下 Ctrl + n

关闭当前的这个 buffer

  • leader + c

很多人不知道 neovim 的魅力究竟在哪里。

单单是 neovim 一个组件,或许可能很难打动用户。那么,如果加上 neovide 呢?

如果你没有时间,或者没有一些技术上的积累去从零开始配置一个 neovim 作为自己的 PDE,那么,试一试 astronvim 呢?

或许,很多人会说,折腾这个 neovim 简直是浪费时间。你看看我,我是高手,我写代码都是用 notepad 的。又或者,我有一个朋友,我有一个同事云云,真正的高手从来都是使用最朴素的工具。

如果你这样说,我承认我是 noob。

但是,如果换一个思路,我们以游戏的思维来使用这个工具呢?

我们只是把别人用在游戏上的时间,转换一下兴趣,放在了这种好玩的工具上面,那又是如何呢?

对于我个人来讲,这个其实是无所谓的啦。无非是 kill time 的方式不同罢了。难道正儿八经的时间就不会投入到学习中了吗?当然不是这样。

当然,这也是一篇不正经的博客。如果你想从我这一篇博客中学习到正儿八经的 vim 知识,可能你要失望了。这可能只是一篇随着我的心意记录的经验之谈,没有完整性,没有条理性,或许仅仅只是为了写一篇没有什么太多的意义的博客这样一件专注于本身实则没有意义的事情。

下面就讲一下我的日常离不开的一些 vim/neovim 的功能。

一些基础性的概念

leader 键

翻译过来其实就是叫作起头键,以这个键起头可以有一系列快捷键操作。类似于 Ctrl 这种修饰键。但是,这个 leader 只是针对 normal 模式来讲的。

我一般喜欢把 leader 键映射成 space 键。所以,在我这里,基本可以认为这两个键是等同的。

hop.nvim

首当其冲,是 hop.nvim,或者,它更原始的这样一种工具是 vim 中的一个叫作 easymotion 的插件。

它的功能,其实就是光标的快速跳转。我映射了几个快捷键来快速地在代码(文本)进行跳转。如:

  • leader+leader+w: 快速地跳转到当前页面的且在当前光标之后的每一个单词的开头。
  • leader+leader+b: 快速地跳转到当前页面的且在当前光标之前的每一个单词的开头。
  • leader+leader+e: 快速地跳转到当前页面的且在当前光标之后的每一个单词的结尾。

这个 hop.nvim 结合 vim 的 visual 模式其实也是挺好用的。可以更加地方便我们去复制我们想要复制的文本。

基本的 vim 操作

如:

  • yy: 复制当前行
  • dd: 删除当前行
  • o: 快速地从 normal 模式来到上一行并进入 insert 模式
  • O: 快速地从 normal 模式来到下一行并进入 insert 模式

ToggleTerm

方便我们在 temrinal 中也可以便捷地使用 vim 模式。

nvim-surround

可以方便我们便捷地去修改引号或者括号之类的包裹符号。

一些常用的操作

或许从实际的一个一个操作来讲可能会更加吸引人一些。

下面的一些操作是结合了 motion 这个概念的。motion 直接翻译过来,就是动作的意思。这些动作都是便捷的动作。

  • 快速地复制光标所在的位置的字符串:yiw
  • 快速地剪切光标所在的位置的字符串并进入 insert 模式:diw 或者 ciw
  • 快速选中花括号中的内容:vi{,其他括号或者引号也是类似