开发工具 一个 [期待] 集体智慧的 vim 配置

liuchengxu · 发布于 2016年12月07日 · 最后由 tcstory 回复于 2016年12月30日 · 2939 次阅读
96

Quick install

curl

sh sh -c "$(curl -fsSL https://raw.githubusercontent.com/liuchengxu/space-vim/master/install.sh)"

wget

sh sh -c "$(wget -qO- https://raw.githubusercontent.com/liuchengxu/space-vim/master/install.sh)"

初衷

spacemacs 可能已经成为 emacs 社区中 “唯我独尊”的配置,在 github 上有近万的 star, contributor 众多。它的 “社区驱动” (community-driven) 真的是很 “耐力持久”,贡献的人很多,UI 很漂亮,功能也很强大。作为 emacs 长久以来的对家 vim, 如果也能有一个这样一个社区驱动的配置,相信也会给大家带来很多便利。

正如 spacemacs 所称,“The best editor is neither Emacs nor Vim, it's Emacs and Vim!”, 最好的编辑器既不是 Emacs 也不是 Vim, 而是 Emacs 和 Vim! 所以不管是从实用角度,还是从设计概念,操作哲学的角度,这两个都是非常值得学习的。此外,“编辑器”始终是编辑器,取代不了 IDE,因为吸引我们的更多是深入其中的过程。

就我自身的使用而言,GUI 环境下我会选择 spacemacs, 但是终端环境下 vim 依然是我的首选。我希望尽量保持这两个环境下操作的一致性。此外,vim 社区中,虽有 spf13-vim, k-vim 等一些比较有名的 vim 配置,但始终整合的不够,散落着很多适用特定环境的很好的配置,比如针对 c-c++, python, ruby 等等不同语言环境。还有大多也不够漂亮(当然了,这个有点主观,但不管怎么说,年轻人就是要挑“好看”的-_-)。

随着 vim8 的升级,会有很多新的更好的插件诞生,比如我用来替代 syntasticale, ale 使用了异步特性,再也不用因为语法检查而拖慢速度了。还有asyncrun.vim 等等,都会成为我们新的选择。 spf13-vim 等的更新似乎不太跟得上步伐,希望集体智慧能够给我们带来一个更好用的 vim 配置。

space-vim

space-vim

愿景

集百家之长,惠千家万家。

概览

名词解释

space-vim 既然是从 spacemacs 启发而来,自然借鉴了非常多的东西,其中最重要的一个概念便是 “Layer”.

Layer

space-vim 目前实现了 Layer 的概念, 就像这样:


call LayersBegin()

Layer 'fzf'
Layer 'emoji'
Layer 'colors'
Layer 'python'
Layer 'markdown'
Layer 'syntax-checking'

call LayersEnd()

在 space-vim 中,所谓的一个 Layer ,其实很简单,就是集成了一些相关的 vim 插件及其配置,涉及到两个文件: config.vim 与 packages.vim. 不难理解,config.vim 为该 Layer 的相关配置信息,packages.vim 则为该 Layer 所需的一些 vim 插件。

比如 Layer better-defaults, packages.vim 中的插件有:


Plug 'liuchengxu/vim-better-default'
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
Plug 'Raimondi/delimitMate'
Plug 'tpope/vim-surround'
Plug 'easymotion/vim-easymotion'
Plug 'mhinz/vim-startify'
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'Xuyuanp/nerdtree-git-plugin', { 'on': 'NERDTreeToggle' }
Plug 'tiagofumo/vim-nerdtree-syntax-highlight', { 'on': 'NERDTreeToggle' }
Plug 'bronson/vim-trailing-whitespace', { 'on': 'FixWhitespace' }

调整,增加 Layer 都非常方便, 这也为 “集百家之长” 提供了土壤。

.spacevim

这个对应的是 .spacemacs, 用户可以自己决定启用哪些 Layer, 可以加载 space-vim 中没有的插件. 首次安装 space-vim 时,.spacevim 会在当前用户目录默认生成,其中主要有两个函数:


" Put layers you want to enable as well as extra private plugins
function! UserInit()

    " Space has been set as the default leader key,
    " if you want to change it, uncomment and set it here.
    " let g:spacevim_leader = "<\Space>"
    " let g:spacevim_localleader = ','

    " Put the layers you want to enable
    Layer 'fzf'

    " Put private plugins
    Plug 'junegunn/vim-github-dashboard'

endfunction

" Customize configuration
function! UserConfig()

    color space-vim-dark

endfunction

LayerStatus 可以查看启用了哪些 Layer.

如何使用

