Back to Spacevim

使用文档

docs/cn/documentation.md

2.4.0111.9 KB
Original Source

使用文档

<!-- vim-markdown-toc GFM --> <!-- vim-markdown-toc -->

突出特点

  • 模块化: 使用模块的概念组织插件。
  • 兼容性 API: 提供一系列兼容API,兼容 Neovim 和 Vim。
  • 详细的文档: 所有功能配置皆在 :h SpaceVim 中有体现。
  • 更好的使用体验: 大部分核心插件使用 Lua 重写以提高效率。
  • 优雅简洁的界面: 界面元素经过精心设计。
  • 快捷键辅助系统: 快捷键使用助记符组织,实时提示按键功能。
  • 更少的肌肉损伤: 频繁使用空格键,取代 ctrlshift 等按键,大大减少了手指的肌肉损伤。

运行截图

欢迎页面

工作界面

  • 主题:one
  • 窗口: Git remotes, outline, Todos, Code runner, Terminal, file explore.
  • 代码补全插件: nvim-cmp

新的概念

临时快捷键菜单

SpaceVim 根据需要定义了很多临时快捷键, 这可以避免需要重复某些操作时过多按下 SPC 前缀键。 当临时快捷键启用时,会在窗口下方打开一个快捷键介绍窗口, 提示每一临时快捷键的功能。此外一些额外的辅助信息也将会显示出来。

文本移动临时快捷键:

更新回滚

自身更新

可通过很多种方式来更新 SpaceVim 的核心文件。 建议在更新 SpaceVim 之前,更新一下所有的插件。具体内容如下:

自动更新

注意:默认,这一特性是禁用的,因为自动更新将会增加 SpaceVim 的启动时间, 影响用户体验。如果你需要这一特性,可以将如下加入到用户配置文件中:

toml
[options]
    automatic_update = true

启用这一特性后,SpaceVim 将会在每次启动时候检测是否有新版本。 更新后需重启 SpaceVim。

通过插件管理器更新

使用 :SPUpdate SpaceVim 这一命令,将会打开 SpaceVim 的插件管理器,更新 SpaceVim,具体进度会在插件管理器 buffer 中展示。

通过 git 进行更新

可通过在 SpaceVim 目录中手动执行 git pull, SpaceVim 默认安装的位置为 ~/.SpaceVim, 因此可以再命令行使用如下命令进行手动更新:

git -C ~/.SpaceVim pull

更新插件

使用 :SPUpdate 这一命令将会更新所有插件,包括 SpaceVim 自身。 当然这一命令也支持参数,参数为插件名称,可同时添加多个插件名称作为参数, 同时可以使用 Tab 键来补全插件名称。

重新安装插件

在插件安装、更新过程中,如果发现某个插件损坏了, 可以使用 :SPReinstall 命令进行重新安装插件。 类似于 :SPUpdate,需要添加一个插件名称参数, 可以使用 Tab 键来补全插件名称。比如:

:SPReinstall echodoc.vim

获取日志

使用 :SPDebugInfo! 这一命令可以获取 SpaceVim 运行时日志, 同时,可以使用 SPC h I 使用打开问题模板。 可在这个模板中编辑问题,并提交。

用户配置

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

这一文件夹将被加入 Vim 的运行时路径 &runtimepath

也可以通过 SPACEVIMDIR 这一环境变量, 指定用户配置目录的具体位置。也可以通过软链接来改变目录位置, 以便配置备份。

同时,还支持项目本地配置,配置初始文件为,项目根目录下的 .SpaceVim.d/init.toml 文件。同时根目录下的 .SpaceVim.d/ 也将被加入到 Vim 运行时路径。

所有的 SpaceVim 选项可以使用 :h SpaceVim-options 来查看。 选项名称为原先 Vim 脚本中使用的变量名称去除 g:spacevim_ 前缀。

完整的内置文档可以通过 :h SpaceVim 进行查阅。 也可以通过按键 SPC h SPC 模糊搜索, 该快捷键需要载入一个模糊搜索模块。

添加自定义插件

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

toml
[[custom_plugins]]
    repo = 'lilydjwg/colorizer'
    # `on_cmd` option means this plugin will be loaded
    # only when the specific commands are called.
    # for example, when `:ColorHighlight` or `:ColorToggle`
    # commands are called.
    on_cmd = ['ColorHighlight', 'ColorToggle']
    # `on_func` option means this plugin will be loaded
    # only when the specific functions are called.
    # for example, when `colorizer#ColorToggle()` function is called.
    on_func = 'colorizer#ColorToggle'
    # `merged` option is used for merging plugins directory.
    # When `merged` is `true`, all files in this custom plugin
    # will be merged into `~/.cache/vimfiles/.cache/init.vim/`
    # for neovim or `~/.cache/vimfiles/.cache/vimrc/` for vim.
    merged = false
    # For more options see `:h dein-options`.

也可以使用仓库克隆的地址,比如:

toml
[[custom_plugins]]
    repo = "https://gitlab.com/code-stats/code-stats-vim.git"
    merged = false

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

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

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

如果需要添加多个自定义插件,可以参考如下设置:

toml
[[custom_plugins]]
    repo = 'lilydjwg/colorizer'
    merged = false

[[custom_plugins]]
    repo = 'joshdick/onedark.vim'
    merged = false

禁用插件

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

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

启动函数

由于 toml 语法的局限性,SpaceVim 提供了两种启动函数选项 bootstrap_beforebootstrap_after,这两个选项分别指定两个 Vim 自定义函数。 可以在 toml 配置文件 ~/.SpaceVim.d/init.toml[options] 字段中设置这两个选项 bootstrap_beforebootstrap_after 对应的函数名称,例如:

toml
[options]
    bootstrap_before = "myspacevim#before"
    bootstrap_after  = "myspacevim#after"

这两种启动函数的区别在于,bootstrap_before 函数是在载入用户配置时候执行的, 而 bootstrap_after 函数是在触发 VimEnter 事件时执行的。因此,可以在 bootstrap_after 函数内对默认的快捷键进行修改。

下面展示一个启动函数的示例,包含 bootstrap_beforebootstrap_after 两个函数:

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

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

vim
function! myspacevim#before() abort
    let g:neomake_c_enabled_makers = ['clang']
    nnoremap jk <esc>
endfunction

function! myspacevim#after() abort
    " 删除默认快捷键 <F3>, 该快捷键原先设定为打开文件树
    unmap <F3>
    " 设定新的快捷打开文件树, 在这里假定文件树插件选择的是 defx.nvim
    nnoremap <silent> <F3> :Defx<Cr> 
endfunction

在启动函数中,可以使用:lua 命令对 SpaceVim 进行配置,比如:

vim
function! myspacevim#before() abort
    lua << EOF
    local opt = requires('spacevim.opt')
    opt.enable_projects_cache = false
    opt.enable_statusline_mode = true
EOF
endfunction

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

如果你需要添加自定义以 SPC 为前缀的快捷键,你需要使用 bootstrap function, 在其中加入以下代码(注意你定义的按键必须是 SpaceVim 没有使用的):

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

同样地,如果你需要定义语言相关的功能,可以使用以下函数定义:

vim
function! myspacevim#before() abort
    call SpaceVim#custom#LangSPCGroupName('python', ['G'], '+TestGroup')
    call SpaceVim#custom#LangSPC('python', 'nore', ['G', 't'], 'echom 1', 'echomessage 1', 1)
endfunction

这些按键绑定以语言相关的前缀键开头,默认的前缀键是 , 。 同样,你为特定语言定义的按键必须是 SpaceVim 没有使用的。

Vim 兼容模式

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

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

    toml
    [options]
        windows_leader = ''
    
  • 按键 , 是重复上一次的搜索 fFtT ,但在 SpaceVim 中默认被用作为语言专用的前缀键。如果需要禁用此选项, 可设置 enable_language_specific_leader = false

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

    toml
    [options]
        windows_smartclose = ''
    
  • 命令行模式下 Ctrl-a 按键在 SpaceVim 中被修改为了移动光标至命令行行首。

  • 命令行模式下 Ctrl-b 按键被映射为方向键 <Left>, 用以向左移动光标。

  • 命令行模式下 Ctrl-f 按键被映射为方向键 <Right>, 用以向右移动光标。

可以通过设置 vimcompatible = true 来启用 Vim 兼容模式,而在兼容模式下,以上所有差异将不存在。 当然,也可通过对应的选项禁用某一个差异。例如,恢复逗号 , 的原始功能,可以通过禁用语言专用的前缀键:

toml
[options]
    enable_language_specific_leader = false

如果发现有其它区别,可以提交 PR

私有模块

这一部分简单介绍了模块的组成,更多关于新建模块的内容可以阅读 SpaceVim 的模块首页

目的

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

结构

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

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

调试上游插件

当发现某个内置上游插件存在问题,需要修改并调试上游插件时,可以依照以下步骤操作:

  1. 禁用内置上游插件 比如,调试内置语法检查插件 neomake.vim
toml
[options]
    disabled_plugins = ["neomake.vim"]
  1. 添加自己 fork 的插件 修改配置文件 init.toml,加入以下部分,来添加自己 fork 的版本:
toml
[[custom_plugins]]
   repo = 'wsdjeg/neomake.vim'
   # note: you need to disable merged feature
   merged = false

