关于Vim/Neovim/SpaceVim的一些思考
1 前言
最近看到了Neovim
以及SpaceVim
,于是上手试了一下。
2 Neovim
与SpaceVim
Neovim
是Vim
的一个分支,具有更加现代的GUI
、嵌入式以及脚本化的终端、异步工作控制等等特点,默认配置文件为~/.config/nvim/init.vim
。而SpaveVim
,是一个社区驱动的模块化的Vim IDE
,以模块的方式组织管理插件以及相关配置,为不同的语言开发量身定制了相关的开发模块,提供了自动补全、语法检查、格式化、调试等特性,默认配置文件为~/.SpaveVim.d/init.toml
。
3 使用感受
3.1 Neovim
首先是安装,Neovim
的安装很简单,可以直接通过包管理器安装:
paru -S neovim
安装了之后可以使用nvim
命令打开。
简单使用了一下,发现Neovim
并没有和Vim
(版本8.2
)有太大的区别。一般情况下,这样的Neovim
不能成为一个IDE
,需要添加若干插件才能使用。流行的插件管理器有如下几个:
vim-plug
vundle
neobundle
Pathogen
笔者用的是vim-plug
,插件安装不难,在init.vim
中的两个call
之间加上插件的名字:
call plug#begin('~/.vim/plugged')
Plug 'junegunn/vim-easy-align'
call plug#end()
然后在Neovim
中键入:PlugInstall
即可进行安装。
一般来说,如果需要打造成为一个IDE
,那么至少需要具备以下功能:
- 补全:可用插件YouCompleteMe、vim-snippets
- 高亮:可用插件semantic-highlight.vim
- 工程目录树:可用插件nerdtree
- 运行与调试:可用插件Vdebug
但是,安装使用了之后,测试了一下Java
,效果并不怎么样,拿最常用的补全来说,补全提示的速度比不快,另一方面,提示的速度比IDEA
慢,而且提示不够智能,不能根据当前光标处的变量提示最接近的补全。另一方面,并不能自动import
(虽然可以通过脚本做到,但是又需要额外的配置)。
3.2 SpaceVim
SpaveVim
相当于一个开箱即用的IDE
,默认就提供了IDE
的常见功能,比如:
- 补全
- 高亮
- 工程目录树
- 运行调试
- 快速定位
- 构建工具支持
等等。首先,不可否认的是SpaceVim
默认就提供了一个用户友好的界面:
会默认记录最近打开的文件,并且可以通过数字快速定位。笔者同样使用了Java
进行测试,虽然内置了代码补全插件,但是,令人遗憾的是并没有自动import
的功能,并且也没有变量名自动补全的功能(指创建一个叫arrayList
的变量):
当然,这也有可能是没有完全配置好的原因,想要配置一个更加好用的SpaceVim
,可以参考这篇文章。
4 建议
下面是个人建议的使用Neovim
的原因:
- 需要一个从零开始配置的
IDE
或者Vim
- 动手能力强,能解决各种问题
- 能够熟练记忆并使用各种各样的快捷键
- 熟悉各种插件,包括但不限于
nerdtree
、YouCompleteMe
等等
因为如果想把Neovim
用好,最起码需要花点时间,利用插件安装好各种各样的插件之后(当然因为有些插件只是针对Vim
的,所以可能会遇上不兼容的问题),熟悉它们的使用并知道快捷键,这对记忆力以及学习能力都是一个考验,在这过程中,需要无数次的打开init.vim
进行配置。
建议使用SpaveVim
的原因:
- 不想手动配置太多的插件以及快捷键
- 需要一个开箱即用且轻量级的
IDE
- 不需要开发很大的工程
在SpaveVim
里面,大部分都是已经配置好的,剩下的只是需要通过官网文档熟悉界面,最主要的是熟悉Space
组合键的使用,比如:
Space+数字键
:切换窗口Space+b/B
:缓冲区操作Space+c
:命令操作Space+f
:文件操作Space+l
:语言相关操作,比如运行等等Space+w
:窗口操作
相比起Neovim
需要在init.vim
中配置各种map
去映射键,SpaceVim
的快捷键学习曲线会低了很多。
但是相比起现代级的IDE
,Neovim
与SpaceVim
还是有很大差距的,最明显的就是对各种库、各种包以及一键部署运行的支持,因此,个人认为SpaceVim
/Neovim
不是特别适合大项目的。不过当然有一些折中的方案,比如VSCode
,在各种各样的插件加持之下,可以堪称是又轻又快的现代IDE
。
5 资源
如果想学习Neovim
/SpaceVim
或者想把两者配置成一个更好用的IDE
,这里提供了一些资源:
- Neovim文档
- SpaceVim文档
- vim-plug文档
- Vundle文档
- 24.3k star的vimrc配置
- VimAwesome-Vim插件合集网站
- 8.9k star的如何将Vim配置成C/C++ IDE的仓库
关于Vim/Neovim/SpaceVim的一些思考的更多相关文章
- 代码补全——Vim/Neovim中YouCompleteMe添加第三方库的支持
参考链接: https://github.com/ycm-core/YouCompleteMe#c-family-semantic-completion https://cloud.tencent.c ...
- vim with space-vim
space-vim https://github.com/liuchengxu/space-vim macOS # homebrew /usr/bin/ruby -e "$(curl -fs ...
- 文本编辑器Vim/Neovim任意代码执行漏洞(CVE-2019-12735)
受影响版本: Vim < 8.1.1365, Neovim < 0.3.6 前提:开启modeline 0x01 开启modeline 在你的home下的.vimrc文件中增加一行: se ...
- VIM于换行EOL的思考
\n LF 0A 将当前光标切换到下一行(不一定行首)\r CR OD 将当前光标置于行首 在windows与unix系统中,unix将\n代表换行并置于行首,而windows保持原意.即unix:\ ...
- vim,neovim 配置文件
插件管理用的是 https://github.com/junegunn/vim-plug 打开网址,会有示例,如何安装它本身,以及一些插件,照做,很容易完成 里面有两个可用的配置文件,cp_vimrc ...
- SpaceVim - 让你的vim变得更加高效和强大
SpaceVim 中文手册 项 目 主 页: https://spacevim.org Github 地址 : https://github.com/SpaceVim/SpaceVim SpaceVi ...
- Vim 神器的打造方式
Vim 神器的打造方式 [字体:大 中 小] Vim 是一个上古神器,本篇文章主要持续总结使用 Vim 的过程中不得不了解的一些指令和注意事项,以及持续分享一个前端工作者不得不安装的一些插 ...
- vim助手
移动光标 hjkl 2w 向前移动两个单词 3e 向前移动到第 3 个单词的末尾 0 移动到行首 $ 当前行的末尾 gg 文件第一行 G 文件最后一行 行号+G 指定行 <ctrl>+o ...
- vim神器(学习笔记)
#本文并非原创,属于本人学习中的记录笔记或是转存笔记,如果涉及到哪位高人的创作权益,敬请海涵! Vim 是一个上古神器,本篇文章主要持续总结使用 Vim 的过程中不得不了解的一些指令和注意事项,以及持 ...
随机推荐
- Python 爬虫使用动态切换ip防止封杀
对于爬虫被封禁 ! 爬虫一般来说只要你的ip够多,是不容易被封的. 一些中小网站要封杀你,他的技术成本也是很高的,因为大多数网站没有vps,他们用的是虚拟空间或者是sae,bae这样的paas云. 其 ...
- 微服务学习.net5+consul
趁着刚过完年,还没有开始做业务的时候,学习下consul 概念自己去官网看,这里只讲下具体实现 官网下载https://www.consul.io/downloads 我下载的是Windows版本 启 ...
- JDBC概念理解
##JDBC: 概念:Java DataBase Connectivity Java 数据库连接 Java语言操作数据库 JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则 ...
- 用cmd编译java程序
此时D:****/WorkSpace/javaCode文件夹中有一个Hello.java程序(****为任意的位置,不重要) 1 public class Hello { 2 public stati ...
- Redis6.0.9主从搭建
所谓主从,大家都知道主是写数据,而从是进行数据的拷贝. 1:配置 主节点 127.0.0.1 6379 从节点 127.0.0.1 6378 先将单机版的配置文件赋值两份出来,原先的配置中主要改动有: ...
- Redis 内存淘汰机制详解
一般来说,缓存的容量是小于数据总量的,所以,当缓存数据越来越多,Redis 不可避免的会被写满,这时候就涉及到 Redis 的内存淘汰机制了.我们需要选定某种策略将"不重要"的数据 ...
- 一次Ubuntu16.04 虚拟机挂起,ping不到网络引发的思考
虚拟机挂起 无网络 情况复现 can@ubuntu:~$ ping www.baidu.com ping: unknown host www.baidu.com 挂起重开虚拟机,遇到无网络状态: 首先 ...
- HTML:HTML基础
HTML不是一门编程语言,而是一种用于定义内容结构的标记语言.HTML由一系列元素(elements)组成,这些元素可以用来包围不同部分的内容,使其以某种方式呈现或工作.一对标签可以为一段文字或者一张 ...
- c++ string类使用及用string类解决整行字符串输入
下面随笔给出c++ string类使用及用string类解决整行字符串输入. string类 使用字符串类string表示字符串 string实际上是对字符数组操作的封装 string类常用的构造函数 ...
- 操作系统---IO权限管理和敏感指令
简化版 使用IOPL设置一个特权级的用户程序对所有端口的访问权限,使用I/O位图对一个特权级的用户程序设置个性化的端口访问权限(能访问部分端口.不能访问另外的端口). 用户程序的CPL<IOPL ...