美文网首页IT编程上古神器VimVim
超漂亮 vim 配置:space-vim

超漂亮 vim 配置:space-vim

作者: liuchengxu | 来源:发表于2016-11-06 20:12 被阅读13907次

    space-vim 现已支持 Layer ,以下内容大都陈旧,欢迎访问 github 查看最新版本:
    >>>> space-vim

    hhkb

    此外,关于 vim 自身的键位设定,开始时能会觉得很奇怪为什么会这样,因为以前的键盘长这样:

    ancient_keyboard ADM-3A

    看到这个,也就应该能够理解为什么 vim 使用 hjkl 作为方向键,因为物理条件就是这样.

    Prerequisites

    在安装 vim 时, 因为不太熟悉可能会走一条捷径, 贪图一个简单的安装命令就搞定, 比如 sudo apt install vim。不过后期可能会因为缺少某些功能而发生一些问题。 因此, 在前期安装 vim 时最好就将这些问题搞定, 比如编译支持 python 的vim, 因为 后面的插件 YouCompleteMe 需要这一特性.

    mac 下使用 brew 安装的话非常方便, 可以使用 brew info vim 看有哪些安装选项,并在安装时指定编译选项:

    brew install vim --with-lua --with-python3 --with-override-system-vi
    

    其他平台下,网络上有很多指引,这里不再赘述。

    另外,有些插件用到的一些工具也要安装, 下面给出 mac 下的一些安装途径, 其他平台下可对应查找安装途径:

    # tools used by some plugins, you need install them to make all the plugins work
    # you can install them with brew painlessly as followed,
    # if you use linux or windows, install them on your own, it is not too difficult.
    
    #### syntastic
    npm install jsl jshint
    brew install flake8
    brew install tidy-html5 shellcheck the_silver_searcher
    
    #### tagbar
    brew install ctags
    
    #### youcompleteme
    brew install cmake
    

    快捷键

    要想使用 vim 提高效率,记住一些快捷键是必然的. 而这种事情都是熟能生巧,一些常用操作用多了自然也就记住了.

    介绍具体的快捷键之前,先来了解一下一些基本概念,比如 buffer, 比如 window, 否则即使知道快捷键是什么也不知道该怎么用.如下图中的红色边框区域都是 window , <Leader> w 都是 window 相关操作的快捷键.

    比如我们打开了 NERDTree, 那么如何从 NERDTree 中跳回到 buffer 区进行编辑呢?执行窗口操作 <Leader> w l 即可跳到左边的 "窗口".
    要知道我第一次进入 NERDTree,不知道怎么回到 buffer 时,没办法只能退出 vim 再重新打开文件 -_|.

    intro

    下面是一些使用频率较高的快捷键, 经常使用熟练以后,很多操作已经成为一种下意识地行为.

    General

    这部分大都是一些常用命令的快捷键映射或是默认的一些功能键,由于想精简 .vimrc ,于是我将一些常见且不经常改动的设置包装成一个插件进行载入,详情查看下一部分的 vim-better-default

    下面表格中的快捷键按使用频率排序.

    Key Binding Description
    Ctrl + c 复制
    Ctrl + v 粘贴
    <F5> 编译运行c, cpp, python等文件
    % 光标停留在括号处,%跳转到对应匹配的括号
    <Leader> t n 显示/隐藏 行号(line number)
    <Leader> t r 显示/隐藏 相对(relative)行号
    <Leader> f v 打开 .vimrc
    <Leader> f l 打开 .vimrc.plug.list
    <Leader> f c 打开 .vimrc.plug.conf
    <Leader> f R 重新加载 vimrc
    <Leader> w m GUI 环境下为窗口最大化切换开关

    Plugins

    插件并不是越多越好,每个插件我们常用的大多只是其中一小部分功能而已. 插件装多了,vim 一样会慢. 当然也不是配置地功能越强大越好, 选择合适且真正用得到的功能,在这些地方用的舒心即可。

    有些插件 “即装即用”,基本不用配置, 或是 "一次配置,终身使用". 有些则稍麻烦一些,不仅是在配置上需要注意,使用上也可能会有一些学习成本,需要有一点耐心才能看到它带来的效果.

    我不使用 vim 的标签页 (tab) 功能,所以关于 <Leader> t 的快捷键都不涉及 tab 操作.

    Key Binding Description
    <F4> NERDTree (NERD -> 4个字母)
    <F6> Tagbar (Tagbar -> 6个字母)
    <Leader> ? 查看快捷键绑定
    <Leader> ;; 智能注释
    <Leader> b h vim起始页(buffer home)(等同于 <Leader> f r)
    <Leader> f r 查看最近文件 (file opened recently)
    <Leader> x d 去除行尾多余空格 (text delete trailing whitespaces)

    vim-better-default

    Basic

    Key Binding Mode Description
    <Leader> q Normal 退出 (quit)
    <Leader> Q Normal 不保存直接退出
    <Leader> d Normal 向下 (down) 移动半屏
    <Leader> u Normal 向上 (up) 移动半屏
    U Normal 重做, redo (对应 u 为撤销,undo)
    H Normal 光标跳转到行首
    L Normal 光标跳转到行尾
    Y Normal 从光标处复制到行尾
    <Leader> ' Normal 在 vim 中打开shell
    <Leader> s c Normal 撤销搜索结果高亮
    <Leader> t p Normal 粘贴模式开关 (toggle pastemode)
    Ctrl j Insert j, 向下移动
    Ctrl k Insert k, 向上移动
    Ctrl h Insert h, 向左移动
    Ctrl l Insert l, 向右移动
    jj Insert <Esc>
    jk Insert <Esc>
    kk Insert <Esc>
    ;; Insert <Esc>
    v Visual <Esc>

    <ESC> 可能是使用非常多的一个键, 如果将 jj, jk 几个快速退出插入模式的快捷键熟记于心,应当会减轻不少 "切换" 的压力。 另外,新手请注意默认情况下 Ctrl + [ 也是 <ESC>. 按一下 v 进入 visual mode, 再按一下离开 visual mode 也很方便。

    Buffer

    缓冲区操作, <Leader> b.

    我最常用的是 <Leader> [1-9], 直接前缀键加上对应的 buffer 编号即可跳转到该 buffer.
    spacemacs 中, <Leader> [1-9] 是跳转到对应的 window. 因为 emacs 中 window 是有编号的,而 vim 中 window 没有编号, buffer 有编号. 此外很多人会使用 vim-airline,在 vim-airline 中上方也会显示 buffer 的编号,很方便。

    Key Binding Description
    <Leader> [1-9] 切换至对应编号[1-9]对应缓冲区
    <Leader> b p 上一个 (previous) 缓冲区
    <Leader> b n 下一个 (next) 缓冲区
    <Leader> b d 删除 (delete) 当前缓冲区
    <Leader> b k 杀掉 (kill) 缓冲区
    <Leader> b b 显示缓冲区 (buffer)

    两个删除缓冲区命令的区别:

    • <Leader> b d : buffer delete.

    • <Leader> b k (实际映射的是bw) : like bd, but really delete the buffer. Everything related to the buffer is lost. All marks in this buffer become invalid, option settings are lost, etc. Don’t use this unless you know what you are doing.

    File & Fold

    文件操作, <Leader> f.

    打开文件时,可能有些人不太喜欢全部折叠起来,<Leader> f 9 即可全部展开.

    Key Binding Description
    <Leader> f s 保存(save)文件
    <Leader> f [1-9] 设置折叠 (fold) 层次,f 0 相当于全部折叠, f 9 相当于取消折叠全部展开

    Window

    窗口操作, <Leader> w.

    关于分割窗口的功能,我还常常使用 tmux 来实现,因为它也非常值得学习.

    Key Binding Description
    <Leader> w j 移动至下方窗口
    <Leader> w k 移动至上方窗口
    <Leader> w h 移动至左边窗口
    <Leader> w l 移动至右边窗口
    <Leader> w v 竖直分割窗口, 等同于 `<Leader> w `
    <Leader> w 2 将窗口分割为两列,等同于<Leader> w v
    <Leader> w s 水平分割窗口, 等同于 <Leader> w -
    <Leader> w d 关闭 (cancel) 当前窗口
    <Leader> w q 退出 (quit) 当前窗口,若是最后一个窗口则退出vim
    <Leader> w w 在所有窗口中循环移动
    <Leader> w r 向右或向下方交换 (replace) 窗口

    vim-airline

    vim-airline 最好搭配 powerline fonts 字体, space-vim 默认不使用. 不过推荐安装:

    git clone https://github.com/powerline/fonts.git ~/.fonts
    sh ~/.fonts/install.sh
    

    powerline font 安装完成后,在 .vimrc.plug.conf中的 air-line 中启用字体:

    let g:airline_powerline_fonts=1
    

    设置 terminal 字体:

    终端环境下 vim 的字体服从于 terminal 的字体设置,GUI 环境下可直接在配置文件中进行设置. 因此安装完成后需要在 terminal 的字体设置中将原有字体改为带有 for powerline 样式的字体,否则会出现状态栏乱码. 比如 iterm2 中字体设置:

    powerline_setting

    vim-colorschemes

    一个多漂亮的主题用的久了,总会没感觉,这个插件集成了很多 vim 的主题,可以自行挑一个在自己机器上显示效果不错的。 比如想修改为 atom:

    echo "color atom" >> ~/.vimrc.local
    

    我比较喜欢的是 dracula 和 molokai。

    tabular

    Key Binding Description
    `<Leader> a ` 按 ` ` 对齐
    <Leader> a : : 对齐
    <Leader> a = = 对齐

    可能 <Leader> a | 是我用的比较多的一个,因为经常在 markdown 中对齐表格。

    vim-easymotion

    easymotion 默认的前缀键为 <Leader><Leader>.

    Key Binding Description
    <Leader><Leader> w 单词 (word) 向前快速移动
    <Leader><Leader> b 单词向后 (backward) 快速移动
    <Leader><Leader> j 行间向下快速移动
    <Leader><Leader> k 行间向上快速移动
    <Leader><Leader> s 搜索字符 (search) 跳转,双向
    <Leader><Leader> f 向前 (forward) 查找字符

    为了与 spacemacs 相一致,我还添加了这几个快捷键:

    Key Binding Description
    <Leader> j w 单词跳转 (jump to word)
    <Leader> j l 行间跳转 (jump to line)

    unite.vim

    unite.vim 可以为 vim 提供一个命令 UI,可以将一些不常用或不太好设置的快捷键放到里面.

    unite.vim 的前缀键为 localleader, 这里设置为 ,.

    let maplocalleader=","
    

    ⌘ 指该操作存在对应的快捷键

    [menu] 指 unite.vim 的前缀键,这里也即 ,.

    Key Binding Description
    [menu] m 查看所有可选菜单(menu)
    [menu] x 文本 (text)
    [menu] f 文件 (file) 与 折叠 (fold)
    [menu] p 插件 (plugin), 比如syntastic相关功能
    [menu] t 功能开关(toggle)
    [menu] v vim相关

    unite.vim 这部分配置需要很多心思打磨,有待完善.

    syntastic

    在前部分介绍安装事项时,提到要安装一些额外使用的工具,有很多就是 syntastic 这个插件所需要的:

    let g:jyntastic_python_checkers=['pyflakes']           " 使用pyflakes 比pylint快, 需要pip安装pyflakes,
    let g:syntastic_javascript_checkers=['jsl', 'jshint']  " npm install jsl jshint
    let g:syntastic_html_checkers=['tidy', 'jshint']       " brew install tidy-html5
    

    有更多需要的话也可以自行查阅 syntastic 文档。

    YouCompleteMe

    YouCompleteMe 配置稍显复杂,其实也不复杂,关键在于需要安装一些必要的软件,比如 cmake. 具体可以查阅其安装介绍.

    此外一点注意:必须在 .vimrc.plug.conf 中正确设置 Python 路径.如果不设置该选项 YCM 会经常 crashed. python 版本应当与编译 YCM 时的 Python 版本一致, 建议使用 Python3 和绝对路径避免不必要的问题.

    let g:ycm_path_to_python_interpreter='/absolute/path/to/python'
    

    Customization

    vimrc Related Description
    .vimrc 也可单独作为无插件vim配置
    .vimrc.plug.list 安装的vim插件列表
    .vimrc.plug.conf 所安装vim各种插件的相关设置

    运行 sh ~/.space-vim/uninstall.sh 即可卸载 space-vim.

    如果想要修改配置,当然可以选择在我的配置文件上直接修改. 但是如果只是些微调,还是建议您采取以下方式:

    • 将配置信息写入到 ~/.vimrc.local , 比如想要修改主题:

      echo "color solarized" >> ~/.vimrc.local
      

      然后, <Leader> f R 使得配置生效.

    • 如果想要卸载 space-vim 默认安装的插件, 打开 ~/.vimrc.plug.list 注释掉对应行, 执行 :PluginClean 即可.

      如果想要安装另外的插件,将插件信息写入到 ~/.vimrc.plug.local , 比如添加多光标操作vim-multiple-cursors这个插件:

      Plugin 'terryma/vim-multiple-cursors'
      

      然后 <Leader> f R 使配置生效,并执行 :PlugInstall 进行安装.

    最后,GitHub地址: space-vim, 欢迎 fork and star.

    相关文章

      网友评论

      • c8ac4dad76db:请问,space-vim和spacevim是什么关系?
        c8ac4dad76db: @simple_the_best 很遗憾,安装完之后按空格键毫无反应,难道还需要自己设置leader键吗,在哪设置?文档里没说清楚
        c8ac4dad76db: @simple_the_best 谢谢你的回复。看了你的文档,感觉写的很详细,决定下载来试用看。
        liuchengxu:"spacevim" 据我所知有两个:spacevim 和 SpaceVim。从项目内容来上讲,没有关系,各干各的。从其他一些方面,风波可就多了。以前因为 SpaceVim 作者的人品问题撕过,不过后来看开了:对于一个没有基本荣辱观的人来说,已经不存在与之“对话”的基本条件了。
      • Mr_simba:楼主,我想问下我下好了space-vim,怎么打开那个图形化的vim编辑器
        liuchengxu:额 图形化的 Vim 编辑器?terminal 里面直接用 vim 命令打开就好了,MacVim 或者 GVim 是图形界面的 Vim, 像普通应用程序打开就好了。
      • gitcode:spf13才是终极VIM配置吧。我看space vim修改了好多vim原先的命令。
        liuchengxu:号称终极的 VIM 配置有不少,你可以仔细搜索一下。

        如果你能够详细指出 space-vim 的不合理配置之处,非常欢迎。

      本文标题:超漂亮 vim 配置:space-vim

      本文链接:https://www.haomeiwen.com/subject/rrjnuttx.html