SpaceVim-模块化的Vim-IDE

安装

在 Manjaro 上安装

1
2
3
4
sudo pacman -S neovim
curl -sLf https://spacevim.org/cn/install.sh | bash
# 或
curl -sLf https://spacevim.org/install.sh | bash

卸载

1
2
curl -sLf https://spacevim.org/install.sh | bash -s -- --uninstall
rm -fr ~/.SpaceVim

配置

快捷键 SPC f v d 打开配置文件

初次启动时,SpaceVim 弹出一个选择目录(basic 模式、 dark_powerd 模式),用户需要选择合适自己的配置模板。 此时,SpaceVim 将自动在 $HOME 目录生成 ~/.SpaceVim.d/init.toml。 所有用户配置文件都可以存储在 ~/.SpaceVim.d/

插件

如果你需要添加 github 上的插件,只需要在 SpaceVim 配置文件中添加 [[custom_plugins]] 片段:

1
2
3
4
[[custom_plugins]]
    repo = "lilydjwg/colorizer"
    on_cmd = ["ColorHighlight", "ColorToggle"]
    merged = false

one_cmd 选项使得这个插件延迟加载。 该插件会在第一次执行 ColorHighlight 或者 ColorToggle 命令时被加载。

merged 选项用于设定是否合并该插件的文件夹,如果 merged 是 true,那么,这一插件内的文件将被合并到: ~/.cache/vimfiles/.cache/init.vim/ 或者 ~/.cache/vimfiles/.cache/vimrc/, 这依据当前使用的是 Neovim 还是 Vim。

除了 on_cmd 以外,还有一些其它的选项,可以通过 :h dein-options 查阅。

禁用插件

SpaceVim 默认安装了一些插件,如果需要禁用某个插件,可以通过 ~/.SpaceVim.d/init.toml[options] 片段中的 disabled_plugins 这一选项来操作:

1
2
3
[options]
    # 请注意,该值为一个 List,每一个选项为插件的名称,而非 github 仓库地址。
    disabled_plugins = ["clighter", "clighter8"]

SpaceVim 的模块

使用模块的方式来组织和管理插件,将相关功能的插件组织成一个模块,启用/禁用效率更加高。同时也节省了很多寻找插件和配置插件的时间。

在 SpaceVim 中,一个模块是一个单个的 Vim 文件,例如,autocomplete 模块存储在 autoload/SpaceVim/layers/autocomplete.vim,在这个文件内有以下几个公共函数:

  • SpaceVim#layers#autocomplete#plugins(): 返回该模块插件列表
  • SpaceVim#layers#autocomplete#config(): 模块相关设置
  • SpaceVim#layers#autocomplete#set_variable(): 模块选项设置函数

启动函数

由于 toml 配置的局限性,SpaceVim 提供了两种启动函数 bootstrap_beforebootstrap_after,在该函数内可以使用 Vim script。 可通过 ~/.SpaceVim.d/init.toml[options] 片段中的这两个选项 bootstrap_beforebootstrap_after 来指定函数名称,例如:

1
2
3
[options]
    bootstrap_before = "myspacevim#before"
    bootstrap_after  = "myspacevim#after"

启动函数文件应放置在 Vim &runtimepath 的 autoload 文件夹内。例如:

文件名:~/.SpaceVim.d/autoload/myspacevim.vim

1
2
3
4
5
6
7
8
function! myspacevim#before() abort
    let g:neomake_c_enabled_makers = ['clang']
    nnoremap jk <esc>
endfunction

function! myspacevim#after() abort
    iunmap jk
endfunction

函数 bootstrap_before 将在读取用户配置后执行,而函数 bootstrap_after 将在 VimEnter autocmd 之后执行。

如果你需要添加自定义以 SPC 为前缀的快捷键,你需要使用 bootstrap function,在其中加入:

1
2
3
4
function! myspacevim#before() abort
    call SpaceVim#custom#SPCGroupName(['G'], '+TestGroup')
    call SpaceVim#custom#SPC('nore', ['G', 't'], 'echom 1', 'echomessage 1', 1)