个人配置文件为 .spacevim, 如果没有 .spacevim, 那么 space-vim 仅会加载默认的 Layer. .space-vim 中定义了两个函数分别用于加载 Layer 与个人配置信息。


function! UserInit()

    Layer 'fzf'
    Layer 'ycmd'
    Layer 'syntax-checking'

    Layer 'emoji'
    Layer 'goyo'

    Layer 'html'
    Layer 'python'
    Layer 'markdown'
    Layer 'c-c++'

    " 加载 space-vim Layer中没有的插件
    Plug 'tpope/vim-fugitive'
    Plug 'junegunn/vim-github-dashboard'

endfunction

function! UserConfig()

    color gruvbox

endfunction

此外, private 可以看做是一个 Layer ,如果个人配置比较多,可以放在这里, private 目录可以有 Layer 的两个 "标准" 文件, space-vim 也会进行加载:

  • packages.vim
  • config.vim

如何贡献

  • 完善,增加 Layer. 遵循已有的 Layer 结构。
  • 文档,包括安装细节,使用经验等。

展望

  • 目前还没有在 Windows 下测试,实现了仅 Layer 的按需加载,后续应当还支持一些选项的设置,比如同类插件选择哪一个.
  • 很多文档工作。对于初学者而言,文档可能比什么都重要,装了一些插件不是什么难事,重要的是学会使用这些插件,发挥其功效
  • ......

一个人的精力始终是有限的,非常欢迎大家分享自己的使用经验。三个臭皮匠还赛过诸葛亮呢,还不行? 那就四个:p。

当然啦,可能很多人觉得 vimscript 没有 lisp 那么有表现力,稍显蹩脚。Anyway, 都是工具,乐趣而已。如果能够集思广益,也是利己利人。

初期阶段,可做的事情还很多,欢迎大家分享与贡献. :space-vim

致谢

GitHub 地址:space-vim


既然是 ruby 社区,欢迎使用大家分享一个 ruby layer 哈,这样万一有一天想玩 ruby,也能马上撸起一把呢~~~~


github 上更新了文档,其中的 使用建议 部分,涉及到 vim 的启动时间,或许值得一看。


一点感想:

vim 也好,spacemacs 也好,IDE 也好,希望大家不要忘记这些都只是工具。书里说,人与动物的区别是人类会使用工具, 我们的立身之本是解决问题,而非使用工具

共收到 70 条回复
1573

这个绝对支持啊!!!不过俺 vimscript 的水平一般 😢

想问一下有没有 layer 的编写教程,比如说我来贡献一个 javascript layer,是不是有了你的 layer 层封装,我基本不要写 vimscript 了?

大概看了一下 core_config 和几个 layers,nice~

96

#1楼 @nightire 不需要太多 vimscript 哒~(我才不会说我的那些 vimscript 都是现学现卖的....), 大多是平常的 vim 配置语句。 增加一个 layer 的话,主要是两个文件 packages.vim 和 config.vim。

比如您想分享一个 javascript layer, 那么应该在 +lang 目录下面新建一个 javascript 目录,里面除了 packages.vim 与 config.vim,再来一个 README.md 就齐全了。

packages.vim 放置一些相关的插件 (使用 vim-plug, 能设置 lazy-loading 的尽量设置),config.vim 放置配置信息,可主要针对 FileType 设置。比如 python layer config.vim 里面的:

autocmd FileType python setlocal
            \   foldmethod=indent
            \   textwidth=79
            \   shiftwidth=4
            \   tabstop=4
            \   softtabstop=4
            \   expandtab
            \   autoindent
            \   fileformat=unix

还有针对插件的一些配置等等,默认的可能不是最佳体验嘛~

可以看一下已有的 python layer, 3 个文件就差不多啦~~~

对了注意 clone develop 分支~,您添加完 javascript layer 后,可在本地启用该 layer 人肉测试一下先 ::

14293

这个得支持,从 Atom 换到 Vim 已经一个月了。

1107

我改了一点排版哦。。。

96

#3楼 @hww 欢迎提意见与贡献~

28643

是刚刚更换了 README 最前面的那个 space-vim 的 logo?感觉原来的还挺好看的。

96

#7楼 @uxgnod 😅 换完以后好像是有点 “非主流” 的感觉....... 我看一下 要不还是换回原来的风格~~~ 😵

👍 感谢,换回了原来的风格。

14534

之前也会搞自己的 dotvim,现在就直接使用 square 的 maximum-awesome 了。Vim 新手可以直接上手用这个。

96

#9楼 @holysoros 虽然没试过 square 的这个配置,但是走的是应该是 spf13 的路子。space-vim 在开箱即用上可能更 “人性化”。

