百科问答小站 logo
百科问答小站 font logo



如何评价neovim/nvim 0.5? 第1页

  

user avatar   tracyone 网友的相关建议: 
      

编辑器之战再起波澜

老故事

自从2015年11月neovim横空出世,让沉寂很久的编辑器之战掀起波澜,只是这次是vim内部之间的战争,那就是从vim内部分裂出去的neovim。随着neovim的一个又一个新特性推出,比如,内嵌终端,悬浮窗口,多线程异步IO,立刻将一大部分原来的vim用户吸引过去,而代表老一派的vim作者也不放弃,立马跟进,neovim有的,我vim也有而且做得更好,更稳定。

这段时间,两者特性更新都很快,随着新特性而来的是如雨后春笋般出现的新插件们,插件作者们看到让vim接近emacs的机会,都说emacs是操作系统,现在vim & neovim有了这么多牛逼特性,vim可以多线程异步执行任务了,vim可以内嵌终端了,vim可以悬浮窗口,vim & neovim可以玩游戏了......这让vim & neovim看起来更像一个现代的编辑器,但是依旧保留了它的优点。

这段时间,有些脸皮厚像我,也开始晒配置了。还出现了space-vim和SpaceVim这样的配置之争,两者几乎同时出现(前者早几个星期),他们都想模仿著名的emacs配置框架Spacemacs。

也几乎在同时,我也产生了同样的想法,希望我的配置是可方便裁剪,集成尽可能多功能,快捷键也是以Space开始,不一样的是,我希望界面上尽可能低调,功能牛逼.....

我是一个vim支持者,同样情况下vim能兼容更多环境,而且vim该有的功能都有,neovim刚起步比vim不稳定些。好在两者在大部分情况下,一份配置是能互相兼容的,偶尔想玩下新特性就切换到neovim。

往事不提也罢....

沉寂期

逐渐vim和neovim的开发速度放下来了,从我的角度来看,两者都向着一个大方向前进,那就是内嵌速度更快更灵活的编程语言来配置vim & neovim。所以两个项目都进入漫长的开发期。

以前的我,几乎隔几天就更新一下vim,现在我停止更新了,因为会带来各种兼容性问题和不稳定。由于neovim也陷入了长期新特性的开发,所以我有好一段时间没有更新编辑器也没有更新我的配置,而是专心代码了。

这段时间大概维持了有接近两年。

再起波澜

vim朝着vim9的方向出发,目标是开发一种更快的vim 脚本。目前的进度根据bram本人说可能还需要“a few month"。

neovim这段时间朝着下面三个方向前进:

  1. 以lua为第一配置编程语言。Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于 1993 年开发的。
  2. 支持Language server protocol (LSP)。LSP是一种被用于编辑器或集成开发环境 与 支持比如自动补全,定义跳转,查找所有引用等语言特性的语言服务器之间的一种协议
  3. 支持Treesitter。它是一个语法解析工具库。目标是足够快并且支持绝大部分编程语言而且可灵活嵌入到任何应用中。

neovim再次掀起了编辑器之战的波澜,neovim 0.5率先发布,实现了上面三个特性。这个版本的发布带起一阵学习lua的旋风,也让更多的人第一次知道了LSP和Treesitter。

用普通人能听懂的话来总结这次更新就是:

  1. neovim配置更灵活,扩展更方便。启动更快。neovim配置更灵活,扩展更方便。启动更快。
  2. 补全跳转更智能,速度更快,支持更多的编程语言,只要LSP支持的,neovim都支持。
  3. 语法高亮渲染更快速了更准确,再也不会看到白茫茫一片的代码了。

如何配置lua写的neovim插件

作为使用者,我们其实也没必要为了neovim的新特性将配置全部改成lua,neovim的兼容性还是很好的。我想保持兼容性的前提又用上neovim的新特性,只需要在原来的配置上做一些小小的区分,以及知道lua的基本语法就行。

第一步根据neovim版本来区别配置:

       function! te#env#IsNvim() abort     if has('nvim')          let v = api_info().version         return v.major + v.minor/10.0 + v.patch / 100.0     endif     return 0 endfunction     

如上面函数,该函数返回neovim的版本或者0(表示不是neovim)。

当版本号大于等于0.5时,我们就可以在vim脚本里面(我们的配置)加上一些必要的lua插件及其配置,当然我们加载插件还是用我们喜欢的插件管理器:

       Plug 'hrsh7th/nvim-cmp', {'branch': 'main' }  lua << EOF require('nvim_cmp') EOF     

现在neovim的用lua写的插件只支持用lua配置,我们可以通过上面这样的语法将lua代码嵌入到vim脚本里面,当然在vim脚本里面插入太多lua代码不是一件明智的做法,所以我们这里只是简单的进行require,而把所有细节都放在lua/nvim_cmp.lua文件中。这里要说明的是neovim会自动在lua文件夹下找对应的lua模块,在你的init.vim所在目录下创建一个lua文件夹即可,下面是我的配置的目录结构。

       . ├── after │   └── ftplugin ├── autoload │   └── te │       ├── ctrlp │       ├── fzf │       └── leaderf ├── bin ├── bundle ├── lua ├── rc ├── init.vim └── vimrc     

必装插件

首先基于LSP特性的补全插件,这里首推nvim-cmp,及其众多source插件。其中nvim-lspconfig是官方的lsp接口插件是nvim-cmp依赖的。

           Plug 'hrsh7th/cmp-nvim-lsp', {'branch': 'main' }     Plug 'hrsh7th/cmp-buffer', {'branch': 'main' }     Plug 'hrsh7th/nvim-cmp', {'branch': 'main' }     Plug 'hrsh7th/cmp-path', {'branch': 'main' }     Plug 'hrsh7th/cmp-nvim-lua',{'branch': 'main'}     Plug 'quangnguyen30192/cmp-nvim-ultisnips', {'branch': 'main' }     Plug 'octaltree/cmp-look'      Plug 'neovim/nvim-lspconfig'     

lsp服务端下载插件:

nvim-lspinstall或者nvim-lsp-installer,它们可以帮助我快速安装对应编程语言的LSP服务端程序。

最后就是treesitter插件了:nvim-treesitter

还有许多看起来很炫目的插件实际上不是必要的,旧插件早就实现了相同功能。

一些资源




  

相关话题

  用 VS Code 替代 Vim 可行吗? 
  Visual Studio Code 可以翻盘成功主要是因为什么? 
  如何评价 vim 8.2? 
  为什么 Vim 这样早期的编辑器一直流行? 
  什么是 Vim 可以做而 Emacs 做不到的? 
  如何将 Vim 剪贴板里面的东西粘贴到 Vim 之外的地方? 
  如何使用vim操作文本,只保留每段第一句话,将保留的文本内容保存到另外一个新的文件? 
  为什么很多人都说 Java 和 C++ 不适合用 vim 开发? 
  除了 Vim 不用其他 IDE 的程序员有多厉害? 
  你为了真正做到使用vim提高效率,花了多长时间学习和练习? 

前一个讨论
真的有那么多人需要30系显卡吗?
下一个讨论
如何评价nga原神版版主在ngavtuber板块发表看到原神就会去世的言论?





© 2024-09-19 - tinynew.org. All Rights Reserved.
© 2024-09-19 - tinynew.org. 保留所有权利