或者添加本地克隆版本 使用 bootstrap_before 函数来添加本地路径:

vim
function! myspacevim#before() abort
    set rtp+=~/path/to/your/localplugin
endfunction

界面元素

SpaceVim 集成了多种实用的 UI 插件,如常用的文件树、语法树等插件,配色主题默认采用的是 gruvbox。

颜色主题

默认的颜色主题采用的是 gruvbox。这一主题有深色和浅色两种。关于这一主题一些详细的配置可以阅读 :h gruvbox

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

toml
[options]
    colorscheme = "desert"
    colorscheme_bg = "dark"
快捷键功能描述
SPC T n切换至下一个随机主题,需要载入主题模块
SPC T s通过模糊搜索模块选择主题

可以在主题模块中查看 SpaceVim 支持的所有主题。

注意

SpaceVim 在终端下默认使用了真色,因此使用之前需要确认下你的终端是否支持真色。 可以阅读 Colours in terminal 了解根多关于真色的信息。

如果你的终端不支持真色,可以在 ~/.SpaceVim.d/init.toml[options] 片段中禁用真色支持:

toml
[options]
    enable_guicolors = false

字体

在 SpaceVim 中默认的字体是 Sauce Code Nerd Font。 如果你也喜欢这一字体,建议将这一字体安装到系统中。 如果需要修改 SpaceVim 的字体,可以在 ~/.SpaceVim.d/init.toml[options]片段中修改选项 guifont,默认值为:

toml
[options]
    guifont = "SauceCodePro Nerd Font Mono:h11"

如果指定的字体不存在,将会使用系统默认的字体,此外,这一选项在终端下是无效的,终端下修改字体,需要修改终端自身配置。

鼠标

默认情况下,在 Normal 模式和 Visual 模式下启用鼠标。 如果需要修改这个默认值,可以使用启动函数:

例如:禁用鼠标:

vim
function! myspacevim#before() abort
    set mouse=
endfunction

更多信息可以阅读 :h 'mouse'

滚动条

窗口右侧的滚动条默认是关闭的,如果需要启动滚动条,需要修改ui 模块enable_scrollbar 选项:

[[layers]]
  name = "ui"
  enable_scrollbar = true

界面元素切换

所有的界面元素切换快捷键都以 [SPC] t[SPC] T 开头,你可以在快捷键导航中查阅所有快捷键。

快捷键功能描述
SPC t 8高亮所有超过 80 列的字符
SPC t f高亮临界列,默认 max_column 是第 120 列
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 P切换 auto parens 模式
SPC t t打开 Tab 管理器
SPC T ~显示/隐藏 Buffer 结尾空行行首的 ~
SPC T F / F11切换全屏
SPC T f显示/隐藏 Vim 边框(GUI)
SPC T m显示/隐藏菜单栏
SPC T t显示/隐藏工具栏

状态栏

core#statusline 模块提供了一个高度定制的状态栏,提供如下特性,这一模块的灵感来自于 spacemacs 的状态栏。

  • 展示窗口序列号
  • 通过不同颜色展示当前模式
  • 展示搜索结果序列号
  • 显示/隐藏语法检查信息
  • 显示/隐藏电池信息
  • 显示/隐藏 SpaceVim 功能启用状态
  • 显示版本控制信息(需要 gitVersionControl 模块)
快捷键功能描述
SPC [1-9]跳至指定序号的窗口

默认主题 gruvbox 的状态栏颜色和模式对照表:

模式颜色
Normal灰色
Insert蓝色
Visual橙色
Replace浅绿色

以上的这几种模式所对应的颜色取决于不同的主题模式。

一些状态栏元素可以进行动态的切换:

快捷键功能描述
SPC t m b显示/隐藏电池状态 (需要安装 acpi)
SPC t m ctoggle the org task clock (available in org layer)(TODO)
SPC t m i显示/隐藏输入法
SPC t m m显示/隐藏 SpaceVim 已启用功能
SPC t m M显示/隐藏文件类型
SPC t m ntoggle the cat! (if colors layer is declared in your dotfile)(TODO)
SPC t m p显示/隐藏光标位置信息
SPC t m t显示/隐藏时间
SPC t m d显示/隐藏日期
SPC t m T显示/隐藏状态栏
SPC t m v显示/隐藏版本控制信息

nerd 字体安装:

SpaceVim 默认使用 nerd fonts,可参阅其安装指南进行安装。

语法检查信息:

状态栏中语法检查信息元素如果被启用了,当语法检查结束后,会在状态栏中展示当前语法错误和警告的数量。

错误及警告的默认高亮组名称及颜色为:

高亮组名称颜色
SpaceVim_statusline_error#ffc0b9
SpaceVim_statusline_warn#fce094
SpaceVim_statusline_info#8cf8f7
SpaceVim_statusline_hint#a6dbff

搜索结果信息:

当使用 /? 进行搜索时,或当按下 nN 后,搜索结果序号将被展示在状态栏中,使用类似于 20/22 这样的分数显示搜索结果的当前序号以及结果总数。具体的效果图如下:

搜索结果展示由incsearch模块提供,可以在配置中启用该模块:

toml
[layers]
    name = "incsearch"

电池状态信息:

acpi 可展示电池电量剩余百分比。

使用不同颜色展示不同的电池状态:

电池状态颜色
75% - 100%绿色
30% - 75%黄色
0% - 30%红色

所有的颜色都取决于不同的主题。

状态栏分割符:

可通过使用 statusline_separator 来定制状态栏分割符,例如使用常用的方向箭头作为状态栏分割符:

toml
    statusline_separator = 'arrow'

SpaceVim 所支持的分割符以及截图如下:

分割符截图
arrow
curve
slant
nil
fire

SpaceVim 功能模块:

功能模块可以通过 SPC t m m 快捷键显示或者隐藏。默认使用 Unicode 字符,可通过设置 statusline_unicode = false 来启用 ASCII 字符。(或许在终端中无法设置合适的字体时,可使用这一选项)。

状态栏中功能模块内的字符显示与否,同如下快捷键功能保持一致:

快捷键UnicodeASCII功能
SPC t 88高亮指定列后所有字符
SPC t ff高亮指定列字符
SPC t ss语法检查
SPC t SS拼写检查
SPC t ww行尾空格检查

状态栏的颜色

SpaceVim 默认为 colorcheme 模块所包含的主题颜色提供了状态栏主题,若需要使用其它颜色主题, 需要自行设置状态栏主题。若未设置,则使用 gruvbox 的主题。

可以参考以下模板来设置:

vim
" the theme colors should be
" [
"    \ [ a_guifg,  a_guibg,  a_ctermfg,  a_ctermbg],
"    \ [ b_guifg,  b_guibg,  b_ctermfg,  b_ctermbg],
"    \ [ c_guifg,  c_guibg,  c_ctermfg,  c_ctermbg],
"    \ [ z_guibg,  z_ctermbg],
"    \ [ i_guifg,  i_guibg,  i_ctermfg,  i_ctermbg],
"    \ [ v_guifg,  v_guibg,  v_ctermfg,  v_ctermbg],
"    \ [ r_guifg,  r_guibg,  r_ctermfg,  r_ctermbg],
"    \ [ ii_guifg, ii_guibg, ii_ctermfg, ii_ctermbg],
"    \ [ in_guifg, in_guibg, in_ctermfg, in_ctermbg],
" \ ]
" group_a: window id
" group_b/group_c: stausline sections
" group_z: empty area
" group_i: window id in insert mode
" group_v: window id in visual mode
" group_r: window id in select mode
" group_ii: window id in iedit-insert mode
" group_in: windows id in iedit-normal mode
function! SpaceVim#mapping#guide#theme#gruvbox#palette() abort
    return [
                \ ['#282828', '#a89984', 246, 235],
                \ ['#a89984', '#504945', 239, 246],
                \ ['#a89984', '#3c3836', 237, 246],
                \ ['#665c54', 241],
                \ ['#282828', '#83a598', 235, 109],
                \ ['#282828', '#fe8019', 235, 208],
                \ ['#282828', '#8ec07c', 235, 108],
                \ ['#282828', '#689d6a', 235, 72],
                \ ['#282828', '#8f3f71', 235, 132],
                \ ]
endfunction

这一模板是 gruvbox 主题的,当你需要在切换主题时,状态栏都使用同一种颜色主题, 可以设置 custom_color_palette

toml
[options]
    custom_color_palette = [
        ["#282828", "#a89984", 246, 235],
        ["#a89984", "#504945", 239, 246],
        ["#a89984", "#3c3836", 237, 246],
        ["#665c54", 241],
        ["#282828", "#83a598", 235, 109],
        ["#282828", "#fe8019", 235, 208],
        ["#282828", "#8ec07c", 235, 108],
        ["#282828", "#689d6a", 235, 72],
        ["#282828", "#8f3f71", 235, 132],
    ]

自定义板块

可以使用启动函数添加自定板块,比如:

vim
function! s:test_section() abort
  return 'ok'
endfunction
call SpaceVim#layers#core#statusline#register_sections('test', function('s:test_section'))

之后就可以在配置文件中添加 test 板块,比如,在状态栏右侧最后添加:

