终极 vim 配置: space-vim - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
simple26
V2EX    Vim

终极 vim 配置: space-vim

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

    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  
    OP
       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  
    OP
       2017-01-19 21:35:57 +08:00
    @macrosea 在对待 Java 这件事上 就算讲出天 配出花来 我也不认为 vim 会比 idea 更强大

    都是工具而已 不必折腾自己 具体问题具体分析比较好 比如 vim 写 Python 肯定是不错 写 Java 还是算了
    nG29DOMuRYTWfcSr
        104
    nG29DOMuRYTWfcSr  
       2017-01-29 21:20:24 +08:00
    @macrosea SpaceVim 目前也支持模块加载,插件也是通过不太模块载入的
    1  2  
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2466 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 01:45 PVG 09:45 LAX 18:45 JFK 21:45
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86