-
neovim终端
:terminal
进入shell模式
<C-\><C-n>
退出终端
<M-i>
重新进入 -
文件树操作
- SpaceVim使用vimfiler作为默认的文件树,默认的键绑定是F3,而SpaceVim也提供SPC f t和SPC f T打开文件树。将文件浏览器更改为nerdtree:let g:spacevim_filemanager = 'nerdtree'
- 支持VCS集成,会出现列状态,这个功能可能会让vimfiler变慢,所以默认情况下是不启用的。启用此功能,添加let g:spacevim_enable_vimfiler_gitstatus = 1到您的自定义配置
- 键绑定
键绑定 描述 <F3> 要么 SPC f t 切换文件浏览器在文件树缓冲区内 <Left> 要么 h 去父节点并折叠展开的目录 <Down> 要么 j 选择下一个文件或目录 <Up> 要么 k 选择以前的文件或目录 <Right> 要么 l 打开选定的文件或展开目录 Ctrl+j 取消映射 Ctrl+l 取消映射 E 取消映射 N 在corsor下创建新文件 yy 将文件完整路径复制到系统剪贴板 yY 将文件复制到系统剪贴板 P 将文件粘贴到光标所在的位置 . 切换可见的忽略文件 sv 分割编辑 sg 垂直分割编辑 p 预览 i 切换到目录历史记录 v 快速查看 gx Execute with vimfiler associated ' 切换标记当前行 V 清除所有标记 Ctrl+r 重绘 l or Enter 打开文件 sg 在垂直分割的窗口中打开文件 sv 在水平分割窗口中打开文件 -
窗口操作
快捷键 描述 SPC w TAB 切换到当前帧中的交替窗口(来回切换) SPC w = 平衡拆分窗口 SPC w b 迫使焦点回到小型缓冲器(TODO) SPC w c 无忧无虑的阅读当前窗口 SPC w C 通过vim-choosewin无忧无虑地阅读其他窗口 SPC w d 删除一个窗口 SPC u SPC w d 删除一个窗口及其当前的缓冲区(不删除文件)(TODO) SPC w D 使用vim-choosewin删除另一个窗口 SPC u SPC w D 使用vim-choosewin(TODO)删除另一个窗口及其当前缓冲区 SPC w t 切换窗口专用(专用窗口不能被模式重用)(TODO) SPC w f 切换跟随模式(TODO) 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 最大化/最小化一个窗口(最大化相当于删除其他窗口)(TODO,现在只支持最大化) SPC w M 使用vim-choosewin交换窗口 SPC w o 循环和焦点之间的标签 SPC w p m 在弹出窗口中打开消息缓冲区(TODO) SPC w p p 关闭当前粘弹出窗口(TODO) SPC w r 向前旋转窗户 SPC w R 向后旋转窗口 SPC w s or SPC w - 水平分割 SPC w S 水平分割和聚焦新窗口 SPC w u 撤消窗口布局(用于有效撤消关闭的窗口)(TODO) SPC w U 重做窗口布局(TODO) SPC w v or SPC w / 垂直分裂 SPC w V 垂直分割和聚焦新窗口 SPC w w 循环和重点之间的窗口 SPC w W 使用vim-choosewin选择窗口 -
查看当前路径
:pwd
切换当前路径到当前打开文件所在路径
:cd %:p:h
解释: %表示当前文件名,%:p表示包含文件名的全部路径,%:p:h表示文件所在路径(head of the full path)
切换当前窗口的当前路径到当前打开文件所在路径
:lcd %:p:h -
如何在打开文件的同时,自动切换当前路径呢?
在vimrc中添加
set autochdir
autochdir已可应付大多数情况,但可能和某些插件冲突。我更推荐:
autocmd BufEnter * silent! lcd %:p:h
上述一句设置已刻应付绝大多数情况,你还可自定义"在打开那些文件时不自动切换",比如在打开/tmp文件夹下的文件时不自动切换,则设置如下:
autocmd BufEnter * if expand("%:p:h") !~ '^/tmp' | silent! lcd %:p:h | endif
windows下,对包含空格的路径会有问题,修改如下:
autocmd BufEnter * silent! lcd %:p:h:gs/ /\ / -
Maven 支持
-
这个功能其实是java语言的支持,我在一个git管理的项目下创建了一个maven的项目,【事实证明各个项目还是分开比较好】,导致Maven一直无法找到我的项目路径,即使用上一步骤的方法切换路径,还是会回到git的目录下。
-
SpaceVim中的项目由vim-projectorist和vim-rooter管理,当文件树中遇到.git目录或.projections.json文件时,vim-rooter将找到项目的根目录。这个就是回到git目录的原因吧。
-
如果你用SpaceVim开发Maven项目,我觉得步骤会是这样的:
javacomplete2和maven:terminal
进入shell模式,mvn archetype:generate -DgroupId=com.mico -DartifactId=genqrcode -DarchetypeArtifactId=maven-archetype-webapp -DinteractivMode=false
[这里只是举个例子,创建了一个叫genqrcode的Web项目,maven版本是3.5],接着进入到genqrcode目录cd genqrcode
,touch .projections.json
,让vim-rooter识别到这是一个项目,文件树进入到genqrcode目录,执行:pwd
,查看当前路径,如果不是,使用:cd [path]
切换到你的项目路径,接着你就可以使用SpaceVim的maven支持了,当你在你的项目路径下的pom.xml中添加jar依赖时,相关的javaautocomplete也会自动添加,实现于vim-javacomplete2插件的Searches class files automatically, using maven, gradle or Eclipse's .classpath file to append completion classpath功能:
javacomplete2和maven -
java模式下的快捷键
- 导包
快捷键 描述 F4 (插入/正常模式) 在光标下导入类 SPC l I 导入缺失的类 SPC l R 删除未使用的类 SPC l i 光标下的智能导入类 <C-j>I (插入模式) 导入缺失的类 <C-j>R (插入模式) 删除未使用的类 <C-j>i (插入模式) 光标下的智能导入类 - 代码生成器快捷键
模式 快捷键 描述 正常 SPC l g A 生成访问器 正常/视觉 SPC l g s 生成setter访问器 正常/视觉 SPC l g g 生成getter访问器 正常/视觉 SPC l g a 生成setter和getter访问器 正常 SPC l g M 生成抽象方法 插入 <c-j>s 生成setter访问器 插入 <c-j>g 生成getter访问器 插入 <c-j>a 生成getter和setter访问器 正常 SPC l g t 生成toString函数 正常 SPC l g e 生成equals和hashcode函数 正常 SPC l g c 生成构造函数 正常 SPC l g C 生成默认的构造函数 - 代码格式化
格式化当前缓冲区的默认键绑定是SPC b f
。而这个键绑定是在格式层中定义的。您也可以使用g=
缩进当前缓冲区。
为了使neoformat支持java文件,你应该安装uncrustify。或下载谷歌的formater jar, 并添加let g:spacevim_layer_lang_java_formatter = 'path/to/google-java-format.jar'
到SpaceVim自定义配置文件。 - maven 快捷键
快捷键 描述 SPC l m i 运行maven clean install SPC l m I 运行maven install SPC l m p Run one already goal from list SPC l m r Run maven goals SPC l m R Run one maven goal SPC l m t Run maven test - 跳转
快捷键 描述 SPC l j a 源文件 和 对应 test 文件相互跳转 - jshell,Start a jshell inferior REPL process with
SPC l s i
.
快捷键 描述 SPC l s b send buffer and keep code buffer focused SPC l s l send line and keep code buffer focused SPC l s s send selection text and keep code buffer focused - 运行main方法
- 贴了这么多快捷键,估计也不知道咋回事,还是来一波细致操作吧:
- 打开一个java文件,有main方法
- 按
SPC
即空格键,如图 - 空格实际上是导航键
- 按l键
- 按r键
- 按m键
- 好了,我想,这么图文解说的话,估计会对快捷键有一个系统的理解,至少知道这一步步怎么来的,按
SPC
键之后有很多其他的选项,可以逐一去试试。更多演示请看这里
-
-
Go支持
- 打开一个go文件
- 报错vim-go: could not find 'gotags'. Run :GoInstallBinaries to fix it,执行
:GoInstallBinaries
- 报错
unrecognized import path "golang.org/x/tools/go/buildutil" (https fetch: Get https://golang.org/x/tools/go/buildutil?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
我试着拿了个梯子,谷歌的那个,还是不行,但是从这里开始,梯子一直开着 -
go get github.com/golang/tools
参考 - 在GOPATH\src\github.com目录下就有tools文件夹
- 在src下和github.com平级新建golang.org文件下,在此文件夹下建x文件夹,然后将tools都复制进去。
- 再次执行
:GoInstallBinaries
- 有个叫
cmd/keyify
的go包安装还是不成功,从github上访问是404,估计是转移了,搜了一下,新地址在https://github.com/dominikh/go-tools/tree/master/cmd/keyify
按该git上的教程安装: go get honnef.co/go/tools/cmd/keyify
-
Python
- sudo pip3 install --upgrade neovim
- sudo pip2 install --upgrade neovim
- 对python好像不友好,自带python2.7,我搜索了半天也找不出来有啥办法,又不能把自带的python升级,有点迷 .[已解决,详情查看
常见问题
,具体的方式是在python文件头上加上#!python3
]
-
LaTex科学公式支持
- 用SpaceVim打开一个以.md结尾的文件,输入
$$E=mc^2$$
,然后SPC l p
会自动打开浏览器,支持实时预览 - LaTex
-
$$公式$$
表示行间公式,本来Tex中使用\(公式\)
表示行内公式,但因为Markdown中\
是转义字符,所以在Markdown中输入行内公式使用\\(公式\\)
- MathJax 支持的数学符号表
- 用SpaceVim打开一个以.md结尾的文件,输入
-
项目管理
快捷键 描述 SPC p f 在当前项目中查找文件 SPC p / 模糊搜索当前项目中的文本 SPC p k 杀死当前项目的所有缓冲区 SPC p t 找到项目的根 SPC p p 列出所有项目 -
配置文件
" Dark powered mode of SpaceVim, generated by SpaceVim automatically.
let g:spacevim_enable_debug = 1
let g:spacevim_realtime_leader_guide = 1
call SpaceVim#layers#load('incsearch')
call SpaceVim#layers#load('lang#c')
call SpaceVim#layers#load('lang#elixir')
call SpaceVim#layers#load('lang#go')
call SpaceVim#layers#load('lang#java')
call SpaceVim#layers#load('lang#haskell')
call SpaceVim#layers#load('lang#javascript')
call SpaceVim#layers#load('lang#lua')
call SpaceVim#layers#load('lang#perl')
call SpaceVim#layers#load('lang#php')
call SpaceVim#layers#load('lang#python')
call SpaceVim#layers#load('lang#rust')
call SpaceVim#layers#load('lang#swig')
call SpaceVim#layers#load('lang#tmux')
call SpaceVim#layers#load('lang#vim')
call SpaceVim#layers#load('lang#xml')
call SpaceVim#layers#load('shell')
call SpaceVim#layers#load('tools#screensaver')
let g:spacevim_enable_vimfiler_welcome = 1
let g:spacevim_enable_debug = 1
let g:deoplete#auto_complete_delay = 150
let g:spacevim_enable_tabline_filetype_icon = 1
let g:spacevim_enable_statusline_display_mode = 0
let g:spacevim_enable_os_fileformat_icon = 1
let g:spacevim_buffer_index_type = 1
let g:neomake_vim_enabled_makers = []
let g:clang2_placeholder_next = ''
let g:clang2_placeholder_prev = ''
if executable('vimlint')
call add(g:neomake_vim_enabled_makers, 'vimlint')
endif
if executable('vint')
call add(g:neomake_vim_enabled_makers, 'vint')
endif
if has('python3')
let g:ctrlp_map = ''
nnoremap <silent> <C-p> :Denite file_rec<CR>
endif
" 这一段必须放在3个if语句的后面,否则会导致python的提示不生效
let g:chromatica#libclang_path='/Users/micocube/clang+llvm-5.0.1/lib'
let g:python_host_prog = '/usr/bin/python'
let g:python3_host_prog = '/Library/Frameworks/Python.framework/Versions/3.6/bin/python3'
let g:loaded_python_provider = 1
let g:spacevim_enable_guicolors = 0
let g:jedi#force_py_version = 3
-
常见问题
Where should I put my configration?
SpaceVim load custom global configuration from
~/.SpaceVim.d/init.vim
. It also support project specific configration, That means it will load.SpaceVim.d/init.vim
from the root of your project.E492: Not an editor command: ^M
The problem was git auto added ^M when cloning, solved by:
git config --global core.autocrlf input
Why SpaceVim can not display default colorscheme?
By default, SpaceVim use true colors, so you should make sure your terminal support true colors, This is an articl about what is true colors and the terminals which support true colors.
Why I can not update plugins?
Sometimes you will see
Updating failed, The plugin dir is dirty
. Since the dir of a plugin is a git repo, if the directory is dirty, you can not usegit pull
to update plugin. To fix this issue, just move your cursor to the error line, and pressgf
, then rungit reset --hard HEAD
orgit checkout .
. for more info, please read documentation of git.How can I run the Python3 program?
已经向作者提交了issue,并且很快解决了,没看懂不要紧,要在mac 版本的SpaceVim上运行python3程序只需在行首加上
#!python3
,前提是你在命令行能使用python3
命令,当然你写全路径也行,但是python3
和!
之间不能有空格
网友评论