toml
[options]
    statusline_right_sections = ['cursorpos', 'percentage', 'test']

标签栏

标签栏用于展示 Buffers(缓冲区)或者标签页(Tabs)。若当前只有一个标签页,则显示缓冲区列表, 在标签栏的最右侧显示文字 Buffers,若打开超过一个标签页,则显示标签页列表,同时, 标签栏的最右侧显示文字 Tabs。

当显示缓冲区(Buffers)时,每一个包含序号、文件名、文件类型图标。

当显示标签页(Tabs)时,每一个包含需要、标签页文件、文件类型图标,不同的是这里显示的文件名是每个标签页中聚焦的窗口内文件名。

可通过快捷键 <Leader> number 进行快速跳转至对应的缓冲区或者标签页,默认的 <Leader> 键是 \

快捷键功能描述
<Leader> 1跳至标签栏序号 1
<Leader> 2跳至标签栏序号 2
<Leader> 3跳至标签栏序号 3
<Leader> 4跳至标签栏序号 4
<Leader> 5跳至标签栏序号 5
<Leader> 6跳至标签栏序号 6
<Leader> 7跳至标签栏序号 7
<Leader> 8跳至标签栏序号 8
<Leader> 9跳至标签栏序号 9
g r跳至前一个 Tab,常用于两个 Tab 来回切换

若使用 Neovim 0.10.0+,则可以使用如下快捷键左右移动当前缓冲区(Buffer)。

快捷键功能描述
Ctrl-Shift-Right将当前 Buffer 向右移动
Ctrl-Shift-Left将当前 Buffer 向左移动

注意: 两个缓冲区来回切换的快捷键是 SPC Tab, 可阅读缓冲区管理部分内容,了解更多缓冲区相关的快捷键。

标签栏上也支持鼠标操作,左键可以快速切换至该标签,中键删除该标签。该特性只支持 Neovim,并且需要 has('tablineat') 特性。

注意: 这一特性仅限于 Neovim 并且 echo has('tablineat') 返回 1。

快捷键功能描述
<Mouse-left>切换至该标签
<Mouse-middle>删除该标签

标签管理器

可使用 SPC t t 打开内置的标签管理器,标签管理器内的快捷键如下:

快捷键功能描述
o展开或关闭标签目录
r重命名光标下的标签页
n在光标位置下新建命名标签页
N在光标位置下新建匿名标签页
x删除光标下的标签页
Ctrl-S-<Up>向上移动光标下的标签页
Ctrl-S-<Down>向下移动光标下的标签页
<Enter>跳至光标所对应的标签窗口

文件树

SpaceVim 使用 nerdtree 作为默认的文件树插件,默认的快捷键是 F3, SpaceVim 也提供了另外一组快捷键 SPC f tSPC f T 来打开文件树。 如果需要修改默认文件树插件,需要在 ~/.SpaceVim.d/init.toml[options] 片段中修改选项 filemanager

toml
[options]
    # 文件树插件可选值包括:
    # - nerdtree (默认)
    # - vimfiler: 需要编译 vimproc.vim, 在目录 bundle/vimproc.vim 下
    # - defx: 需要 +py3 支持
    filemanager = "nerdtree"

SpaceVim 的文件树提供了版本控制信息的接口,但是这一特性需要分析文件夹内容, 会使得文件树插件比较慢,因此默认没有打开,如果需要使用这一特性, 可向配置文件中加入 enable_filetree_gitstatus = true,启用后的截图如下:

默认情况下文件树是打开的,如果需要设置文件树默认关闭,需要修改 enable_vimfiler_welcome 选项。

toml
[options]
    enable_vimfiler_welcome = false

默认情况下文件树是在窗口的右边打开,如果需要设置文件树默认在左边,需要修改 filetree_direction 选项。 需要注意的是,当设置文件树在左边时,函数列表 tagbar 将会在右边。

toml
[options]
    filetree_direction = "left"

文件树中的常用操作

文件树中主要以 hjkl 为核心,这类似于 vifm 中常用的快捷键:

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

文件树中打开文件

如果只有一个可编辑窗口,则在该窗口中打开选择的文件,否则则需要指定窗口来打开文件:

快捷键功能描述
l / <Enter>打开文件
sg分屏打开文件
sv垂直分屏打开文件

修改文件树默认快捷键

如果想要修改文件树内的默认快捷键,需要再启动函数里面调用用户自定义的自动命令,比如:

vim
function! myspacevim#before() abort
    autocmd User NerdTreeInit
        \ nnoremap <silent><buffer> <CR> :<C-u>call
        \ g:NERDTreeKeyMap.Invoke('o')<CR>
endfunction

以下是不同文件时所对应的自动命令名称:

  • nerdtree: User NerdTreeInit
  • defx: User DefxInit
  • vimfiler: User VimfilerInit

基本操作

以下列出了最常用的移动光标以及滚屏的快捷键:

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

原生功能

快捷键功能描述
<leader> q r原生 q 快捷键
<leader> q r/原生 q / 快捷键,打开命令行窗口
<leader> q r?原生 q ? 快捷键,打开命令行窗口
<leader> q r:原生 q : 快捷键,打开命令行窗口

命令行模式快捷键

常规模式下按下 : 键后,可进入命令行模式,再次可以是下可以编辑 Vim 的命令并执行, 以下列出了命令行模式下一些常用的移动光标、删减字符的快捷键:

快捷键功能描述
Ctrl-a移动光标至行首
Ctrl-b向左移动光标
Ctrl-f向右移动光标
Ctrl-w删除光标前词
Ctrl-u移除光标前所有字符
Ctrl-k移除光标后所有字符
Ctrl-c/Esc离开命令行模式
Tab选择下一个匹配
Shift-Tab选择上一个匹配

快捷键导航

当 Normal 模式下按下前缀键后出现输入延迟, 则会在屏幕下方打开一个快捷键导航窗口, 提示当前可用的快捷键及其功能描述, 目前支持的前缀键有:[SPC][Window]<Leader>gz

这些前缀的按键为:

前缀名称用户选项以及默认值功能描述
[SPC]空格键SpaceVim 默认前缀键
[Window]windows_leader / sSpaceVim 默认窗口前缀键
<leader>默认的 Vim leader 键Vim/Neovim 默认前缀键

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

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

注意: 在函数中修改 g:mapleader 的值,不可以省略前缀 g:, 因为函数中的变量默认作用域是 l:,这与 Vim 的帮助 :h mapleader 有些许不一样。

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

例如,Normal 模式下按下空格键,你将会看到:

这一导航窗口将提示所有以空格键为前缀的快捷键,并且根据功能将这些快捷键进行了分组,例如 buffer 相关的快捷键都是 b,工程相关的快捷键都是 p。在代码导航窗口内,按下 Ctrl-h 键,可以获取一些帮助信息,这些信息将被显示在状态栏上,提示的是一些翻页和撤销按键的快捷键。

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

如果要自定义以 [SPC] 为前缀的快捷键,可以使用 SpaceVim#custom#SPC(),示例如下:

vim
call SpaceVim#custom#SPC('nnoremap', ['f', 't'], 'echom "hello world"', 'test custom SPC', 1)

第一个参数设定快捷键的类型, 可以是 nnoremap 或者 nmap,第二个参数是一个按键列表, 第三个参数是一个 ex 命令或者按键,这基于最后一个参数是否为true。第四个参数是一个简短的描述。

模糊搜索快捷键

可以通过 SPC ? 将当前快捷键罗列出来。然后可以输入快捷键按键字母或者描述,可以模糊匹配并展示结果。

使用 <Tab> 键或者上下方向键选择你需要的快捷键,回车将执行这一快捷键。

基本编辑操作

移动文本块

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

代码缩进

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

toml
[options]
    default_indent = 4

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

toml
[options]
    default_indent = 4
    expand_tab = true

文本操作命令

文本相关的命令 (以 x 开头):

