首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
simple26
V2EX  ›  Vim

终极 vim 配置: space-vim

  •  4
     
  •   simple26 · 2016-12-03 18:32:12 +08:00 · 12294 次点击
    这是一个创建于 1141 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Quick Install

    • curl

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

      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 配置。

    screenshot

    愿景

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

    概览

    名词解释

    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.

    layerstatus

    如何使用

    个人配置文件为 .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

    致谢


    • 标题是不是很唬人?但如果真能如愿景,那水分应该也不算很大,谁能否认人民群众集体的智慧呢?(难道你是反动派?)

    • 初期阶段,如果遇到问题还希望能够请大家共同解决,非常乐于学习新知识....

    第 1 条附言  ·  2016-12-04 10:57:34 +08:00
    第 2 条附言  ·  2016-12-04 15:01:00 +08:00
    目前的一键安装脚本有点问题,抱歉!如果想试用的话,可以尝试手动 clone space-vim 到本地 ~/.space-vim, 再打开 vim 安装插件...
    第 3 条附言  ·  2016-12-04 15:15:50 +08:00
    你看,这就是群众的力量,感谢 @Lycnir 修复了安装脚本的问题。
    第 4 条附言  ·  2016-12-26 17:59:32 +08:00
    github 上更新了文档, 或许值得一看的是 使用建议 部分, 涉及到 vim 的启动时间。
    104 回复  |  直到 2017-01-29 21:20:24 +08:00
    1  2  
    simple26
        101
    simple26   2017-01-19 16:34:49 +08:00
    @macrosea 如果你看我的 dotfile 你看发现有个 ideavimrc .... 写 Java 我使用 idea 而不是 vim

    是否支持这个问题 嗯 不是还有个 SpaceVim 号称支持 Java 吗?

    反正我不会用 vim 写正经的 Java 不过如果是简单的写点 Java 的东西 space-vim 应该也够了
    macrosea
        102
    macrosea   2017-01-19 21:18:03 +08:00
    SpaceVim 也很好的, 但是我更喜欢 space-vim 的插件组织方式
    simple26
        103
    simple26   2017-01-19 21:35:57 +08:00
    @macrosea 在对待 Java 这件事上 就算讲出天 配出花来 我也不认为 vim 会比 idea 更强大

    都是工具而已 不必折腾自己 具体问题具体分析比较好 比如 vim 写 Python 肯定是不错 写 Java 还是算了
    SpaceVim
        104
    SpaceVim   2017-01-29 21:20:24 +08:00
    @macrosea SpaceVim 目前也支持模块加载,插件也是通过不太模块载入的
    1  2  
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1493 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 34ms · UTC 17:17 · PVG 01:17 · LAX 09:17 · JFK 12:17
    ♥ Do have faith in what you're doing.