96

登陆支持一下。

27

layer 的方式很不错! 语法检查我用的是 neomake,感觉 ale 支持的语言有点少啊

96

#13楼 @numbcoder 毕竟新项目嘛,常见的应该都支持的,刚刚数了一下目前大概支持 40 种语言,而且更新速度很快,看好它~~~

1107

反馈个issue,朋友说安装的时候没给老的 .vimrc 备份 于是他自己的被覆盖掉了

96

#15楼 @jasl 多谢!可能安装脚本出现了问题,按道理是有考虑备份的,我检查一下。带来的不便还请见谅~~~😅

96

@jasl 之前 backup 的确有问题,已修复,抱歉 😅

808

快捷键列表有吗?

865

感觉叫 spacevim 好点。

96

@yesmeck 因为有了一个 spacevim https://github.com/ctjhoa/spacevim , 所以就叫 space-vim 了。

关于spacevim, space-vim 我个人的一点看法 https://github.com/liuchengxu/space-vim/issues/1

https://github.com/Tehnix/spaceneovim-layers 这个我之前没有见到过,不过我实现的 layer 方式应该更接近于 spacemacs, 没有用过这些.

96

#18楼 @lihuazhang SPC ? 即可显示 Maps, tutorial_cn.md 中有提及,可能不太明显。

96

如果我不喜欢一些default的plugins,怎么禁用或者用其它的代替?我可以直接去编辑相应的packages文件,有没有其它的比较容易的方法呢?直接编辑文件,后边git pull的时候会有些麻烦。

教材里边,有一个地方可能需要说的清楚一些,Enable一个新 Layer后,需要运行vim, :PlugInstall.

好像没有提到安装的Plugins升级问题,好像需要自己手动升级。不象Janus,它是把其它的Plugins变成git submodules。升级的时候,自动升级所有的Plugins。

可能我还没有仔细用,有可能没有发现我提到的这些问题,其实都有答案。

96

#23楼 @bwlinux 目前的话,还没有更好的方法,你可以选择直接禁用那个包含你不想要插件的 layer,那么那个 layer 下面的任何东西就都不会加载了。 然后自行在 .spacevim 中的 UserInit() 下添加自己的插件,在 UserConfig() 中添加对于插件的配置。

不过默认安装的 4 个 layer, 可能不太好删除。我还在想怎么处理比较好。

README_cn.md 中的确忽视了启用 layer 后,需要执行 PlugInstall 安装相关插件。在 tutorial_cn.md 中提到了,我会更新 README_cn.md, 感谢!

plugin 升级的问题的确说的比较模糊,只是提了一句使用 vim-plug 的命令进行插件管理,有待完善。

28931

说实在的我玩觉得atom 比vim 好,vim实在是太折腾,配置bug很多,还是atom傻瓜一点。 我是个喜欢简单点的人,v不觉的 在macbook 的情况下 vim 比atom 好用。 关于space-vim ,正在使用中,感谢楼主。

96

#25楼 @ForrestDouble 都是工具而已,不管哪个,用的舒适,不窝心就好~~~ 总有人喜欢甜粽,也总有人喜欢咸粽嘛 😀 还不成熟,如有问题,欢迎反馈😂

4215

报错了!

我发现spacemacs编辑内容有错误,很失望,打算继续尝试vi。

96

@chenge 额..., 这个会不会是网络问题? 我这里试了一下没什么问题,网络好的话 连 YouCompleteMe 都能自动化装好~ (感谢 vim-plug)

127 行是开始使用 vim-plug 安装插件,你可以试一下手动打开 vim 使用 :PlugInstall 安装看看

spacemacs 编辑内容有误?表示还没遇到过,虽然感觉的确比 vim 门槛高,但是这应该不至于吧.. 😅

4215

#28楼 @liuchengxu 有vpn,手动install还是一样的错。 你那个两个sh我这里行不通,我是下载下来执行的,按说是一样的吧。

下面这段emacs就错乱了,估计是编码问题,不是英文。

#@tag :pending
test "pangram in alphabet other than ASCII" do
  refute Pangram.pangram?("Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства.")
end
96

https://www.dailydrip.com/topics/elixir/drips/neovim-for-elixir 这个里边提到了一些新的插件可以考虑一下:

  • vim-polyglot 各种编程语言的大礼包。
  • neomake 各种语言的code linter and make.
  • deoplete autocomplete,这个需要neovim。
96

#29楼 @chenge 手动是一样的,就几步,clone space-vim, 软连接 init.vim, 安装插件,新建 .spacevim, 完毕。不太清楚为什么你那里不 work ...., 我这里重现不了....

