docs/cn/documentation.md
:h SpaceVim 中有体现。ctrl,shift 等按键,大大减少了手指的肌肉损伤。欢迎页面
工作界面
临时快捷键菜单
SpaceVim 根据需要定义了很多临时快捷键,
这可以避免需要重复某些操作时过多按下 SPC 前缀键。
当临时快捷键启用时,会在窗口下方打开一个快捷键介绍窗口,
提示每一临时快捷键的功能。此外一些额外的辅助信息也将会显示出来。
文本移动临时快捷键:
可通过很多种方式来更新 SpaceVim 的核心文件。 建议在更新 SpaceVim 之前,更新一下所有的插件。具体内容如下:
自动更新
注意:默认,这一特性是禁用的,因为自动更新将会增加 SpaceVim 的启动时间, 影响用户体验。如果你需要这一特性,可以将如下加入到用户配置文件中:
[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]] 片段:
[[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`.
也可以使用仓库克隆的地址,比如:
[[custom_plugins]]
repo = "https://gitlab.com/code-stats/code-stats-vim.git"
merged = false
on_cmd 选项使得这个插件延迟加载。
该插件会在第一次执行 ColorHighlight 或者 ColorToggle
命令时被加载。
merged 选项用于设定是否合并该插件的文件夹,如果 merged
是 true,那么,这一插件内的文件将被合并到:
~/.cache/vimfiles/.cache/init.vim/
或者 ~/.cache/vimfiles/.cache/vimrc/,
这依据当前使用的是 Neovim 还是 Vim。
除了 on_cmd 以外,还有一些其它的选项,可以通过
:h dein-options 查阅。
如果需要添加多个自定义插件,可以参考如下设置:
[[custom_plugins]]
repo = 'lilydjwg/colorizer'
merged = false
[[custom_plugins]]
repo = 'joshdick/onedark.vim'
merged = false
禁用插件
SpaceVim 默认安装了一些插件,如果需要禁用某个插件,可以通过 ~/.SpaceVim.d/init.toml 的 [options] 片段中的 disabled_plugins 这一选项来操作:
[options]
# 请注意,该值为一个 List,每一个选项为插件的名称,而非 github 仓库地址。
disabled_plugins = ["clighter", "clighter8"]
由于 toml 语法的局限性,SpaceVim 提供了两种启动函数选项 bootstrap_before 和 bootstrap_after,这两个选项分别指定两个 Vim 自定义函数。
可以在 toml 配置文件 ~/.SpaceVim.d/init.toml 的 [options] 字段中设置这两个选项 bootstrap_before 和 bootstrap_after 对应的函数名称,例如:
[options]
bootstrap_before = "myspacevim#before"
bootstrap_after = "myspacevim#after"
这两种启动函数的区别在于,bootstrap_before 函数是在载入用户配置时候执行的,
而 bootstrap_after 函数是在触发 VimEnter 事件时执行的。因此,可以在 bootstrap_after
函数内对默认的快捷键进行修改。
下面展示一个启动函数的示例,包含 bootstrap_before 和 bootstrap_after 两个函数:
定义启动函数的 Vim 脚本文件应放置在 Vim &runtimepath 的 autoload 文件夹内。例如:
文件名:~/.SpaceVim.d/autoload/myspacevim.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 进行配置,比如:
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 没有使用的):
function! myspacevim#before() abort
call SpaceVim#custom#SPCGroupName(['G'], '+TestGroup')
call SpaceVim#custom#SPC('nore', ['G', 't'], 'echom 1', 'echomessage 1', 1)
endfunction
同样地,如果你需要定义语言相关的功能,可以使用以下函数定义:
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 没有使用的。
以下为 SpaceVim 中与 Vim 默认情况下的一些差异。
按键 s 是删除光标下的字符,但是在 SpaceVim 中,
它是Normal模式窗口快捷键的前缀,这一功能可以使用选项 windows_leader 来修改,默认是 s。
如果需要使用按键 s 的原生功能,可以将该选项设置为空。
[options]
windows_leader = ''
按键 , 是重复上一次的搜索 f、F、t 和 T ,但在 SpaceVim 中默认被用作为语言专用的前缀键。如果需要禁用此选项,
可设置 enable_language_specific_leader = false。
[options]
enable_language_specific_leader = false
按键 q 是录制宏,但是在 SpaceVim 中被设置为了智能关闭窗口,设置该功能的选项是 windows_smartclose,默认值是 q,
可以通过将该选项设置成空字符串来禁用该功能,同时也可以设置成其他按键。
[options]
windows_smartclose = ''
命令行模式下 Ctrl-a 按键在 SpaceVim 中被修改为了移动光标至命令行行首。
命令行模式下 Ctrl-b 按键被映射为方向键 <Left>, 用以向左移动光标。
命令行模式下 Ctrl-f 按键被映射为方向键 <Right>, 用以向右移动光标。
可以通过设置 vimcompatible = true 来启用 Vim 兼容模式,而在兼容模式下,以上所有差异将不存在。
当然,也可通过对应的选项禁用某一个差异。例如,恢复逗号 , 的原始功能,可以通过禁用语言专用的前缀键:
[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(): 返回模块选项列表当发现某个内置上游插件存在问题,需要修改并调试上游插件时,可以依照以下步骤操作:
[options]
disabled_plugins = ["neomake.vim"]
init.toml,加入以下部分,来添加自己 fork 的版本:[[custom_plugins]]
repo = 'wsdjeg/neomake.vim'
# note: you need to disable merged feature
merged = false
或者添加本地克隆版本
使用 bootstrap_before 函数来添加本地路径:
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:
[options]
colorscheme = "desert"
colorscheme_bg = "dark"
| 快捷键 | 功能描述 |
|---|---|
SPC T n | 切换至下一个随机主题,需要载入主题模块 |
SPC T s | 通过模糊搜索模块选择主题 |
可以在主题模块中查看 SpaceVim 支持的所有主题。
注意:
SpaceVim 在终端下默认使用了真色,因此使用之前需要确认下你的终端是否支持真色。 可以阅读 Colours in terminal 了解根多关于真色的信息。
如果你的终端不支持真色,可以在 ~/.SpaceVim.d/init.toml 的 [options] 片段中禁用真色支持:
[options]
enable_guicolors = false
在 SpaceVim 中默认的字体是 Sauce Code Nerd Font。
如果你也喜欢这一字体,建议将这一字体安装到系统中。
如果需要修改 SpaceVim 的字体,可以在 ~/.SpaceVim.d/init.toml 的 [options]片段中修改选项 guifont,默认值为:
[options]
guifont = "SauceCodePro Nerd Font Mono:h11"
如果指定的字体不存在,将会使用系统默认的字体,此外,这一选项在终端下是无效的,终端下修改字体,需要修改终端自身配置。
默认情况下,在 Normal 模式和 Visual 模式下启用鼠标。
如果需要修改这个默认值,可以使用启动函数:
例如:禁用鼠标:
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 的状态栏。
git 和 VersionControl 模块)| 快捷键 | 功能描述 |
|---|---|
SPC [1-9] | 跳至指定序号的窗口 |
默认主题 gruvbox 的状态栏颜色和模式对照表:
| 模式 | 颜色 |
|---|---|
| Normal | 灰色 |
| Insert | 蓝色 |
| Visual | 橙色 |
| Replace | 浅绿色 |
以上的这几种模式所对应的颜色取决于不同的主题模式。
一些状态栏元素可以进行动态的切换:
| 快捷键 | 功能描述 |
|---|---|
SPC t m b | 显示/隐藏电池状态 (需要安装 acpi) |
SPC t m c | toggle 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 n | toggle 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 |
搜索结果信息:
当使用 / 或 ? 进行搜索时,或当按下 n 或 N 后,搜索结果序号将被展示在状态栏中,使用类似于 20/22 这样的分数显示搜索结果的当前序号以及结果总数。具体的效果图如下:
搜索结果展示由incsearch模块提供,可以在配置中启用该模块:
[layers]
name = "incsearch"
电池状态信息:
acpi 可展示电池电量剩余百分比。
使用不同颜色展示不同的电池状态:
| 电池状态 | 颜色 |
|---|---|
| 75% - 100% | 绿色 |
| 30% - 75% | 黄色 |
| 0% - 30% | 红色 |
所有的颜色都取决于不同的主题。
状态栏分割符:
可通过使用 statusline_separator 来定制状态栏分割符,例如使用常用的方向箭头作为状态栏分割符:
statusline_separator = 'arrow'
SpaceVim 所支持的分割符以及截图如下:
| 分割符 | 截图 |
|---|---|
arrow | |
curve | |
slant | |
nil | |
fire |
SpaceVim 功能模块:
功能模块可以通过 SPC t m m 快捷键显示或者隐藏。默认使用 Unicode 字符,可通过设置 statusline_unicode = false 来启用 ASCII 字符。(或许在终端中无法设置合适的字体时,可使用这一选项)。
状态栏中功能模块内的字符显示与否,同如下快捷键功能保持一致:
| 快捷键 | Unicode | ASCII | 功能 |
|---|---|---|---|
SPC t 8 | ⑧ | 8 | 高亮指定列后所有字符 |
SPC t f | ⓕ | f | 高亮指定列字符 |
SPC t s | ⓢ | s | 语法检查 |
SPC t S | Ⓢ | S | 拼写检查 |
SPC t w | ⓦ | w | 行尾空格检查 |
状态栏的颜色
SpaceVim 默认为 colorcheme 模块所包含的主题颜色提供了状态栏主题,若需要使用其它颜色主题, 需要自行设置状态栏主题。若未设置,则使用 gruvbox 的主题。
可以参考以下模板来设置:
" 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:
[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],
]
自定义板块
可以使用启动函数添加自定板块,比如:
function! s:test_section() abort
return 'ok'
endfunction
call SpaceVim#layers#core#statusline#register_sections('test', function('s:test_section'))
之后就可以在配置文件中添加 test 板块,比如,在状态栏右侧最后添加:
[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 t 和 SPC f T 来打开文件树。
如果需要修改默认文件树插件,需要在 ~/.SpaceVim.d/init.toml 的 [options] 片段中修改选项 filemanager:
[options]
# 文件树插件可选值包括:
# - nerdtree (默认)
# - vimfiler: 需要编译 vimproc.vim, 在目录 bundle/vimproc.vim 下
# - defx: 需要 +py3 支持
filemanager = "nerdtree"
SpaceVim 的文件树提供了版本控制信息的接口,但是这一特性需要分析文件夹内容,
会使得文件树插件比较慢,因此默认没有打开,如果需要使用这一特性,
可向配置文件中加入 enable_filetree_gitstatus = true,启用后的截图如下:
默认情况下文件树是打开的,如果需要设置文件树默认关闭,需要修改 enable_vimfiler_welcome 选项。
[options]
enable_vimfiler_welcome = false
默认情况下文件树是在窗口的右边打开,如果需要设置文件树默认在左边,需要修改 filetree_direction 选项。
需要注意的是,当设置文件树在左边时,函数列表 tagbar 将会在右边。
[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 | 垂直分屏打开文件 |
如果想要修改文件树内的默认快捷键,需要再启动函数里面调用用户自定义的自动命令,比如:
function! myspacevim#before() abort
autocmd User NerdTreeInit
\ nnoremap <silent><buffer> <CR> :<C-u>call
\ g:NERDTreeKeyMap.Invoke('o')<CR>
endfunction
以下是不同文件时所对应的自动命令名称:
User NerdTreeInitUser DefxInitUser 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>、g、z。
这些前缀的按键为:
| 前缀名称 | 用户选项以及默认值 | 功能描述 |
|---|---|---|
[SPC] | 空格键 | SpaceVim 默认前缀键 |
[Window] | windows_leader / s | SpaceVim 默认窗口前缀键 |
<leader> | 默认的 Vim leader 键 | Vim/Neovim 默认前缀键 |
默认的 <Leader> 键是 \, 如果需要修改 <Leader>
键则需要使用启动函数修改 g:mapleader 的值,
比如使用逗号 , 作为 <Leader> 按键。
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(),示例如下:
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 配置文件中加入如下内容:
[options]
default_indent = 4
default_indent 这一选项的值,将被赋值到 Vim 的选项:&tabstop、&softtabstop 和
&shiftwidth。默认情况下,输入的 <Tab> 会被自动展开成对应缩进数量的空格,
可通过设置选项 expand_tab 的值为 false 来禁用这一特性:
[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 a | align region (or guessed section) using default rules (TODO) |
SPC x a c | align current indentation region using default rules (TODO) |
SPC x a l | left-align with evil-lion (TODO) |
SPC x a L | right-align with evil-lion (TODO) |
SPC x a r | 基于用户自定义正则表达式进行文本对齐 |
SPC x a o | 对齐算术运算符 +-*/ |
SPC x c | 统计选中区域的字符/单词/行数 |
SPC x d w | 删除行尾空白字符 |
SPC x d SPC | Delete all spaces and tabs around point, leaving one space |
SPC x g l | set lanuages used by translate commands (TODO) |
SPC x g t | 使用 Google Translate 翻译当前单词 |
SPC x g T | reverse source and target languages (TODO) |
SPC x i c | change symbol style to lowerCamelCase |
SPC x i C | change symbol style to UpperCamelCase |
SPC x i i | cycle symbol naming styles (i to keep cycling) |
SPC x i - | change symbol style to kebab-case |
SPC x i k | change symbol style to kebab-case |
SPC x i _ | change symbol style to under_score |
SPC x i u | change symbol style to under_score |
SPC x i U | change symbol style to UP_CASE |
SPC x j c | 居中对齐当前段落 |
SPC x j f | set the justification to full (TODO) |
SPC x j l | 左对齐当前段落 |
SPC x j n | set 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 o | use avy to select a link in the frame and open it (TODO) |
SPC x O | use 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 d | show dictionary entry of word from wordnik.com (TODO) |
SPC x <Tab> | indent or dedent a region rigidly (TODO) |
文本插入相关命令(以 i 开头):
| 快捷键 | 功能描述 |
|---|---|
SPC i l l | insert lorem-ipsum list |
SPC i l p | insert lorem-ipsum paragraph |
SPC i l s | insert lorem-ipsum sentence |
SPC i p 1 | insert simple password |
SPC i p 2 | insert stronger password |
SPC i p 3 | insert password for paranoids |
SPC i p p | insert a phonetically easy password |
SPC i p n | insert a numerical password |
SPC i u | Search for Unicode characters and insert them into the active buffer. |
SPC i U 1 | insert UUIDv1 (use universal argument to insert with CID format) |
SPC i U 4 | insert UUIDv4 (use universal argument to insert with CID format) |
SPC i U U | insert 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。
在编辑历史窗口内的快捷键如下:
| 快捷键 | 功能描述 |
|---|---|
G | move_bottom |
J | move_older_write |
K | move_newer_write |
N | previous_match |
P | play_to |
<2-LeftMouse> | mouse_click |
/ | search |
<CR> | preview |
d | diff |
<down> | move_older |
<up> | move_newer |
i | toggle_inline |
j | move_older |
k | move_newer |
n | next_match |
o | preview |
p | diff_current_buffer |
q | quit |
r | diff |
gg | move_top |
? | toggle_help |
SpaceVim 默认使用 utf-8 码进行编码。下面是 utf-8 编码的四个设置:
修复混乱的显示:SPC e a 是自动选择文件编码的按键映射。在选择好文件编码方式后,你可以运行下面的代码来修复编码:
set enc=utf-8
write
常用的窗口管理快捷键有一个统一的前缀,默认的前缀 [Window] 是按键 s,可以在配置文件中通过修改
SpaceVim 选项 window_leader 的值来设为其它按键:
[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 d | kill the current buffer and window (does not delete the visited file) (TODO) |
SPC b D | 选择一个窗口,并删除其缓冲区 |
SPC u SPC b D | kill 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 s | switch to the scratch buffer (create it if needed) (TODO) |
SPC b w | 切换只读权限 |
SPC b Y | 将整个缓冲区复制到系统剪切板 |
z f | Make current function or comments visible in buffer as much as possible (TODO) |
| 快捷键 | 功能描述 |
|---|---|
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 |
在 SpaceVim 中,有很多特殊的 buffer,这些 buffer 是由插件或者 SpaceVim 自身建立的,并不会被列出。
文件操作相关的快捷键都是以 SPC f 为前缀的:
| 快捷键 | 功能描述 |
|---|---|
SPC f / | 使用 find 或者 fd 命令查找文件,支持参数提示 |
SPC f b | 跳至文件书签 |
SPC f c | copy 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 E | open 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 d | Windows 下显示/隐藏磁盘管理器 |
SPC f y | 复制并显示当前文件的绝对路径 |
SPC f Y | 复制并显示当前文件的远程路径 |
注意: 如果你使用的是 Window 系统,那么你需要额外 findutils
或者 fd。
如果是使用 scoop 安装的这些工具,系统默认的 C:\WINDOWS\system32 中的命令会覆盖掉用户定义的 $PATH,
解决方案是将 scoop 默认的可执行文件所在的文件夹放置在系统环境变量 $PATH 内 C:\WINDOWS\system32 的前方。
按下 SPC f / 快捷键之后,会弹出搜索输入窗口,输入内容后回车,异步执行 find 或者 fd 命令,
默认使用的是 find 命令,可以使用快捷键 ctrl-e 在不同工具之间切换。
SpaceVim 相关的快捷键均以 SPC f v 为前缀,这便于快速访问 SpaceVim 的配置文件:
| 快捷键 | 功能描述 |
|---|---|
SPC f v v | 复制并显示当前 SpaceVim 的版本 |
SPC f v d | 打开 SpaceVim 的用户配置文件 |
所有可用模块可以通过命令 :SPLayer -l 或者快捷键 SPC h l 来展示。
可用的插件
可通过快捷键 <Leader> f p 列出所有已安装的插件,支持模糊搜索,回车将使用浏览器打开该插件的官网。
目前一共有五种模糊搜索的模块,分别对应不同的工具:
这些模块都提供了非常类似的快捷键,包括文件搜索、跳转历史搜索等功能, 具体快捷键列表如下:
快捷键
| 快捷键 | 功能描述 |
|---|---|
<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 模块可以提供完整的功能。
| 功能特性 | unite | denite | leaderf | ctrlp | fzf |
|---|---|---|---|---|---|
| 模糊查找快捷键,并执行该快捷键 | yes | yes | no | no | no |
| 模块搜索寄存器 | yes | yes | no | yes | yes |
| 模糊搜索文件 | yes | yes | yes | yes | yes |
| 模糊搜索复制历史 | yes | yes | no | no | yes |
| 模糊搜索跳转历史 | yes | yes | no | yes | yes |
| 模糊搜索位置列表 | yes | yes | no | no | yes |
| 模糊搜索语法树 | yes | yes | yes | yes | yes |
| 模糊搜索消息 | yes | yes | no | no | yes |
| 模糊搜索全局位置列表 | yes | yes | no | yes | yes |
| 重置上次搜索窗口 | yes | yes | no | no | no |
模糊搜索窗口内的快捷键:
| 快捷键 | 功能描述 |
|---|---|
<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。
举个例子:如果 rg 和 ag 没有在系统中找到,那么 SPC s b 会使用 pt 进行搜索。
下表是全部的工具键:
| 工具 | 键 |
|---|---|
| ag | a |
| grep | g |
| git grep | G |
| ack | k |
| rg | r |
| pt | t |
应当避免的范围和对应按键为:
| 范围 | 键 |
|---|---|
| 打开的缓冲区 | b |
| 给定目录的文件 | f |
| 当前工程 | p |
可以双击按键序列中的第二个键来在当前文件中进行搜索。举个例子:SPC s a a 会使用 ag 在当前文件中进行搜索。
注意:
rg, ag 和 pt 都会被忽略掉,但是他们可以在任意目录中正常运行。pt, TCL parser tools
同时也需要安装一个名叫 pt 的命令行工具。若需要修改默认搜索工具的选项,可以使用启动函数,在启动函数中配置各种搜索工具的默认选项。
下面是一个修改 rg 默认搜索选项的配置示例:
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
搜索工具配置结构为:
" { '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 g | Get Google suggestions in Vim. Opens Google results in Browser. |
SPC s w w | Get Wikipedia suggestions in Vim. Opens Wikipedia page in Browser.(TODO) |
注意: 为了在 Vim 中使用谷歌 suggestions,需要在 ~/.SpaceVim.d/init.toml 的 [options] 片段中加入如下配置:
[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 i 和 SPC 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 q | show 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 0 | go to leftmost character |
g ; | older position in change list |
g < | last page of previous command output |
g <Home> | go to leftmost character |
g E | end of previous word |
g F | edit file under cursor(jump to line after name) |
g H | select line mode |
g I | insert text in column 1 |
g J | join lines without space |
g N | visually select previous match |
g Q | switch to Ex mode |
g R | enter VREPLACE mode |
g T | previous tag page |
g U | make 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 e | go to end of previous word |
g f | edit file under cursor |
g g | go to line N |
g h | select mode |
g i | insert text after '^ mark |
g j | move cursor down screen line |
g k | move cursor up screen line |
g m | go to middle of screenline |
g n | visually select next match |
g o | goto byte N in the buffer |
g s | sleep N seconds |
g t | next tag page |
g u | make 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 A | toggle folds recursively |
z C | close folds recursively |
z D | delete folds recursively |
z E | eliminate all folds |
z F | create a fold for N lines |
z G | mark good spelled(update internal-wordlist) |
z H | scroll half a screenwidth to the right |
z L | scroll half a screenwidth to the left |
z M | set foldlevel to zero |
z N | set foldenable |
z O | open folds recursively |
z R | set foldlevel to deepest fold |
z W | mark wrong spelled |
z X | re-apply foldlevel |
z ^ | cursor to screen bottom line N |
z a | toggle a fold |
z b | redraw, cursor line at bottom |
z c | close a fold |
z d | delete a fold |
z e | right scroll horizontally to cursor position |
z f | create a fold for motion |
z g | mark good spelled |
z h | scroll screen N characters to right |
z i | toggle foldenable |
z j | mode to start of next fold |
z k | mode to end of previous fold |
z l | scroll screen N characters to left |
z m | subtract one from foldlevel |
z n | reset foldenable |
z o | open fold |
z r | add one to foldlevel |
z s | left scroll horizontally to cursor position |
z t | cursor line at top of window |
z v | open enough folds to view cursor line |
z x | re-apply foldlevel and do "zV" |
z z | smart scroll |
z <Left> | scroll screen N characters to right |
当打开一个文件时,SpaceVim 会自动切换当前目录至包含该文件的项目根目录,
项目根目录的检测依据 project_rooter_patterns 这一选项,其默认值为:
[options]
project_rooter_patterns = ['.git/', '_darcs/', '.hg/', '.bzr/', '.svn/']
项目管理器默认自动检测最外层的项目根目录,如果需要自动检测最内层的项目根目录,
可将选项 project_rooter_outermost 选项改为 false。
[options]
project_rooter_patterns = ['.git/', '_darcs/', '.hg/', '.bzr/', '.svn/']
project_rooter_outermost = false
在自动检测项目根目录时,有时候我们需要忽略掉一些目录,可以表达式前面添加 !,
比如,忽略掉 node_packages/ 文件夹:
[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。
[options]
enable_projects_cache = true
projects_cache_num = 20
若要实现自定义文件跳转功能,需要在项目根目录新建一个 .project_alt.json 文件,
并在此文件内指定文件跳转的规则。此后可以使用名:A跳转到相关文件,
同时可以加上参数指定跳转类型,比如 :A doc。与此同时,可以在命令后加入感叹号 :A!,
强制根据配置文件重新分析项目跳转文件结构。若未指定跳转类型,默认的类型为 alternate。
配置文件示例:
{
"autoload/SpaceVim/layers/lang/*.vim": {
"doc": "docs/layers/lang/{}.md",
"test": "test/layer/lang/{}.vader"
}
}
除了使用 .project_alt.json 文件以外,还可以在启动函数中设置 b:alternate_file_config,
例如:
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 模块:
[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。
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,并将结果打印至输出窗口。
[my-task]
command = 'echo'
args = ['hello world']
对于不需要打印输出结果,后台运行的任务,可以设置 isBackground 为 true:
[my-task]
command = 'echo'
args = ['hello world']
isBackground = true
任务的配置,可以设置如下关键字:
cwd,env 或者 shell。true 或者 false, 默认是 false,
设置是否需要后台运行任务当启动一个任务时,默认会关闭前一个任务,如果需要让任务一直保持后台运行,
可以将 isBackground 设为 true。
在编辑任务配置文件时,可以使用一些预设定的变量,以下列出目前已经支持的预设定变量:
例如:假定目前正在编辑文件 /home/your-username/your-project/folder/file.ext ,光标位于第十行;
该文件所在的项目根目录为 /home/your-username/your-project,那么任务系统的预设定变量的值为:
/home/your-username/your-project/your-project/home/your-username/your-project/folder/file.extfolder/file.extfolder/file.extfile/home/your-username/your-project/folder/.ext10SpaceVim 目前支持自动识别以下构建系统的任务:npm。
任务管理插件将自动读取并分析 npm 系统的文件package.json。
比如,克隆示例项目 eslint-starter,
编辑其中的任意文件,然后按下快捷键SPC p t r,将会显示如下任务列表:
任务提供源可以自动检测并新建任务。例如,一个任务提供源可以自动检测是否存在项目构建文件,比如:package.json,
如果存在则根据其内容创建 npm 的构建任务。
在 SpaceVim 里,如果需要新建任务提供源,需要使用启动函数,任务提供源是一个 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 = '@'
SpaceVim 内置了 iedit 多光标模式,可快速进行多光标编辑。这一功能引入了两个新的模式:iedit-Normal 模式和 iedit-Insert。
iedit 模式默认的颜色是 red/green,但它也基于当前的主题。
模式转换:
前面提到 Iedit 引入了两个新的模式,在这两个新的模式以及 Vim 自身模式之间转换的快捷键如下:
| 快捷键 | From | to |
|---|---|---|
SPC s e | Normal/Visual | iedit-Normal |
<Esc> | iedit-Normal | Normal |
在 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 支持高亮当前光标下的变量,并且启动一个临时快捷键窗口, 提示可以通过快捷键进行修改高亮范围,以及下一步的操作。
目前支持的高亮范围包括:
使用快捷键 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 按键异步编译当前项目。
nnoremap <silent> <F5> :call SpaceVim#plugins#runner#open('make')
目前,SpaceVim 支持如下特性:
SpaceVim 通过默认通过 checkers 模块来进行文件语法检查,默认在保存文件时进行错误检查。
错误管理导航键 (以 e 开头):
| 快捷键 | 功能描述 |
|---|---|
SPC t s | 切换语法检查器 |
SPC e c | 清除所有错误 |
SPC e h | describe a syntax checker |
SPC e l | 切换显示错误/警告列表 |
SPC e n | 跳至下一错误 |
SPC e p | 跳至上一个错误 |
SPC e v | verify syntax checker setup (useful to debug 3rd party tools configuration) |
SPC e . | 错误暂态(error transient state) |
下一个/上一个错误导航键和错误暂态(error transinet state) 可用于浏览语法检查器和位置列表缓冲区的错误, 甚至可检查 Vim 位置列表的所有错误。这包括下面的例子:在已被保存的位置列表缓冲区进行搜索。 默认提示符:
| 提示符 | 描述 | 自定义选项 |
|---|---|---|
✖ | Error | error_symbol |
➤ | warning | warning_symbol |
ⓘ | Info | info_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。
export PATH=$PATH:$HOME/.SpaceVim/bin
使用命令 svc 在一个已存在的 Vim 服务器上打开文件,使用命令 nsvc 在一个已存在的 Neovim 服务器上打开文件。