快捷键功能描述
SPC x a #基于分隔符 # 进行文本对齐
SPC x a %基于分隔符 % 进行文本对齐
SPC x a &基于分隔符 & 进行文本对齐
SPC x a (基于分隔符 ( 进行文本对齐
SPC x a )基于分隔符 ) 进行文本对齐
SPC x a [基于分隔符 [ 进行文本对齐
SPC x a ]基于分隔符 ] 进行文本对齐
SPC x a {基于分隔符 { 进行文本对齐
SPC x a }基于分隔符 } 进行文本对齐
SPC x a ,基于分隔符 , 进行文本对齐
SPC x a .基于分隔符 . 进行文本对齐(for numeric tables)
SPC x a :基于分隔符 : 进行文本对齐
SPC x a ;基于分隔符 ; 进行文本对齐
SPC x a =基于分隔符 = 进行文本对齐
SPC x a ¦基于分隔符 ¦ 进行文本对齐
SPC x a <bar> 基于分隔符 | 进行文本对齐
SPC x a SPC基于分隔符 <Space> 进行文本对齐
SPC x a aalign region (or guessed section) using default rules (TODO)
SPC x a calign current indentation region using default rules (TODO)
SPC x a lleft-align with evil-lion (TODO)
SPC x a Lright-align with evil-lion (TODO)
SPC x a r基于用户自定义正则表达式进行文本对齐
SPC x a o对齐算术运算符 +-*/
SPC x c统计选中区域的字符/单词/行数
SPC x d w删除行尾空白字符
SPC x d SPCDelete all spaces and tabs around point, leaving one space
SPC x g lset lanuages used by translate commands (TODO)
SPC x g t使用 Google Translate 翻译当前单词
SPC x g Treverse source and target languages (TODO)
SPC x i cchange symbol style to lowerCamelCase
SPC x i Cchange symbol style to UpperCamelCase
SPC x i icycle symbol naming styles (i to keep cycling)
SPC x i -change symbol style to kebab-case
SPC x i kchange symbol style to kebab-case
SPC x i _change symbol style to under_score
SPC x i uchange symbol style to under_score
SPC x i Uchange symbol style to UP_CASE
SPC x j c居中对齐当前段落
SPC x j fset the justification to full (TODO)
SPC x j l左对齐当前段落
SPC x j nset the justification to none (TODO)
SPC x j r右对齐当前段落
SPC x J将当前行向下移动一行并进入临时快捷键状态
SPC x K将当前行向上移动一行并进入临时快捷键状态
SPC x l d重复当前行或区域
SPC x l r逆序化多行文档
SPC x l s排序多行文档 (忽略大小写)
SPC x l S排序多行文档 (大小写敏感)
SPC x l u去除重复的行 (忽略大小写)
SPC x l U去除重复的行 (大小写敏感)
SPC x ouse avy to select a link in the frame and open it (TODO)
SPC x Ouse avy to select multiple links in the frame and open them (TODO)
SPC x t c交换当前字符和前一个字符的位置
SPC x t C交换当前字符和后一个字符的位置
SPC x t w交换当前单词和前一个单词的位置
SPC x t W交换当前单词和后一个单词的位置
SPC x t l交换当前行和前一行的位置
SPC x t L交换当前行和后一行的位置
SPC x u将字符转为小写
SPC x U将字符转为大写
SPC x ~切换字符的大小写
SPC x w c统计选中区域的单词数
SPC x w dshow dictionary entry of word from wordnik.com (TODO)
SPC x <Tab>indent or dedent a region rigidly (TODO)

文本插入命令

文本插入相关命令(以 i 开头):

快捷键功能描述
SPC i l linsert lorem-ipsum list
SPC i l pinsert lorem-ipsum paragraph
SPC i l sinsert lorem-ipsum sentence
SPC i p 1insert simple password
SPC i p 2insert stronger password
SPC i p 3insert password for paranoids
SPC i p pinsert a phonetically easy password
SPC i p ninsert a numerical password
SPC i uSearch for Unicode characters and insert them into the active buffer.
SPC i U 1insert UUIDv1 (use universal argument to insert with CID format)
SPC i U 4insert UUIDv4 (use universal argument to insert with CID format)
SPC i U Uinsert UUIDv4 (use universal argument to insert with CID format)

提示: 您可以使用前缀参数指定密码字符的数量,(例如,10 SPC i p 1 将生成 10 个简单密码字符)

增加或减小数字

快捷键功能描述
SPC n +为光标下的数字加 1 并进入 临时快捷键状态
SPC n -为光标下的数字减 1 并进入 临时快捷键状态

在临时快捷键模式下:

快捷键功能描述
+为光标下的数字加 1
-为光标下的数字减 1
其它任意键离开临时快捷键状态

提示: 如果你想为光标下的数字所增加的值大于 1,你可以使用前缀参数。例如:10 SPC n + 将为光标下的数字加 10

复制粘贴

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

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

快捷键 <Leader> Y 将把选中的文本复制到 pastebin 服务器,并且将返回的链接复制到系统剪切板。 使用该功能,需要系统里有 curl 可执行程序(Windows 系统下,Neovim 自带 curl)。

按下快捷键 <Leader> Y 后,实际执行的命令为:

curl -s -F "content=<-" http://dpaste.com/api/v2/

该命令将读取标准输入(stdin),并且把输入的内容复制到 dpaste 服务器,等同于:

echo "selected text" | curl -s -F "content=<-" http://dpaste.com/api/v2/

增删注释

注释的增删是通过插件 nerdcommenter 来实现的, 以下为注释相关的常用快捷键:

快捷键功能描述
SPC ;进入注释操作模式
SPC c h隐藏/显示注释
SPC c l注释/反注释当前行
SPC c L注释行
SPC c u反注释行
SPC c p注释/反注释段落
SPC c P注释段落
SPC c s使用完美格式注释
SPC c t注释/反注释到行
SPC c T注释到行
SPC c y注释/反注释同时复制
SPC c Y复制到未命名寄存器后注释
SPC c $从光标位置开始注释当前行

小提示:

SPC ; 可以启动一个注释操作符模式,在该模式下,可以使用移动命令确认注释的范围, 比如 SPC ; 4 j,这个组合键会注释当前行以及下方的 4 行。这个数字即为相对行号,可在左侧看到。

编辑历史

当前文件的编辑历史,可以使用快捷键 F7 查看,默认会在左侧打开一个编辑历史可视化窗口。 若当前编辑器支持 +python 或者 +python3,则会使用 mundo 作为默认插件,否则则使用 undotree。

在编辑历史窗口内的快捷键如下:

快捷键功能描述
Gmove_bottom
Jmove_older_write
Kmove_newer_write
Nprevious_match
Pplay_to
<2-LeftMouse>mouse_click
/search
<CR>preview
ddiff
<down>move_older
<up>move_newer
itoggle_inline
jmove_older
kmove_newer
nnext_match
opreview
pdiff_current_buffer
qquit
rdiff
ggmove_top
?toggle_help

文本编码格式

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

  • 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 是自动选择文件编码的按键映射。在选择好文件编码方式后,你可以运行下面的代码来修复编码:

vim
set enc=utf-8
write

窗口和标签页

窗口管理器

常用的窗口管理快捷键有一个统一的前缀,默认的前缀 [Window] 是按键 s,可以在配置文件中通过修改 SpaceVim 选项 window_leader 的值来设为其它按键:

toml
[options]
    windows_leader = "s"
快捷键功能描述
q智能关闭当前窗口
[Window] v水平分屏
[Window] V水平分屏,并编辑上一个文件
[Window] g垂直分屏
[Window] G垂直分屏,并编辑上一个文件
[Window] t新建新的标签页
[Window] o关闭其他窗口
[Window] x关闭当前缓冲区,并保留新的空白缓冲区
[Window] q关闭当前缓冲区
[Window] Q关闭当前窗口
Shift-<Tab>切换至前一窗口

常规模式下的按键 q 被用来快速关闭窗口,其原生的功能可以使用 <Leader> q r 来代替。

常用编辑器窗口

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

窗口操作常用快捷键

每一个窗口都有一个编号,该编号显示在状态栏的最前端,可通过 SPC 编号 进行快速窗口跳转。

快捷键功能描述
SPC 1跳至窗口 1
SPC 2跳至窗口 2
SPC 3跳至窗口 3
SPC 4跳至窗口 4
SPC 5跳至窗口 5
SPC 6跳至窗口 6
SPC 7跳至窗口 7
SPC 8跳至窗口 8
SPC 9跳至窗口 9

窗口操作相关快捷键(以 SPC w 为前缀):

快捷键功能描述
SPC w .启用窗口临时快捷键
SPC w <Tab>在同一标签内进行窗口切换
SPC w =对齐分离的窗口
SPC w c进入阅读模式,浏览当前窗口 (需要 tools 模块)
SPC w C选择某一个窗口,并且进入阅读模式 (需要 tools 模块)
SPC w d删除一个窗口
SPC w D选择一个窗口并关闭
SPC w f切换同步滚屏
SPC w F新建一个新的标签页
SPC w h移至左边窗口
SPC w H将窗口向左移动
SPC w j移至下方窗口
SPC w J将窗口向下移动
SPC w k移至上方窗口
SPC w K将窗口向上移动
SPC w l移至右方窗口
SPC w L将窗口向右移动
SPC w m最大化/最小化窗口(最大化相当于关闭其它窗口)
SPC w M选择窗口进行替换
SPC w o按序切换标签页
SPC w p m使用弹窗打开消息
SPC w p p关闭当前弹窗窗口
SPC w r顺序切换窗口
SPC w R逆序切换窗口
SPC w s/-水平分割窗口
SPC w S水平分割窗口,并切换至新窗口
SPC w u恢复窗口布局
SPC w U撤销恢复窗口布局
SPC w v//垂直分离窗口
SPC w V垂直分离窗口,并切换至新窗口
SPC w w切换至前一窗口
SPC w W选择一个窗口
SPC w x切换窗口文件

标签页操作快捷键

标签页(Tab)操作相关快捷键都是以 SPC F 为前缀的:

快捷键功能描述
SPC F d关闭当前标签页
SPC F D关闭其他所有标签页
SPC F n新建一个新的标签页

缓冲区与文件

缓冲区操作

缓冲区(Buffer)操作相关快捷键都是以 SPC b 为前缀的,以下为常用的缓冲区操作快捷键, 主要包括了缓冲区的切换和删除等操作:

快捷键功能描述
SPC <Tab>切换至前一缓冲区,常用于两个缓冲区来回切换
SPC b .启用缓冲区临时快捷键
SPC b b通过模糊搜索工具进行缓冲区切换,需要启用一个模糊搜索工具模块
SPC b d删除当前缓冲区,但保留编辑窗口
SPC u SPC b dkill the current buffer and window (does not delete the visited file) (TODO)
SPC b D选择一个窗口,并删除其缓冲区
SPC u SPC b Dkill a visible buffer and its window using ace-window(TODO)
SPC b c删除其它已保存的缓冲区
SPC b Ctrl-d删除其它所有缓冲区
SPC b Ctrl-Shift-d删除名称匹配指定正则表达式的缓冲区
SPC b e清除当前缓冲区内容,需要手动确认
SPC b n切换至下一个缓冲区,排除特殊插件的缓冲区
SPC b m打开消息缓冲区
SPC b o关闭所有窗口和已保存的缓冲区
SPC b p切换至前一个缓冲区,排除特殊插件的缓冲区
SPC b P使用系统剪切板内容替换当前缓冲区
SPC b R从磁盘重新读取当前缓冲区所对应的文件
SPC b sswitch to the scratch buffer (create it if needed) (TODO)
SPC b w切换只读权限
SPC b Y将整个缓冲区复制到系统剪切板
z fMake current function or comments visible in buffer as much as possible (TODO)

新建空白 buffer

快捷键功能描述
SPC b N h在左侧新建一个窗口,并在其中新建空白 buffer
SPC b N j在下方新建一个窗口,并在其中新建空白 buffer
SPC b N k在上方新建一个窗口,并在其中新建空白 buffer
SPC b N l在右侧新建一个窗口,并在其中新建空白 buffer
SPC b N n在当前窗口新建一个空白 buffer

特殊 buffer

在 SpaceVim 中,有很多特殊的 buffer,这些 buffer 是由插件或者 SpaceVim 自身建立的,并不会被列出。

文件操作相关快捷键

文件操作相关的快捷键都是以 SPC f 为前缀的:

快捷键功能描述
SPC f /使用 find 或者 fd 命令查找文件,支持参数提示
SPC f b跳至文件书签
SPC f ccopy current file to a different location(TODO)
SPC f C d修改文件编码 unix -> dos
SPC f C u修改文件编码 dos -> unix
SPC f D删除文件以及 buffer,需要手动确认
SPC f Eopen a file with elevated privileges (sudo edit)(TODO)
SPC f f在当前文件所在文件夹搜索文件
SPC f F在当前文件所在的文件夹搜索光标下的文件
SPC f o打开文件树,并定位到当前文件
SPC f R重命名当前文件
SPC f s / Ctrl-s保存文件 (:w)
SPC f a另存为新的文件
SPC f W使用管理员模式保存
SPC f S保存所有文件
SPC f r打开文件历史
SPC f t切换侧栏文件树
SPC f T打开文件树侧栏
SPC f dWindows 下显示/隐藏磁盘管理器
SPC f y复制并显示当前文件的绝对路径
SPC f Y复制并显示当前文件的远程路径

注意: 如果你使用的是 Window 系统,那么你需要额外 findutils 或者 fd。 如果是使用 scoop 安装的这些工具,系统默认的 C:\WINDOWS\system32 中的命令会覆盖掉用户定义的 $PATH, 解决方案是将 scoop 默认的可执行文件所在的文件夹放置在系统环境变量 $PATHC:\WINDOWS\system32 的前方。

按下 SPC f / 快捷键之后,会弹出搜索输入窗口,输入内容后回车,异步执行 find 或者 fd 命令, 默认使用的是 find 命令,可以使用快捷键 ctrl-e 在不同工具之间切换。

Vim 和 SpaceVim 相关文件

SpaceVim 相关的快捷键均以 SPC f v 为前缀,这便于快速访问 SpaceVim 的配置文件:

快捷键功能描述
SPC f v v复制并显示当前 SpaceVim 的版本
SPC f v d打开 SpaceVim 的用户配置文件

模块管理

所有可用模块可以通过命令 :SPLayer -l 或者快捷键 SPC h l 来展示。

可用的插件

可通过快捷键 <Leader> f p 列出所有已安装的插件,支持模糊搜索,回车将使用浏览器打开该插件的官网。

模糊搜索

目前一共有五种模糊搜索的模块,分别对应不同的工具:

  • denite
  • unite
  • leaderf
  • ctrlp
  • fzf

这些模块都提供了非常类似的快捷键,包括文件搜索、跳转历史搜索等功能, 具体快捷键列表如下:

快捷键

快捷键功能描述
<Leader> f <Space>模糊查找快捷键,并执行该快捷键
<Leader> f e模糊搜索寄存器
<Leader> f h模糊搜索 history/yank
<Leader> f j模糊搜索 jump, change
<Leader> f l模糊搜索 location list
<Leader> f m模糊搜索 output messages
<Leader> f o模糊搜索函数列表
<Leader> f q模糊搜索 quickfix list
<Leader> f r重置上次搜索窗口

但是由于不同工具的局限性,有些模块还不能完全提供上述功能,目前仅有 denite 和 unite 模块可以提供完整的功能。

功能特性unitedeniteleaderfctrlpfzf
模糊查找快捷键,并执行该快捷键yesyesnonono
模块搜索寄存器yesyesnoyesyes
模糊搜索文件yesyesyesyesyes
模糊搜索复制历史yesyesnonoyes
模糊搜索跳转历史yesyesnoyesyes
模糊搜索位置列表yesyesnonoyes
模糊搜索语法树yesyesyesyesyes
模糊搜索消息yesyesnonoyes
模糊搜索全局位置列表yesyesnoyesyes
重置上次搜索窗口yesyesnonono

模糊搜索窗口内的快捷键:

快捷键功能描述
<Tab> / Ctrl-j下一个选项
Shift-<Tab> / Ctrl-k上一个选项
jk离开输入模式(仅支持 denite 和 unite 模块)
Ctrl-w删除光标前词语
<Enter>执行默认动作
Ctrl-s在分割窗口内打开
Ctrl-v在垂直分割窗口内打开
Ctrl-t在新的标签页里打开
Ctrl-g推出模糊搜索插件

Denite 或 Unite 模块可视模式下快捷键:

快捷键功能描述
Ctrl+h/k/l/r未定义
Ctrl+l刷新窗口
<Tab>选择即将执行的动作
Space切换标记当前选项
r替换或者重命名
Ctrl+z切换窗口分割方式

以上这些快捷键仅仅是模糊搜索模块的部分快捷键,其他快捷键信息可查阅对应模块文档。

配置搜索工具

SpaceVim 像下面那样调用不同搜索工具的搜索接口:

SpaceVim 中的搜索命令以 SPC s 为前缀,前一个键是使用的工具,后一个键是范围。 例如 SPC s a b 将使用 ag 在当前所有已经打开的缓冲区中进行搜索。

如果最后一个键(决定范围)是大写字母,那么就会对当前光标下的单词进行搜索。 举个例子 SPC s a B 将会搜索当前光标下的单词。

如果工具键被省略了,那么会用默认的搜索工具进行搜索。默认的搜索工具对应在 search_tools 列表中的第一个工具。列表中的工具默认的顺序为:rg, ag, pt, ack, grep。 举个例子:如果 rgag 没有在系统中找到,那么 SPC s b 会使用 pt 进行搜索。

下表是全部的工具键:

工具
aga
grepg
git grepG
ackk
rgr
ptt

应当避免的范围和对应按键为:

范围
打开的缓冲区b
给定目录的文件f
当前工程p

可以双击按键序列中的第二个键来在当前文件中进行搜索。举个例子:SPC s a a 会使用 ag 在当前文件中进行搜索。

注意:

  • 如果使用源代码管理的话 rg, agpt 都会被忽略掉,但是他们可以在任意目录中正常运行。
  • 也可以通过将它们标记在联合缓冲区来一次搜索多个目录。 注意 如果你使用 pt, TCL parser tools 同时也需要安装一个名叫 pt 的命令行工具。

若需要修改默认搜索工具的选项,可以使用启动函数,在启动函数中配置各种搜索工具的默认选项。 下面是一个修改 rg 默认搜索选项的配置示例:

vim
function! myspacevim#before() abort
    let profile = SpaceVim#mapping#search#getprofile('rg')
    let default_opt = profile.default_opts + ['--no-ignore-vcs']
    call SpaceVim#mapping#search#profile({'rg' : {'default_opts' : default_opt}})
endfunction

搜索工具配置结构为:

vim
" { 'ag' : {
"   'namespace' : '',         " a single char a-z
"   'command' : '',           " executable
"   'default_opts' : [],      " default options
"   'recursive_opt' : [],     " default recursive options
"   'expr_opt' : '',          " option for enable expr mode
"   'fixed_string_opt' : '',  " option for enable fixed string mode
"   'ignore_case' : '',       " option for enable ignore case mode
"   'smart_case' : '',        " option for enable smart case mode
"   }
"  }

常用按键绑定

快捷键功能描述
SPC r l恢复上一次搜索历史

在当前文件中进行搜索