endfunction

Vim 兼容模式

以下为 SpaceVim 中与 Vim 默认情况下的一些差异。

按键 s 是删除光标下的字符,但是在 SpaceVim 中, 它是Normal模式窗口快捷键的前缀,这一功能可以使用选项 windows_leader 来修改,默认是 s。 如果需要使用按键 s 的原生功能,可以将该选项设置为空。

1
2
[options]
    windows_leader = ''

按键 , 是重复上一次的搜索 f、F、t 和 T ,但在 SpaceVim 中默认被用作为语言专用的前缀键。如果需要禁用此选项, 可设置 enable_language_specific_leader = false。

1
2
[options]
    enable_language_specific_leader = false

按键 q 是录制宏,但是在 SpaceVim 中被设置为了智能关闭窗口,设置该功能的选项是 windows_smartclose,默认值是 q, 可以通过将该选项设置成空字符串来禁用该功能,同时也可以设置成其他按键。

1
2
[options]
    windows_smartclose = ''

命令行模式下 Ctrl-a 按键在 SpaceVim 中被修改为了移动光标至命令行行首。
命令行模式下 Ctrl-b 按键被映射为方向键 <Left>, 用以向左移动光标。
命令行模式下 Ctrl-f 按键被映射为方向键 <Right>, 用以向右移动光标。
可以通过设置 vimcompatible = true 来启用 Vim 兼容模式,而在兼容模式下,以上所有差异将不存在。 当然,也可通过对应的选项禁用某一个差异。例如,恢复逗号 , 的原始功能,可以通过禁用语言专用的前缀键:

1
2
[options]
    enable_language_specific_leader = false

UI 界面设置

颜色主题 colorscheme

默认的颜色主题采用的是 gruvbox

  • 修改主题设置

~/.SpaceVim.d/init.toml[options] 片段中修改 colorscheme 选项。例如,使用 Vim 自带的内置主题 desert:

1
2
3
[options]
    colorscheme = "desert"
    colorscheme_bg = "dark"
快捷键 功能描述
SPC T n 切换至下一个随机主题
SPC T s 通过 Unite 选择主题

字体设置

默认字体使用 SourceCodePro Nerd Font Mono

如果需要修改 SpaceVim 的字体,可以在 ~/.SpaceVim.d/init.toml[options]片段中修改选项 guifont,默认值为:

1
2
[options]
    guifont = "SourceCodePro Nerd Font Mono:h11"

高亮

快捷键 功能描述
SPC t h h 高亮当前行
SPC t h i 高亮代码对齐线
SPC t h c 高亮光标所在列
SPC t h s 启用/禁用语法高亮
SPC t i 切换显示当前对齐(TODO)
SPC t n 显示/隐藏行号
SPC t b 切换背景色
SPC t c 切换 conceal 模式
SPC t p 切换 paste 模式
SPC t t 打开 Tab 管理器
SPC T ~ 显示/隐藏 Buffer 结尾空行行首的 ~
SPC T F 切换全屏(TODO)
SPC T f 显示/隐藏 Vim 边框(GUI)
SPC T m 显示/隐藏菜单栏
SPC T t 显示/隐藏工具栏

使用

快捷键导航 <leader>

leader 键默认为: \

leader + 数字 : 切换文件tab

如果需要修改 <Leader> 键则需要使用启动函数修改 g:mapleader 的值, 比如使用逗号 , 作为 <Leader> 按键。

1
2
3
function! myspacevim#before() abort
    let g:mapleader = ','
endfunction

快捷导航键 延迟设置

默认情况下,快捷键导航将在输入延迟超过 1000ms 后打开,你可以通过修改 Vim 的 ‘timeoutlen’ 选项来修改成适合自己的延迟时间长度。

快捷导航键 呼出的菜单操作

按键 功能描述
u 撤销按键
n 向下翻页
p 向上翻页