乱码的话,你是使用的 GUI Vim?我一般使用 terminal vim, 还没遇到过乱码问题。当然了,也可能是见的世面少 😅 . 不过遇到问题,解决问题才是良性反应。期待找到这个问题的根源。

4215

#31楼 @liuchengxu 不是乱码,本来就不是英文,vi是正常的,那个emacs就显示错误了。

96

#30楼 @bwlinux 感谢推荐,这些我大都没接触过,不太了解。

从介绍来看,它们的功能跟 space-vim 已有的插件似乎有些重叠(code linter, make, autocomplete),而且大都针对 neovim, 我目前使用仍主要是 vim, 也在考虑如何处理 vim 与 neovim, 有些针对 neovim 的插件的确很酷。

以后有时间会尝试一下这些插件,不过非常欢迎试用过这些的人对 space-vim 进行补充。

vim-polyglot 说实话,以前试过,不知道是不是姿势不正确,感觉不到变化,就没再用了。

96

#32楼 @chenge 哦...., 我理解错误...。

spacemacs 有时候遇到问题,不是老司机的话的确很难排查,太多内容了。尽管有时候可能问题在文档中已经有说明了(但是我不一定知道这几句话去哪里找啊...),我之前就遇到过 python 解释器路径的问题解决了好久。

4215

#34楼 @liuchengxu 相对还是sublime省心点,我看一些老外演示都用sublime,我这几年主要也是sublime。

我逐渐习惯和喜欢上vi的编辑操作了。我想加上那个nerdtree,看了文档也是一头雾水。有没有比较简单可靠的方法呢?

96

@chenge 这些肯定是省心的了,各有长处嘛。

加上 nerdtree? 是指在 space-vim 中使用 nerdtree?具体在 better-defaults layer, 如果安装好的话,SPC f t 或者 <F4> 就可以打开 nerdtree.

4215

#36楼 @liuchengxu 我现在不是安不了么,我尝试vagrant看。我是想问有没有手动安装nerdtree的方法。

18858

直接上spacemacs

96

#37楼 @chenge 纯手工作业也不行?真是怪事...。不用插件管理器的话,手动安装按道理应该可以的, 不过我没这么干过.... 😅 ,抱歉。

96

#38楼 @cys 有道理,对我而言,GUI 环境下使用 spacemacs, 不过 终端下 vim 依然是首选。

4215

#39楼 @liuchengxu 你是用的什么插件管理?我看有好多种,我感觉vundle还比较好用。

4215

#39楼 @liuchengxu 你是用的什么插件管理?我看有好多种,我感觉vundle还比较好用。

有vi啊,怎么会错?

vagrant@precise32:~/l2/lvim$ sh spacevim.sh 
[] You must have 'vim' installed to continue.
96

#41楼 @chenge 是有挺多的,我一开始使用的 vundle, 现在使用 vim-plug, 因为 vundle 有的 plug 基本都有,vundle 没有的 plug 也有,比如最重要的并行安装与更新插件。插件比较多,这一点觉得还是比较重要的。

plug 与 vundle 使用基本一致,也非常方便 (我觉得 plug 是 更方便 ~~)。

96

#42楼 @chenge 你确定有 vim? vi 与 vim 是不同的.... 你好像使用的是 mac, 使用 brew 装一个 vim 啊,很快的。

4215

#44楼 @liuchengxu 是默认的vi,正安装vim。mac下就是遇到安装不了你的脚本啊。那我试试看plug。

96

#45楼 @chenge 这个安装脚本是要求必须先有 vim 与 git 两个才能工作的......, 我使用的也是 mac, 装好 vim 与 git 后一键安装应该没啥问题。 如果使用 vi, 安装 space-vim 也没啥用, 体验肯定还是糟糕。

建议安装 vim 时尽量多地包含特性,什么 +python3, +lua 什么的,不太熟悉的话,可以看一下这里

4215

#46楼 @liuchengxu

可以了,比较顺利,感觉不错啊。

96

#47楼 @chenge 👍

建议使用 SPC ? 查看一下现有的键位绑定,以免相互冲突。比如你修改的 <F5> 在 space-vim 中差不多跟 vs 一样,常常是编译运行的快捷键。默认下 <F4> 是打开 nerdtree, 可记:因为 nerd 是 4 个字符所以是 F4.

对于个性化的一些设置可以放在 ~/.spacevim, 因为你直接在 init.vim 中修改的话更新 space-vim 可能会有一些麻烦,现在更新还是比较快的,常常会修正一些小细节。如果没有 ~/.spacevim, 可以自行创建:

function! UserInit()

    Layer 'lightline'
    " Layer 'airline'

    Layer 'text-align'
    Layer 'programming

endfunction

function! UserConfig()
    nmap <F5> :NERDTreeToggle <CR>
endfunction

启用新的 layer 时,记得使用 :PlugInstall 安装相关插件使其生效,也可以先看一下该 layer 的 README 了解一下。

space-vim 搭配 terminal 更佳,因为 主题并没有针对 GUI 有所优化~~~,我也基本不用 GUI Vim 😅 ,所以可能会遇到一些问题。

4215

#48楼 @liuchengxu 谢谢指点,按你说的修改了。

我mac上也可以了,重新安装了8.0,很顺利了。 SPC ?是空格键加问号么?

96

#49楼 @chenge 是的 空格键加问号

4215

#50楼 @liuchengxu 建议增加一个语言Elixir,官方推荐的vim-elixir插件。或者你有没有简明的教程,我来增加。

18858

#40楼 @liuchengxu 我的习惯是,编程环境Emacs,系统配置文件或者部署项目的配置文件用轻量自定义的Vim或者直接默认的Vim

96

r #51楼 @chenge 添加 elixir layer, 可参考这里~

96

#52楼 @cys 各有所好

55楼 已删除
4215

#54楼 @liuchengxu 我发了PR,看行不行,:)

57楼 已删除
96

@chenge 目前还没有什么自动化测试的方法,是人肉测试... . 具体说,比如添加了 python layer, 那么配置完成后打开一个 Python 文件,看看添加的配置是否有效,设置的快捷键是否有效。

所有的文件都在 ~/.space-vim/, 其下 layers 的目录有 +lang, +lang 目录下有针对各种编程语言的 layer.

默认启用的 layer 只有几个,其他的 layer ,比如 programming, text-align 也都是常用的,不过需要自行添加。

function! UserInit()
      Layer 'programming'
      Layer 'text-align'
endfunction

添加后,SPC f R 重新加载 .vimrc, 或者 :so $MYVIMRC, 或者直接退出再打开 vim, 再执行 :PlugInstall 安装插件就完成 layer 的启用了。

96

@chenge OK, 具体细节我会稍作调整的~

4215

#58楼 @liuchengxu 知道了,测试过了。

那个wiki我可以参与修改么?比如增加:如何测试Layer。

96

@chenge 你可以直接修改吗,还是哪里需要什么设置先? 不太了解..., 如果可以的话,欢迎修改.

4215

#61楼 @liuchengxu 我增加了这个测试Layer

那个wiki可以独立clone,我没法push,需要你把我加到contributer吧。

96

#62楼 @chenge contributor 是自动添加的,对项目有 commit 就会被计入。

我有的时候看到别人的 wiki 有 edit 的按钮,有的时候没有,不知道要在哪里设置...., 我再看一下。

96

@chenge 现在你试一下 ,应该可以 edit wiki 了

4215

#64楼 @liuchengxu 好的,我看你的博客没有RSS,想订阅一下,有提供么?

96

#65楼 @chenge 这就尴尬了 🙉 ,因为想保持简洁的风格,所以没有 RSS.....

4215

我发现一些插件对nvim的支持更好一些,你有没有考虑过这个呢?还有配置放在.config/似乎更好一些,fish, nvim都是这样的。

96

#67楼 @chenge 有些插件的确是使用 nvim 更友好一些,但大部分插件仍然是面向 vim, 重要的是 vim 与 nvim 共同使用目前的插件都是没有问题的。配置放在 .config, 可以考虑,这个很容易修改,但是目前觉得没有什么非要修改的理由。放在 .config 更好的地方在哪儿呢?

4215

感觉~目录下好多文件,放在config下感觉更友好谦逊一些吧,个人意见。还有最好统一成space-vim一个词,如果好改的话。 我发现那个elixir的插件文档说支持nvim,所以才提出来供参考。

96

#69楼 @chenge 怎么说呢,看是否有更多人有修改的意愿吧..

space-vim 这个确实有点不太好处理, 其实我是倾向于都用 spacevim, 但是已经有了一个 spacevim repo.....

De6df3 huacnlee 让你的 Vim 更加高效和强大 - SpaceVim 中提及了此贴 12月29日 09:50
2556

没啥用,rubymine吧

3ea35f

#3楼 @hww 为啥?太卡了吗

32 liuchengxu 关闭了讨论 12月30日 17:33
32 liuchengxu 重新开启了讨论 12月30日 18:09
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册