SpaceVim
A modular Vim/Neovim configuration
Home | About | Quick start guide | Documentation | Development | Community | Sponsors | 中文
This article introduces you to SpaceVim as a Java environment.
Before reading this article, I recommend reading Use vim as IDE, which is for the general usage.
With lang#java
layer, spacevim can be built into a lightweight java integrated development environment.
Each of the following sections will be covered:
This tutorial is not intended to teach you Java itself.
By default, the lang#java
layer is not loaded in SpaceVim. To use SpaceVim for java,
you need to enable this layer in SpaceVim configuration file.
Press SPC f v d
to open SpaceVim configuration file, and add following section:
[[layers]]
name = "lang#java"
There are two ways to configure the java language server protocol.
>=0.5.0
)If you are using nvim(>=0.5.0)
. You need to use enabled_clients
to specific the language servers.
for example:
[[layers]]
name = 'lsp'
enabled_clients = ['jdtls', 'clangd']
To override the command of client, you may need to use override_client_cmds
option:
[[layers]]
name = "lsp"
enabled_clients = ['jdtls', 'clangd']
[layers.override_client_cmds]
jdtls = ["jdtls", "-configuration", "/home/user/.cache/jdtls/config", "-data", "/home/user/.cache/jdtls/workspace"]
You can install jdtls
via packages manager. For example:
scoop install jdtls
For manual installation you can download precompiled binaries from the official downloads site and ensure that the PATH variable contains the bin directory of the extracted archive.
<0.5.0
)To enable language server protocol support, you may need to enable lsp layer.
[[layers]]
name = "lsp"
filetypes = [
"java"
]
[layers.override_cmd]
java = [
"java",
"-Declipse.application=org.eclipse.jdt.ls.core.id1",
"-Dosgi.bundles.defaultStartLevel=4",
"-Declipse.product=org.eclipse.jdt.ls.core.product",
"-Dlog.protocol=true",
"-Dlog.level=NONE",
"-noverify",
"-Xmx1G",
"-jar",
"D:\\dev\\jdt-language-server-latest\\plugins\\org.eclipse.equinox.launcher_1.5.200.v20180922-1751.jar",
"-configuration",
"D:\\dev\\jdt-language-server-latest\\config_win",
"-data",
"C:\\Users\\Administrator\\.cache\\javalsp"
]
You need to replace D:\dev\jdt-language-server-latest\plugins\org.eclipse.equinox.launcher_1.5.200.v20180922-1751.jar
with the actual name of the org.eclipse.equinox.launcher jar
The configuration flag can point to either:
config_win
, for Windowsconfig_mac
, for MacOSconfig_linux
, for LinuxThe data flag value should be the absolute path to the working directory of the server. This should be different from the path of the user’s project files (which is sent during the initialize handshake).
javacomplete2 which has been included in lang#java
layer provides omnifunc for java file and deoplete source.
with this plugin and autocomplete
layer, the completion popup menu will be opened automatically.
The default outline plugin is tagbar, and the key binding is F2
. This key binding will open an outline sidebar on the left.
To fuzzy find outline in current buffer, you need to enable a fuzzy find layer, for example denite layer,
then press Leader f o
:
To rename java symbol, you need to enable lsp
layer for java. The default key binding
for rename symbol under the cursor is SPC l e
.
The default key binding to get doc of cursor symbol is SPC l d
or K
:
checkers
layer provides asynchronous linting feature, this layer use neomake by default.
neomake support maven, gradle and eclipse project. it will generate classpath automatically for these project.
within above picture, we can see the checkers layer provides following feature:
There are two kind features for importing packages, import packages automatically and manually.
SpaceVim will import the packages after selecting the class name on popmenu.
Also, you can use key binding SPC l i
to import the class at the cursor point.
If there are more than one class, a menu will be shown below current windows.
SpaceVim uses vim-project to manager the files in a project, you can add a .projections.json
to the root of your project with following content:
{
"src/main/java/*.java": {
"alternate": "src/test/java/{dirname}/Test{basename}.java"
},
"src/test/java/**/Test*.java": { "alternate": "src/main/java/{}.java" }
}
with this configuration, you can jump between the source code and test file via command :A
Base on JavaUnite, you can use SPC l r c
to run current function or use SPC l r m
to run the main function of current Class.
Code formatting is provided by format
layer, which is loaded by default.
The default format engine is neoformat
, it will run google’s java formatter
asynchronously. The key binding for formatting current file is SPC b f
.
To use this feature, you need to download the google’s java formatter jar, and set the
path of this jar file in layer option.
[[layers]]
name = 'lang#java'
java_formatter_jar = 'path/to/google-java-format.jar'
you need to install jdk9 which provide a build-in tools jshell
, and SpaceVim use the jshell
as default inferior REPL process:
Powered by Jekyll