快捷键功能描述
SPC s s使用默认的搜索工具进行搜索
SPC s S使用默认的搜索工具进行搜索光标下的词
SPC s a a使用 ag 进行搜索
SPC s a A使用 ag 进行搜索光标下的词
SPC s g g使用 grep 进行搜索
SPC s g G使用 grep 进行搜索光标下的词
SPC s r r使用 rg 进行搜索
SPC s r R使用 rg 进行搜索光标下的词

搜索当前文件所在的文件夹

以下快捷键为搜索当前文件所在的文件夹,比如,当正在编辑文件src/util/help.c时, 以下这些快捷键搜索的位置为src/util/文件夹内的内容。

快捷键功能描述
SPC s d使用默认的搜索工具进行搜索
SPC s D使用默认的搜索工具搜索光标下的词
SPC s a d使用ag进行搜索
SPC s a D使用ag搜索光标下的词
SPC s g d使用grep进行搜索
SPC s g D使用grep搜索光标下的词
SPC s k d使用ack进行搜索
SPC s k D使用ack搜索光标下的词
SPC s r d使用rg进行搜索
SPC s r D使用rg搜索光标下的词
SPC s t d使用pt进行搜索
SPC s t D使用pt搜索光标下的词

在所有打开的缓冲区中进行搜索

以下快捷键为搜索已经打开的文件列表,搜索的目标位置仅限于已经在 Vim 中打开的文件列表。 在 Vim 中,可以使用命令:ls查看已经打开的文件列表。

如若已经载入了模糊搜索的模块,则可以使用快捷键SPC b b查看已打开的文件。

快捷键功能描述
SPC s b使用默认的搜索工具进行搜索
SPC s B使用默认的搜索工具搜索光标下的词
SPC s a b使用ag进行搜索
SPC s a B使用ag搜索光标下的词
SPC s g b使用grep进行搜索
SPC s g B使用grep搜索光标下的词
SPC s k b使用ack进行搜索
SPC s k B使用ack搜索光标下的词
SPC s r b使用rg进行搜索
SPC s r B使用rg搜索光标下的词
SPC s t b使用pt进行搜索
SPC s t B使用pt搜索光标下的词

在任意目录中进行搜索

以下快捷用于指定搜索目录具体文件夹位置,比如需要去搜索非当前项目下的一些文件。 按下快捷键后,首先提示的是输入搜索词,之后提示输入搜索的目录地址。

快捷键功能描述
SPC s f使用默认的搜索工具进行搜索
SPC s F使用默认的搜索工具搜索光标下的词
SPC s a f使用ag进行搜索
SPC s a F使用ag搜索光标下的词
SPC s g f使用grep进行搜索
SPC s g F使用grep搜索光标下的词
SPC s k f使用ack进行搜索
SPC s k F使用ack搜索光标下的词
SPC s r f使用rg进行搜索
SPC s r F使用rg搜索光标下的词
SPC s t f使用pt进行搜索
SPC s t F使用pt搜索光标下的词

在工程中进行搜索

以下这些快捷键是用于搜索整个工程目录的,搜索的文件夹位置为当前文件所在的项目根目录。 项目的根目录默认会自动检测识别,主要是依据project_rooter_patterns选项设定。

快捷键功能描述
SPC s p使用默认的搜索工具进行搜索
SPC s P使用默认的搜索工具搜索光标下的词
SPC s a p使用ag进行搜索
SPC s a P使用ag搜索光标下的词
SPC s g p使用grep进行搜索
SPC s g P使用grep搜索光标下的词
SPC s k p使用ack进行搜索
SPC s k P使用ack搜索光标下的词
SPC s r p使用rg进行搜索
SPC s r P使用rg搜索光标下的词
SPC s t p使用pt进行搜索
SPC s t P使用pt搜索光标下的词

提示: 在工程中进行搜索的话,无需提前打开文件。在工程保存目录中使用 SPC p p 和 C-s,就比如 SPC s p。(TODO)

后台进行工程搜索

在工程中进行后台搜索时,当搜索完成时,会在状态栏上进行显示.

快捷键功能描述
SPC s j使用默认搜索工具,后台检索输入的正则表达式
SPC s J使用默认搜索工具,后台检索光标下的词语
SPC s l使用 quickfix 窗口列出搜索结果
SPC s a j使用 ag 后台检索输入的正则表达式
SPC s a J使用 ag 后台检索光标下的词语
SPC s g j使用 grep 后台检索输入的正则表达式
SPC s g J使用 grep 后台检索光标下的词语
SPC s k j使用 ack 后台检索输入的正则表达式
SPC s k J使用 ack 后台检索光标下的词语
SPC s t j使用 pt 后台检索输入的正则表达式
SPC s t J使用 pt 后台检索光标下的词语
SPC s r j使用 rg 后台检索输入的正则表达式
SPC s r J使用 rg 后台检索光标下的词语

在网上进行搜索

快捷键功能描述
SPC s w gGet Google suggestions in Vim. Opens Google results in Browser.
SPC s w wGet Wikipedia suggestions in Vim. Opens Wikipedia page in Browser.(TODO)

注意: 为了在 Vim 中使用谷歌 suggestions,需要在 ~/.SpaceVim.d/init.toml[options] 片段中加入如下配置:

toml
[options]
    enable_googlesuggest = true

实时代码检索

快捷键功能描述
SPC s /在工程中使用默认工具实时检索代码

Flygrep 搜索窗口结果窗口内的常用快捷键:

快捷键功能描述
<Esc>关闭搜索窗口
<Enter>打开当前选中的文件位置
Ctrl-t在新标签栏打开选中项
Ctrl-s在分屏打开选中项
Ctrl-v在垂直分屏打开选中项
Ctrl-q将搜索结果转移至 quickfix
<Tab>选中下一行文件位置
Shift-<Tab>选中上一行文件位置
<Backspace>删除上一个输入字符
Ctrl-w删除光标前的单词
Ctrl-u删除光标前所有内容
Ctrl-k删除光标后所有内容
Ctrl-a / <Home>将光标移至行首
Ctrl-e / <End>将光标移至行尾

保持高亮

SpaceVim 使用 search_highlight_persist 保持当前搜索结果的高亮状态到下一次搜索。 同样可以通过 SPC s c 或者运行 命令 :nohlsearch 来取消搜索结果的高亮表示。

获取帮助信息

模糊搜索模块是一个强大的信息筛选浏览器,这类似于 Emacs 中的 Helm。 以下这些快捷键将帮助你快速获取需要的帮助信息:

快捷键功能描述
SPC h SPC使用模糊搜索模块展示 SpaceVim 帮助文档章节目录
SPC h i使用模糊搜索模块获取光标下单词的帮助信息
SPC h g异步执行:helpgrep
SPC h G异步执行:helpgrep,并搜索光标下的词
SPC h k使用快捷键导航,展示 SpaceVim 所支持的前缀键
SPC h m使用模糊搜索模块浏览所有 man 文档

注意:SPC h iSPC h m 需要载入一个模糊搜索模块。

报告一个问题:

快捷键功能描述
SPC h I根据模板展示 Issue 所必须的信息

常用的成对快捷键

快捷键功能描述
[ SPC在当前行或已选区域上方添加空行
] SPC在当前行或已选区域下方添加空行
[ b跳至前一 buffer
] b跳至下一 buffer
[ n跳至前一冲突位置
] n跳至下一冲突位置
[ f跳至文件夹中的前一个文件
] f跳至文件夹中的下一个文件
[ l跳至前一个错误处
] l跳至下一个错误处
[ c跳至前一个 vcs hunk (需要 VersionControl 模块)
] c跳至下一个 vcs hunk (需要 VersionControl 模块)
[ q跳至前一个错误
] q跳至下一个错误
[ t跳至前一个标签页
] t跳至下一个标签页
[ w跳至前一个窗口
] w跳至下一个窗口
[ e向上移动当前行或者已选择行
] e向下移动当前行或者已选择行
[ p粘贴至当前行上方
] p粘贴至当前行下方
g p选择粘贴的区域

跳转,合并,拆分

SPC j 为前缀的快捷键主要用作:跳转(jumping),合并(joining),拆分(splitting)。

跳转

快捷键功能描述
SPC j $跳至行尾,并且在原始位置留下标签,以便跳回
SPC j 0跳至行首,并且在原始位置留下标签,以便跳回
SPC j b向后回跳
SPC j c跳至前一个修改位置
SPC j D跳至当前目录某个文件夹(在另外窗口展示文件列表)
SPC j d跳至当前目录某个文件夹
SPC j f向前跳
SPC j i跳至当前文件的某个函数,使用 Denite 打开语法树
SPC j I跳至所有 Buffer 的语法树(TODO)
SPC j J跳至当前窗口的某两个字符的组合 (easymotion)
SPC j j跳至当前窗口的某个字符 (easymotion)
SPC j k跳至下一行,并且对齐下一行
SPC j l跳至某一行 (easymotion)
SPC j qshow the dumb-jump quick look tooltip (TODO)
SPC j u跳至窗口某个 URL (TODO)
SPC j v跳至某个 Vim 函数的定义处 (TODO)
SPC j w跳至 Buffer 中某个单词 (easymotion)

合并,拆分

快捷键功能描述
J合并当前行和下一行
SPC j k跳至下一行,并且对齐该行
SPC j n从光标处断开当前行,并且插入空行以及进行对齐
SPC j o从光标处拆分该行,光标停留在当前行行尾
SPC j s从光标处拆分 String
SPC j S从光标处使用换行符拆分 String,并自动缩进新行