文件树

SpaceVim 使用 vimfiler 作为默认的文件树插件,

1
2
3
4
5
6
[options]
    # 文件树插件可选值包括:
    # - vimfiler (默认)
    # - nerdtree
    # - defx
    filemanager = "defx"

打开 / 关闭 文件树 F3SPC f tSPC f T

  • 文件树内的快捷键

<Left> / h 移至父目录,并关闭文件夹
<Down> / j 向下移动光标
<Up> / k 向上移动光标
<Right> / l 展开目录,或打开文件
N 在光标位置新建文件
y y 复制光标下文件路径至系统剪切板
y Y 复制光标下文件至系统剪切板
P 在光标位置黏贴文件
. 切换显示隐藏文件
s v 分屏编辑该文件
s g 垂直分屏编辑该文件
p 预览文件
i 切换至文件夹历史
v 快速查看
> 放大文件树窗口宽度
< 缩小文件树窗口宽度
g x 使用相关程序执行该文件
' 标记光标下的文件(夹)
V 清除所有标记
Ctrl+r 刷新页面

  • 文件树中打开文件

l / <Enter> 打开文件
sg 分屏打开文件
sv 垂直分屏打开文件

移动光标以及滚屏的快捷键

快捷键 功能描述
H 移动光标至屏幕顶部
L 移动光标至屏幕底部
< 向左移动文本
> 向右移动文本
} 向前移动一个段落
{ 向后移动一个段落
Ctrl-f 向下翻页 (Ctrl-f / Ctrl-d)
Ctrl-b 向上翻页 (C-b / C-u)
Ctrl-e 向下滚屏 (3 Ctrl-e/j)
Ctrl-y 向上滚屏 (3Ctrl-y/k)
Ctrl-Shift-Up 向上移动当前行
Ctrl-Shift-Down 向下移动当前行

按键 功能描述
<F2> 打开、关闭语法树
<F3> 打开、关闭文件树
Ctrl-<Down> 切换至下方窗口
Ctrl-<Up> 切换至上方窗口
Ctrl-<Left> 切换至左边窗口
Ctrl-<Right> 切换至右边窗口

编辑

移动文本块

快捷键 功能描述
< / Shift-Tab 向左移动文本
> / Tab 向右移动文本
Ctrl-Shift-Up 向上移动选中行
Ctrl-Shift-Down 向下移动选中行

代码缩进

默认的代码缩进值是 2,缩进的大小由选项 default_indent 设置, 如果希望使用 4 个空格作为缩进,只需要在 SpaceVim 配置文件中加入如下内容:

1
2
[options]
    default_indent = 4

default_indent 这一选项的值,将被赋值到 Vim 的选项:&tabstop&softtabstop&shiftwidth。默认情况下,输入的 <Tab> 会被自动展开成对应缩进数量的空格, 可通过设置选项 expand_tab 的值为 false 来禁用这一特性:

1
2
3
[options]
    default_indent = 4
    expand_tab = true

复制粘贴

如果 has('unnamedplus') 返回 1,那么快捷键 <Leader> y 使用的寄存器是 +, 否则,这个快捷键使用的寄存器是 *, 可以阅读 :h registers 获取更多关于寄存器相关的内容。

快捷键 功能描述
<Leader> y 复制文本至系统剪切板
<Leader> p 粘贴系统剪切板文字至当前位置之后
<Leader> P 粘贴系统剪切板文字至当前位置之前

文本编码格式

SpaceVim 默认使用 utf-8 码进行编码。下面是 utf-8 编码的四个设置:

1
2
3
4
fileencodings (fencs) : ucs-bom, utf-8, default, latin1
fileencoding (fenc) : utf-8
encoding (enc) : utf-8
termencoding (tenc) : utf-8 (only supported in Vim)

修复混乱的显示:SPC e a 是自动选择文件编码的按键映射。在选择好文件编码方式后,你可以运行下面的代码来修复编码:

1
2
set enc=utf-8
write