其他快捷键

g 为前缀的快捷键

在 Normal 模式下按下 g 之后,如果你不记得快捷键出现按键延迟,那么快捷键导航将会提示你所有以 g 为前缀的快捷键。

快捷键功能描述
g #反向搜索光标下的词
g $跳向本行最右侧字符
g &针对所有行重复执行上一次 ":s" 命令
g '跳至标签
g *正向搜索光标下的词
g +newer text state
g ,newer position in change list
g -older text state
g /stay incsearch
g 0go to leftmost character
g ;older position in change list
g <last page of previous command output
g <Home>go to leftmost character
g Eend of previous word
g Fedit file under cursor(jump to line after name)
g Hselect line mode
g Iinsert text in column 1
g Jjoin lines without space
g Nvisually select previous match
g Qswitch to Ex mode
g Renter VREPLACE mode
g Tprevious tag page
g Umake motion text uppercase
g ]tselect cursor tag
g ^go to leftmost no-white character
g _go to last char
g `跳至标签,等同于 g'
g a打印光标字符的 ascii 值
g d跳至定义处
g ego to end of previous word
g fedit file under cursor
g ggo to line N
g hselect mode
g iinsert text after '^ mark
g jmove cursor down screen line
g kmove cursor up screen line
g mgo to middle of screenline
g nvisually select next match
g ogoto byte N in the buffer
g ssleep N seconds
g tnext tag page
g umake motion text lowercase
g ~swap case for Nmove text
g <End>跳至本行最右侧字符,等同于 g$
g Ctrl-G显示光标信息

z 开头的命令

当你不记得按键映射时,你可以在普通模式下输入前缀 z, 然后你会看到所有以 z 为前缀的函数映射。

快捷键功能描述
z <Right>scroll screen N characters to left
z +cursor to screen top line N
z -cursor to screen bottom line N
z .cursor line to center
z <Cr>cursor line to top
z =spelling suggestions
z Atoggle folds recursively
z Cclose folds recursively
z Ddelete folds recursively
z Eeliminate all folds
z Fcreate a fold for N lines
z Gmark good spelled(update internal-wordlist)
z Hscroll half a screenwidth to the right
z Lscroll half a screenwidth to the left
z Mset foldlevel to zero
z Nset foldenable
z Oopen folds recursively
z Rset foldlevel to deepest fold
z Wmark wrong spelled
z Xre-apply foldlevel
z ^cursor to screen bottom line N
z atoggle a fold
z bredraw, cursor line at bottom
z cclose a fold
z ddelete a fold
z eright scroll horizontally to cursor position
z fcreate a fold for motion
z gmark good spelled
z hscroll screen N characters to right
z itoggle foldenable
z jmode to start of next fold
z kmode to end of previous fold
z lscroll screen N characters to left
z msubtract one from foldlevel
z nreset foldenable
z oopen fold
z radd one to foldlevel
z sleft scroll horizontally to cursor position
z tcursor line at top of window
z vopen enough folds to view cursor line
z xre-apply foldlevel and do "zV"
z zsmart scroll
z <Left>scroll screen N characters to right

进阶使用

工程管理

当打开一个文件时,SpaceVim 会自动切换当前目录至包含该文件的项目根目录, 项目根目录的检测依据 project_rooter_patterns 这一选项,其默认值为:

toml
[options]
    project_rooter_patterns = ['.git/', '_darcs/', '.hg/', '.bzr/', '.svn/']

项目管理器默认自动检测最外层的项目根目录,如果需要自动检测最内层的项目根目录, 可将选项 project_rooter_outermost 选项改为 false

toml
[options]
    project_rooter_patterns = ['.git/', '_darcs/', '.hg/', '.bzr/', '.svn/']
    project_rooter_outermost = false

在自动检测项目根目录时,有时候我们需要忽略掉一些目录,可以表达式前面添加 !, 比如,忽略掉 node_packages/ 文件夹:

toml
[options]
    project_rooter_patterns = ['.git/', '_darcs/', '.hg/', '.bzr/', '.svn/', '!node_packages/']
    project_rooter_outermost = false

工程管理的命令以 p 开头:

快捷键功能描述
SPC p '在当前工程的根目录打开 shell(需要 shell 模块)

在工程中搜索文件

快捷键功能描述
SPC p f在当前工程中查找文件
SPC p F在当前工程中查找光标下的文件
SPC p /在当前工程中搜索文本内容
SPC p k关闭当前工程的所有缓冲区
SPC p p显示所有工程

SPC p p 将会列出最近使用的项目清单,默认会显示最多 20 个, 这一数量可以使用 projects_cache_num 来修改。

为了可以夸 Vim 进程读取历史打开的项目信息,这一功能使用了缓存机制。 如果需要禁用这一缓存功能,可以将 enable_projects_cache 设为 false

toml
[options]
    enable_projects_cache = true
    projects_cache_num = 20

自定义跳转文件

若要实现自定义文件跳转功能,需要在项目根目录新建一个 .project_alt.json 文件, 并在此文件内指定文件跳转的规则。此后可以使用名:A跳转到相关文件, 同时可以加上参数指定跳转类型,比如 :A doc。与此同时,可以在命令后加入感叹号 :A!, 强制根据配置文件重新分析项目跳转文件结构。若未指定跳转类型,默认的类型为 alternate

配置文件示例:

json
{
  "autoload/SpaceVim/layers/lang/*.vim": {
    "doc": "docs/layers/lang/{}.md",
    "test": "test/layer/lang/{}.vader"
  }
}

除了使用 .project_alt.json 文件以外,还可以在启动函数中设置 b:alternate_file_config, 例如:

vim
augroup myspacevim
    autocmd!
    autocmd BufNewFile,BufEnter *.c let b:alternate_file_config = {
        \ "src/*.c" : {
            \ "doc" : "docs/{}.md",
            \ "alternate" : "include/{}.h",
            \ }
        \ }
    autocmd BufNewFile,BufEnter *.h let b:alternate_file_config = {
        \ "include/*.h" : {
            \ "alternate" : "scr/{}.c",
            \ }
        \ }
augroup END

标签管理

在浏览代码时,通常需要给指定位置添加标签,方便快速跳转,在 SpaceVim 中可以使用如下快捷键来管理标签。 这一功能需要载入 tools 模块:

toml
[layers]
    name = "tools"
快捷键功能描述
m a显示书签列表
m c清除所有书签
m m切换当前行标签状态
m n跳至下一个书签
m p跳至前一个书签
m i给当前行标签添加说明

正因为占用了以上几个快捷键,以下几个寄存器无法用来记忆当前位置了:a, c, m, n, p, i。 当然,也可以在启动函数里将 <Leader> m 映射为 m 键,如此便可使用 <Leader> m a 来代替 m a

viml
function! myspacevim#before() abort
    nnoremap <silent><Leader>m m
endfunction

任务管理

通过内置的任务管理系统,可以快速集成外部命令工具,类似于 vscode 的任务管理系统, 在 SpaceVim 中,目前支持的任务配置文件包括两种:

  • ~/.SpaceVim.d/tasks.toml:全局配置文件
  • .SpaceVim.d/tasks.toml:项目局部配置文件

全局配置中定义的任务,默认会被项目局部配置文件中定义的任务覆盖掉。

快捷键功能描述
SPC p t e编辑任务配置文件
SPC p t r选定任务并执行
SPC p t l列出所有任务

自定义任务

以下为一个简单的任务配置示例,异步运行 echo hello world,并将结果打印至输出窗口。

toml
[my-task]
    command = 'echo'
    args = ['hello world']

对于不需要打印输出结果,后台运行的任务,可以设置 isBackgroundtrue:

toml
[my-task]
    command = 'echo'
    args = ['hello world']
    isBackground = true

任务的配置,可以设置如下关键字:

  • command: 需要运行的命令。
  • args: 传递给命令的参数,值为字符串数组
  • options: 设置命令运行的一些选项,比如 cwd,env 或者 shell
  • isBackground: 可设定的值为 true 或者 false, 默认是 false, 设置是否需要后台运行任务
  • description: 关于该任务的一段简短介绍

当启动一个任务时,默认会关闭前一个任务,如果需要让任务一直保持后台运行, 可以将 isBackground 设为 true

在编辑任务配置文件时,可以使用一些预设定的变量,以下列出目前已经支持的预设定变量:

  • ${workspaceFolder}: - 当前项目的根目录;
  • ${workspaceFolderBasename}: - 当前项目根目录所在父目录的文件夹名称;
  • ${file}: - 当前文件的绝对路径;
  • ${relativeFile}: - 当前文件相对项目根目录的相对路径;
  • ${relativeFileDirname}: - 当前文件所在的文件夹相对项目根目录的相对路径;
  • ${fileBasename}: - 当前文件的文件名
  • ${fileBasenameNoExtension}: - 当前文件的文件名,不包括后缀名
  • ${fileDirname}: - 当前文件所在的目录的绝对路径
  • ${fileExtname}: - 当前文件的后缀名
  • ${lineNumber}: - 光标所在行号

例如:假定目前正在编辑文件 /home/your-username/your-project/folder/file.ext ,光标位于第十行; 该文件所在的项目根目录为 /home/your-username/your-project,那么任务系统的预设定变量的值为:

  • ${workspaceFolder}: - /home/your-username/your-project/
  • ${workspaceFolderBasename}: - your-project
  • ${file}: - /home/your-username/your-project/folder/file.ext
  • ${relativeFile}: - folder/file.ext
  • ${relativeFileDirname}: - folder/
  • ${fileBasename}: - file.ext
  • ${fileBasenameNoExtension}: - file
  • ${fileDirname}: - /home/your-username/your-project/folder/
  • ${fileExtname}: - .ext
  • ${lineNumber}: - 10

任务自动识别

SpaceVim 目前支持自动识别以下构建系统的任务:npm。 任务管理插件将自动读取并分析 npm 系统的文件package.json。 比如,克隆示例项目 eslint-starter, 编辑其中的任意文件,然后按下快捷键SPC p t r,将会显示如下任务列表:

任务提供源

任务提供源可以自动检测并新建任务。例如,一个任务提供源可以自动检测是否存在项目构建文件,比如:package.json, 如果存在则根据其内容创建 npm 的构建任务。

在 SpaceVim 里,如果需要新建任务提供源,需要使用启动函数,任务提供源是一个 Vim 函数,该函数返回一系列任务对象。

以下为一个简单的示例:

vim
function! s:make_tasks() abort
    if filereadable('Makefile')
        let subcmds = filter(readfile('Makefile', ''), "v:val=~#'^.PHONY'")
        let conf = {}
        for subcmd in subcmds
            let commands = split(subcmd)[1:]
            for cmd in commands
                call extend(conf, {
                            \ cmd : {
                            \ 'command': 'make',
                            \ 'args' : [cmd],
                            \ 'isDetected' : 1,
                            \ 'detectedName' : 'make:'
                            \ }
                            \ })
            endfor
        endfor
        return conf
    else
        return {}
    endif
endfunction
call SpaceVim#plugins#tasks#reg_provider(funcref('s:make_tasks'))

将以上内容加入启动函数,在 SpceVim 仓库内按下 SPC p t r 快捷键,将会展示如下任务:

代办事项管理器

待办事项管理插件将异步执行rg命令,结果会展示在底部待办事项窗口。 默认的快捷键是 SPC a o,默认的标签前缀是 @, 默认的标签包含:['fixme', 'question', 'todo', 'idea'].

配置示例:

[options]
   todo_labels = ['fixme', 'question', 'todo', 'idea']
   todo_prefix = '@'

Iedit 多光标编辑

SpaceVim 内置了 iedit 多光标模式,可快速进行多光标编辑。这一功能引入了两个新的模式:iedit-Normal 模式和 iedit-Insert

iedit 模式默认的颜色是 red/green,但它也基于当前的主题。

Iedit 快捷键

模式转换:

前面提到 Iedit 引入了两个新的模式,在这两个新的模式以及 Vim 自身模式之间转换的快捷键如下:

快捷键Fromto
SPC s eNormal/Visualiedit-Normal
<Esc>iedit-NormalNormal

在 iedit-Normal 模式中:

iedit-Normal 模式继承自 Vim 的 Normal 模式, 下面所列举的是 iedit-Normal 模式专属的快捷键。

快捷键功能描述
<Esc>切换回 Normal 模式
i切换至 iedit-Insert 模式,类似于一般模式下的 i
a切换至 iedit-Insert 模式,类似于一般模式下的 a
I跳至当前 occurrence 并进入 iedit-Insert 模式,类似于一般模式下的 I
A跳至当前 occurrence 并进入 iedit-Insert 模式,类似于一般模式下的 A
<Left> / h左移光标,类似于一般模式下的 h
<Right> / l右移光标,类似于一般模式下的 l
0 / <Home>跳至当前 occurrence 的开头,类似于一般模式下的 0
$ / <End>跳至当前 occurrence 的结尾,类似于一般模式下的 $
C删除所有 occurrences 中从光标位置开始到 occurrences 结尾的字符,类似于一般模式下的 C
D删除所有 occurrences 类似于一般模式下的 D
s删除所有 occurrences 中光标下的字符并进入 iedit-Insert 模式,类似于一般模式下的 s
S删除所有 occurrences 并进入 iedit-Insert 模式,类似于一般模式下的 S
x删除所有 occurrences 中光标下的字符,类似于一般模式下的 x
X删除所有 occurrences 中光标前的字符,类似于一般模式下的 X
gg跳至第一个 occurrence,类似于一般模式下的 gg
G跳至最后一个 occurrence,类似于一般模式下的 G
f{char}向右移动光标至字符 {char} 首次出现的位置
n跳至下一个 occurrence
N跳至上一个 occurrence
p替换所有 occurrences 为最后复制的文本
<Tab>toggle current occurrence

In iedit-Insert mode:

快捷键功能描述
Ctrl-g / <Esc>回到 iedit-Normal 模式
Ctrl-b / <Left>左移光标
Ctrl-f / <Right>右移光标
Ctrl-a / <Home>跳至当前 occurrence 的开头
Ctrl-e / <End>跳至当前 occurrence 的结尾
Ctrl-w删除光标前的词
Ctrl-k删除光标后的词
Ctrl-u删除光标前所有字符
Ctrl-h / <BackSpace>删除光标前字符
<Delete>删除光标后字符

高亮光标下变量

SpaceVim 支持高亮当前光标下的变量,并且启动一个临时快捷键窗口, 提示可以通过快捷键进行修改高亮范围,以及下一步的操作。

目前支持的高亮范围包括:

  • 整个缓冲区(buffer)
  • 当前函数内(function)
  • 可见区域(visible area)

使用快捷键 SPC s h 来高亮光标下的符号。

可使用如下快捷键在已高亮的变量间跳转:

快捷键功能描述
*在当前缓冲区正向搜索光标下变量
#在当前缓冲区逆向搜索光标下变量
SPC s e启动 iedit 模式,编辑光标下变量
SPC s h使用默认的的范围高亮光标下的变量
SPC s H高亮当前缓冲区下所有的光标下变量

在高亮临时快捷键模式下可使用如下快捷键:

快捷键功能描述
e启动 iedit 模式
n跳至下一个匹配处
N / p跳至上一个匹配处
b在整个缓冲区内高亮该匹配
/在整个工程内检索当前匹配
<Tab>切换当前匹配高亮状态
r切换匹配的范围
R重置匹配的范围
Any other key退出该临时快捷键模式

异步运行器和交互式编程

SpaceVim 提供了一个异步执行命令和交互式编程的插件, 在大多数语言模块中,已经为该语言定义了默认的执行命令,通常快捷键为 SPC l r。 如果需要添加额外的命令,可以使用启动函数。比如:添加使用 F5 按键异步编译当前项目。

vim
nnoremap <silent> <F5> :call SpaceVim#plugins#runner#open('make')

目前,SpaceVim 支持如下特性:

  • 使用默认命令一键运行当前文件
  • 使用系统文件管理器选择文件并执行
  • 根据文件顶部标识,选择合适解析器
  • 中断代码运行
  • 底部窗口异步展示运行结果
  • 设置默认的运行语言
  • 选择指定语言来运行
  • 支持交互式编程
  • 运行选择的代码片段

错误处理

SpaceVim 通过默认通过 checkers 模块来进行文件语法检查,默认在保存文件时进行错误检查。

错误管理导航键 (以 e 开头):

快捷键功能描述
SPC t s切换语法检查器
SPC e c清除所有错误
SPC e hdescribe a syntax checker
SPC e l切换显示错误/警告列表
SPC e n跳至下一错误
SPC e p跳至上一个错误
SPC e vverify syntax checker setup (useful to debug 3rd party tools configuration)
SPC e .错误暂态(error transient state)

下一个/上一个错误导航键和错误暂态(error transinet state) 可用于浏览语法检查器和位置列表缓冲区的错误, 甚至可检查 Vim 位置列表的所有错误。这包括下面的例子:在已被保存的位置列表缓冲区进行搜索。 默认提示符:

提示符描述自定义选项
Errorerror_symbol
warningwarning_symbol
Infoinfo_symbol

quickfix 列表移动:

快捷键功能描述
<Leader> q l打开 quickfix 列表窗口
<Leader> q c清除 quickfix 列表
<Leader> q n跳到 quickfix 列表中下一个位置
<Leader> q p跳到 quickfix 列表中上一个位置

格式规范

SpaceVim 添加了 EditorConfig 支持,通过一个配置文件来为不同的文件格式设置对应的代码格式规范, 这一工具兼容多种文本编辑器和集成开发环境。

更多配置方式,可以阅读其官方文档:editorconfig-vim package’s documentation.

后台服务

SpaceVim 在启动时启动了一个后台服务。无论何时,当你关闭了 Vim 窗口,该服务器就会被关闭。

连接到 Vim 服务器

如果你使用 Neovim, 你需要安装neovim-remote,然后增加如下配置到你的 bashrc。

bash
export PATH=$PATH:$HOME/.SpaceVim/bin

使用命令 svc 在一个已存在的 Vim 服务器上打开文件,使用命令 nsvc 在一个已存在的 Neovim 服务器上打开文件。

<!-- vim:set nowrap cole=0: -->