<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Eric Wong</title>
    <description>The latest articles on DEV Community by Eric Wong (@spacevim).</description>
    <link>https://dev.to/spacevim</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F79064%2F32b45a16-cba9-440d-9999-aaa7754fd317.jpg</url>
      <title>DEV Community: Eric Wong</title>
      <link>https://dev.to/spacevim</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/spacevim"/>
    <language>en</language>
    <item>
      <title>Multiple cursor support in SpaceVim</title>
      <dc:creator>Eric Wong</dc:creator>
      <pubDate>Fri, 08 Apr 2022 14:42:26 +0000</pubDate>
      <link>https://dev.to/spacevim/multiple-cursor-support-in-spacevim-42ah</link>
      <guid>https://dev.to/spacevim/multiple-cursor-support-in-spacevim-42ah</guid>
      <description>&lt;p&gt;&lt;a href="https://spacevim.org" rel="noopener noreferrer"&gt;SpaceVim&lt;/a&gt; is a preconfigured configuration for Vim and Neovim. It provides multiple cursor supportting via &lt;code&gt;iedit&lt;/code&gt; plugin which just same as &lt;code&gt;iedit-mode&lt;/code&gt; of emacs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fikilom107xx40658sq07.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fikilom107xx40658sq07.png" alt="iedit-mode" width="800" height="247"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The default key binding of iedit is &lt;code&gt;SPC s e&lt;/code&gt;, &lt;code&gt;SPC&lt;/code&gt; is &lt;code&gt;&amp;lt;Space&amp;gt;&lt;/code&gt;. There are two mode of iedit, &lt;code&gt;iedit-normal&lt;/code&gt; mode and &lt;code&gt;iedit-insert&lt;/code&gt; mode. Here are the key bindings of these two modes.&lt;/p&gt;

&lt;h4&gt;
  
  
  iedit states key bindings
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;State transitions:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key Bindings&lt;/th&gt;
&lt;th&gt;From&lt;/th&gt;
&lt;th&gt;to&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SPC s e&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;normal or visual&lt;/td&gt;
&lt;td&gt;iedit-Normal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;In iedit-Normal mode:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;iedit-Normal&lt;/code&gt; mode inherits from &lt;code&gt;Normal&lt;/code&gt; mode, the following key bindings are specific to &lt;code&gt;iedit-Normal&lt;/code&gt; mode.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key Binding&lt;/th&gt;
&lt;th&gt;Descriptions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;Esc&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;go back to &lt;code&gt;Normal&lt;/code&gt; mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;i&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;switch to &lt;code&gt;iedit-Insert&lt;/code&gt; mode, same as &lt;code&gt;i&lt;/code&gt; in &lt;code&gt;Normal&lt;/code&gt; model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;a&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;switch to &lt;code&gt;iedit-Insert&lt;/code&gt; mode, same as &lt;code&gt;a&lt;/code&gt; in &lt;code&gt;Normal&lt;/code&gt; model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;I&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;go to the beginning of the current occurrence and switch to &lt;code&gt;iedit-Insert&lt;/code&gt; mode, same as &lt;code&gt;I&lt;/code&gt; in &lt;code&gt;Normal&lt;/code&gt; model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;A&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;go to the end of the current occurrence and switch to &lt;code&gt;iedit-Insert&lt;/code&gt; mode, same as &lt;code&gt;A&lt;/code&gt; in &lt;code&gt;Normal&lt;/code&gt; model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;&amp;lt;Left&amp;gt;&lt;/code&gt;/&lt;code&gt;h&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Move cursor to left, same as &lt;code&gt;h&lt;/code&gt; in &lt;code&gt;Normal&lt;/code&gt; model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;&amp;lt;Right&amp;gt;&lt;/code&gt;/&lt;code&gt;l&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Move cursor to right, same as &lt;code&gt;l&lt;/code&gt; in &lt;code&gt;Normal&lt;/code&gt; model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;0&lt;/code&gt;/&lt;code&gt;&amp;lt;Home&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;go to the beginning of the current occurrence, same as &lt;code&gt;0&lt;/code&gt; in &lt;code&gt;Normal&lt;/code&gt; model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;$&lt;/code&gt;/&lt;code&gt;&amp;lt;End&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;go to the end of the current occurrence, same as &lt;code&gt;$&lt;/code&gt; in &lt;code&gt;Normal&lt;/code&gt; model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;C&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;delete the characters from the cursor to the end in all occurrences and switch to iedit-Insert mode, same as &lt;code&gt;C&lt;/code&gt; in &lt;code&gt;Normal&lt;/code&gt; model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;D&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;delete the occurrences, same as &lt;code&gt;D&lt;/code&gt; in &lt;code&gt;Normal&lt;/code&gt; model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;delete the character under cursor and switch to iedit-Insert mode, same as &lt;code&gt;s&lt;/code&gt; in &lt;code&gt;Normal&lt;/code&gt; model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;S&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;delete the occurrences and switch to iedit-Insert mode, same as &lt;code&gt;S&lt;/code&gt; in &lt;code&gt;Normal&lt;/code&gt; model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;x&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;delete the character under cursor in all the occurrences, same as &lt;code&gt;x&lt;/code&gt; in &lt;code&gt;Normal&lt;/code&gt; model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;X&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;delete the character before cursor in all the occurrences, same as &lt;code&gt;X&lt;/code&gt; in &lt;code&gt;Normal&lt;/code&gt; model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gg&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;go to first occurrence, same as &lt;code&gt;gg&lt;/code&gt; in &lt;code&gt;Normal&lt;/code&gt; model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;G&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;go to last occurrence, same as &lt;code&gt;G&lt;/code&gt; in &lt;code&gt;Normal&lt;/code&gt; model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;f{char}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Move the cursor to the right where the &lt;code&gt;{char}&lt;/code&gt; first appears in all the occurrences&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;n&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;go to next occurrence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;N&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;go to previous occurrence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;p&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;replace occurrences with last yanked (copied) text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;Tab&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;toggle current occurrence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;In iedit-Insert mode:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key Bindings&lt;/th&gt;
&lt;th&gt;Descriptions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;Ctrl-g&lt;/code&gt; / &lt;code&gt;&amp;lt;Esc&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;go back to &lt;code&gt;iedit-Normal&lt;/code&gt; mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;Ctrl-b&lt;/code&gt; / &lt;code&gt;&amp;lt;Left&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;move cursor to left&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;Ctrl-f&lt;/code&gt; / &lt;code&gt;&amp;lt;Right&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;move cursor to right&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;Ctrl-a&lt;/code&gt; / &lt;code&gt;&amp;lt;Home&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;moves the cursor to the beginning of the current occurrence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;Ctrl-e&lt;/code&gt; / &lt;code&gt;&amp;lt;End&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;moves the cursor to the end of the current occurrence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl-w&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;delete word before cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl-k&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;delete all words after cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl-u&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;delete all characters before cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;Ctrl-h&lt;/code&gt; / &lt;code&gt;&amp;lt;Backspace&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;delete character before cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;Delete&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;delete character after cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;SPC s e&lt;/code&gt; will select all matchs by default, if you want to select the matchs one by one, you can use &lt;code&gt;SPC s E&lt;/code&gt; key binding and &lt;code&gt;Ctrl-n&lt;/code&gt; to select next one. &lt;/p&gt;

</description>
      <category>vim</category>
      <category>neovim</category>
      <category>spacevim</category>
      <category>emacs</category>
    </item>
    <item>
      <title>Tasks manager within SpaceVim</title>
      <dc:creator>Eric Wong</dc:creator>
      <pubDate>Sat, 22 Feb 2020 08:38:12 +0000</pubDate>
      <link>https://dev.to/spacevim/tasks-manager-within-spacevim-4b00</link>
      <guid>https://dev.to/spacevim/tasks-manager-within-spacevim-4b00</guid>
      <description>&lt;h3&gt;
  
  
  Tasks
&lt;/h3&gt;

&lt;p&gt;To integrate with external tools, &lt;a href="https://spacevim.org" rel="noopener noreferrer"&gt;SpaceVim&lt;/a&gt; introduce a task manager system,&lt;br&gt;
which is similar to vscode tasks-manager. There are two kinds of task configuration&lt;br&gt;
file: global tasks configuration(&lt;code&gt;~/.SpaceVim.d/tasks.toml&lt;/code&gt;) and local configuration(&lt;code&gt;.SpaceVim.d/tasks.toml&lt;/code&gt;).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key Bindings&lt;/th&gt;
&lt;th&gt;Descriptions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SPC p t e&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;edit tasks configuration file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SPC p t r&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;select task to run&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h4&gt;
  
  
  Task auto-detection
&lt;/h4&gt;

&lt;p&gt;SpaceVim currently auto-detects tasks for npm.&lt;br&gt;
the tasks manager will paser the &lt;code&gt;package.json&lt;/code&gt; file for npm systems.&lt;br&gt;
If you have cloned the &lt;a href="https://github.com/spicydonuts/eslint-starter" rel="noopener noreferrer"&gt;eslint-starter&lt;/a&gt; example,&lt;br&gt;
then pressing &lt;code&gt;SPC p t r&lt;/code&gt; shows the following list:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2r3qls3o3cgkcz8kwcd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2r3qls3o3cgkcz8kwcd.png" alt="task-auto-detection" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Custom tasks
&lt;/h4&gt;

&lt;p&gt;this is basic task configuration for running &lt;code&gt;echo hello world&lt;/code&gt;, and print results to runner windows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[my-task]&lt;/span&gt;
    &lt;span class="py"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'echo'&lt;/span&gt;
    &lt;span class="py"&gt;args&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'hello world'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vl12zx0qpxupd9e0tz9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vl12zx0qpxupd9e0tz9.png" alt="task hello world" width="682" height="228"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To run task in the background, you need to set &lt;code&gt;isBackground&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[my-task]&lt;/span&gt;
    &lt;span class="py"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'echo'&lt;/span&gt;
    &lt;span class="py"&gt;args&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'hello world'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="py"&gt;isBackground&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The task's properties have the following semantic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;command&lt;/strong&gt;: the actual command to execute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;args&lt;/strong&gt;: the arguments passed to the command. can be omitted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;options&lt;/strong&gt;: override the defaults for &lt;code&gt;cwd&lt;/code&gt;,&lt;code&gt;env&lt;/code&gt; or &lt;code&gt;shell&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SpaceVim supports variable substitution in task, The following predefined variables are supported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;${workspaceFolder}&lt;/strong&gt;: - the project root directory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${workspaceFolderBasename}&lt;/strong&gt;: - the parent directory name of current project root&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${file}&lt;/strong&gt;: - the path of current file&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${relativeFile}&lt;/strong&gt;: - the current file relative to project root&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${relativeFileDirname}&lt;/strong&gt;: - the current file's dirname relative to workspaceFolder&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${fileBasename}&lt;/strong&gt;: - the current file's basename&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${fileBasenameNoExtension}&lt;/strong&gt;: - the current file's basename without file extension&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${fileDirname}&lt;/strong&gt;: - the current file's dirname&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${fileExtname}&lt;/strong&gt;: - the current file's extension&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${cwd}&lt;/strong&gt;: - the task runner's current working directory on startup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${lineNumber}&lt;/strong&gt;: - the current selected line number in the active file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;for example: Supposing that you have the following requirements:&lt;/p&gt;

&lt;p&gt;A file located at &lt;code&gt;/home/your-username/your-project/folder/file.ext&lt;/code&gt; opened in your editor;&lt;br&gt;
The directory &lt;code&gt;/home/your-username/your-project&lt;/code&gt; opened as your root workspace.&lt;br&gt;
So you will have the following values for each variable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;${workspaceFolder}&lt;/strong&gt;: - &lt;code&gt;/home/your-username/your-project/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${workspaceFolderBasename}&lt;/strong&gt;: - &lt;code&gt;your-project&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${file}&lt;/strong&gt;: - &lt;code&gt;/home/your-username/your-project/folder/file.ext&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${relativeFile}&lt;/strong&gt;: - &lt;code&gt;folder/file.ext&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${relativeFileDirname}&lt;/strong&gt;: - &lt;code&gt;folder/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${fileBasename}&lt;/strong&gt;: - &lt;code&gt;file.ext&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${fileBasenameNoExtension}&lt;/strong&gt;: - &lt;code&gt;file&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${fileDirname}&lt;/strong&gt;: - &lt;code&gt;/home/your-username/your-project/folder/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${fileExtname}&lt;/strong&gt;: - &lt;code&gt;.ext&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;${lineNumber}&lt;/strong&gt;: - line number of the cursor&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>spacevim</category>
      <category>vim</category>
      <category>neovim</category>
    </item>
    <item>
      <title>Use Vim as a Java IDE</title>
      <dc:creator>Eric Wong</dc:creator>
      <pubDate>Mon, 24 Jun 2019 12:30:04 +0000</pubDate>
      <link>https://dev.to/spacevim/use-vim-as-a-java-ide-2l1k</link>
      <guid>https://dev.to/spacevim/use-vim-as-a-java-ide-2l1k</guid>
      <description>&lt;h1&gt;
  
  
  Use Vim as a Java IDE
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;why canonical_url do not word?!&lt;br&gt;
the origin URL is &lt;a href="https://spacevim.org/use-vim-as-a-java-ide/" rel="noopener noreferrer"&gt;https://spacevim.org/use-vim-as-a-java-ide/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a general guide for using SpaceVim as a Java IDE, including layer configuration and usage.&lt;br&gt;
Each of the following sections will be covered:&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;Installation&lt;/li&gt;
&lt;li&gt;Language server&lt;/li&gt;
&lt;li&gt;Code completion&lt;/li&gt;
&lt;li&gt;Code outline&lt;/li&gt;
&lt;li&gt;Rename symbol&lt;/li&gt;
&lt;li&gt;Javadoc hovers&lt;/li&gt;
&lt;li&gt;Syntax lint&lt;/li&gt;
&lt;li&gt;Import packages&lt;/li&gt;
&lt;li&gt;Jump to test file&lt;/li&gt;
&lt;li&gt;running code&lt;/li&gt;
&lt;li&gt;Code formatting&lt;/li&gt;
&lt;li&gt;REPL&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;SpaceVim is a Vim and neovim configuration, so you need to install vim or neovim,&lt;br&gt;
here are two guides for installing neovim and vim8 with &lt;code&gt;+python3&lt;/code&gt; feature.&lt;br&gt;
following the &lt;a href="https://spacevim.org/quick-start-guide/" rel="noopener noreferrer"&gt;quick start guide&lt;/a&gt; to install SpaceVim.&lt;/p&gt;

&lt;p&gt;SpaceVim do not enable language layer by default, so you need to enable &lt;code&gt;lang#java&lt;/code&gt; layer.&lt;br&gt;
Press &lt;code&gt;SPC f v d&lt;/code&gt; to open SpaceVim configuration file, and add following section:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[[layers]]&lt;/span&gt;
  &lt;span class="py"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"lang#java"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Language server
&lt;/h3&gt;

&lt;p&gt;To enable language server protocol support, you may need to enable lsp layer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[[layers]]&lt;/span&gt;
  &lt;span class="py"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"lsp"&lt;/span&gt;
  &lt;span class="py"&gt;filetypes&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s"&gt;"java"&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="nn"&gt;[layers.override_cmd]&lt;/span&gt;
    &lt;span class="py"&gt;java&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s"&gt;"java"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="py"&gt;"-Declipse.application&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;org.eclipse.jdt.ls.core.id&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="s"&gt;",&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;    &lt;span class="py"&gt;"-Dosgi.bundles.defaultStartLevel&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="s"&gt;",&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;    &lt;span class="py"&gt;"-Declipse.product&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;org.eclipse.jdt.ls.core.product&lt;/span&gt;&lt;span class="s"&gt;",&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;    &lt;span class="py"&gt;"-Dlog.protocol&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="s"&gt;",&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;    &lt;span class="py"&gt;"-Dlog.level&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;NONE&lt;/span&gt;&lt;span class="s"&gt;",&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;    &lt;span class="s"&gt;"-noverify"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s"&gt;"-Xmx1G"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s"&gt;"-jar"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s"&gt;"D:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;dev&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;jdt-language-server-latest&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;plugins&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;org.eclipse.equinox.launcher_1.5.200.v20180922-1751.jar"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s"&gt;"-configuration"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s"&gt;"D:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;dev&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;jdt-language-server-latest&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;config_win"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s"&gt;"-data"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s"&gt;"C:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;Users&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;Administrator&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;.cache&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;javalsp"&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You need to replace &lt;code&gt;D:\dev\jdt-language-server-latest\plugins\org.eclipse.equinox.launcher_1.5.200.v20180922-1751.jar&lt;/code&gt; with the actual name of the org.eclipse.equinox.launcher jar&lt;/p&gt;

&lt;p&gt;The configuration flag can point to either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;config_win&lt;/code&gt;, for Windows&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;config_mac&lt;/code&gt;, for MacOS&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;config_linux&lt;/code&gt;, for Linux&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The data flag value should be the absolute path to the working directory of the server.&lt;br&gt;
This should be different from the path of the user's project files (which is sent during the initialize handshake).&lt;/p&gt;
&lt;h3&gt;
  
  
  Code completion
&lt;/h3&gt;

&lt;p&gt;javacomplete2 which has been included in &lt;code&gt;lang#java&lt;/code&gt; layer provides omnifunc for java file and deoplete source.&lt;br&gt;
with this plugin and &lt;code&gt;autocomplete&lt;/code&gt; layer, the completion popup menu will be opened automatically。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3oauhdiqlt0eyi1i9ng7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3oauhdiqlt0eyi1i9ng7.png" alt="code complete" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Code outline
&lt;/h3&gt;

&lt;p&gt;The default outline plugin is tagbar, and the key binding is &lt;code&gt;F2&lt;/code&gt;. This key binding will open an outline sidebar on the left.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe5jtgod3f5kkq86z6p3i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe5jtgod3f5kkq86z6p3i.png" alt="java outline" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To fuzzy find outline in current buffer, you need to enable a fuzzy find layer, for example denite layer,&lt;br&gt;
then press &lt;code&gt;Leader f o&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb98lakt94iepcno9qxll.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb98lakt94iepcno9qxll.gif" alt="java fuzzy outline" width="1303" height="653"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Rename symbol
&lt;/h3&gt;

&lt;p&gt;After enable lsp layer for java, you can use &lt;code&gt;SPC l e&lt;/code&gt; to rename symbol under the cursor:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feprdft5h96oersupl4gm.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feprdft5h96oersupl4gm.gif" alt="rename java symblo" width="1303" height="653"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Javadoc hovers
&lt;/h3&gt;

&lt;p&gt;The default key binding to get doc of cursor symbol is &lt;code&gt;SPC l d&lt;/code&gt; or &lt;code&gt;K&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fts7rjhfepzb023yte5xm.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fts7rjhfepzb023yte5xm.gif" alt="javadoc" width="1303" height="653"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Syntax lint
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;checkers&lt;/code&gt; layer provides asynchronous linting feature, this layer use &lt;a href="https://github.com/neomake/neomake" rel="noopener noreferrer"&gt;neomake&lt;/a&gt; by default.&lt;br&gt;
neomake support maven, gradle and eclipse project. it will generate classpath automatically for these project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fry41qek16wc8yu7s4y4w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fry41qek16wc8yu7s4y4w.png" alt="lint-java" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;within above picture, we can see the checkers layer provides following feature:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;list errors and warnings in quickfix windows&lt;/li&gt;
&lt;li&gt;sign error and warning position on the left side&lt;/li&gt;
&lt;li&gt;show numbers of errors and warnings on statusline&lt;/li&gt;
&lt;li&gt;show cursor error and warning information below current line&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Import packages
&lt;/h3&gt;

&lt;p&gt;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.&lt;br&gt;
Also, you can use key binding &lt;code&gt;&amp;lt;F4&amp;gt;&lt;/code&gt; to import the class at the cursor point. If there are more than one class, a menu will be shown below current windows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff20ru21jklio1gsvsb07.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff20ru21jklio1gsvsb07.png" alt="import class" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Jump to test file
&lt;/h3&gt;

&lt;p&gt;SpaceVim use vim-project to manager the files in a project, you can add a &lt;code&gt;.projections.json&lt;/code&gt; to the root of your project with following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"src/main/java/*.java"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"alternate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src/test/java/{dirname}/Test{basename}.java"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"src/test/java/**/Test*.java"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"alternate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src/main/java/{}.java"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with this configuration, you can jump between the source code and test file via command &lt;code&gt;:A&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxjzoo7wam8re2wmujbdz.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxjzoo7wam8re2wmujbdz.gif" alt="jump-test" width="1366" height="743"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  running code
&lt;/h3&gt;

&lt;p&gt;Base on JavaUnite, you can use &lt;code&gt;SPC l r c&lt;/code&gt; to run current function or use &lt;code&gt;SPC l r m&lt;/code&gt; to run the main function of current Class.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6vfw7ynz932ygl2q9j9j.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6vfw7ynz932ygl2q9j9j.gif" alt="run-main" width="1366" height="743"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Code formatting
&lt;/h3&gt;

&lt;p&gt;For formatting java code, you also nEed have &lt;a href="https://github.com/uncrustify/uncrustify" rel="noopener noreferrer"&gt;uncrustify&lt;/a&gt; or &lt;a href="http://astyle.sourceforge.net/" rel="noopener noreferrer"&gt;astyle&lt;/a&gt; in your PATH.&lt;br&gt;
BTW, the google's &lt;a href="https://github.com/google/google-java-format" rel="noopener noreferrer"&gt;java formatter&lt;/a&gt; also works well with neoformat.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7owgdhwwg48jufqjrxv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7owgdhwwg48jufqjrxv.gif" alt="format-java" width="1366" height="743"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  REPL
&lt;/h3&gt;

&lt;p&gt;you need to install jdk9 which provide a build-in tools &lt;code&gt;jshell&lt;/code&gt;, and SpaceVim use the &lt;code&gt;jshell&lt;/code&gt; as default inferior REPL process:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl1zsb6xgyaqlc279fysa.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl1zsb6xgyaqlc279fysa.gif" alt="REPl-JAVA" width="1366" height="743"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>vim</category>
      <category>spacevim</category>
    </item>
    <item>
      <title>Use Vim as a C/C++ IDE</title>
      <dc:creator>Eric Wong</dc:creator>
      <pubDate>Fri, 10 May 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/spacevim/use-vim-as-a-c-c-ide-525j</link>
      <guid>https://dev.to/spacevim/use-vim-as-a-c-c-ide-525j</guid>
      <description>&lt;h1&gt;
  
  
  Use Vim as a C/C++ IDE
&lt;/h1&gt;

&lt;p&gt;This is a general guide for using SpaceVim as a C/C++ IDE, including layer configuration and usage. Each of the following sections will be covered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable language layer&lt;/li&gt;
&lt;li&gt;code completion&lt;/li&gt;
&lt;li&gt;alternate file jumping&lt;/li&gt;
&lt;li&gt;code running&lt;/li&gt;
&lt;li&gt;code format&lt;/li&gt;
&lt;li&gt;REPL support
&amp;lt;!-- vim-markdown-toc --&amp;gt;
### Enable language layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To add C/C++ language support in SpaceVim, you need to enable the &lt;code&gt;lang#c&lt;/code&gt; layer. Press &lt;code&gt;SPC f v d&lt;/code&gt; to openSpaceVim configuration file, and add following configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[[layers]]
  name = "lang#c"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for more info, you can read the &lt;a href="https://spacevim.org/layers/lang/c/" rel="noopener noreferrer"&gt;lang#c&lt;/a&gt; layer documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  code completion
&lt;/h3&gt;

&lt;p&gt;By default the autocomplete layer has been enabled, so after loading &lt;code&gt;lang#c&lt;/code&gt; layer, the code completionfor C/C++ language should works well.&lt;/p&gt;

&lt;h3&gt;
  
  
  alternate file jumping
&lt;/h3&gt;

&lt;p&gt;To manage the alternate file for a project, you may need to create a &lt;code&gt;.project_alt.json&lt;/code&gt; file in the root of yourproject.&lt;/p&gt;

&lt;p&gt;for exmaple, add following content into the &lt;code&gt;.project_alt.json&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "*.c": {"alternate": "{}.h"},
  "*.h": {"alternate": "{}.c"}
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with this configuration, you can jump between the alternate file via command &lt;code&gt;:A&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  code running
&lt;/h3&gt;

&lt;p&gt;The default code running key binding is &lt;code&gt;SPC l r&lt;/code&gt;. It will compile and run current file asynchronously.And the stdout will be shown on a runner buffer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3f8bph4ti93jj1ztavwd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3f8bph4ti93jj1ztavwd.png" alt="c-cpp-runner" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  code format
&lt;/h3&gt;

&lt;p&gt;The format layer use neoformat as default tool to format code, it will format current file.And the default key binding is &lt;code&gt;SPC b f&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[[layers]]
  name = "format"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  REPL support
&lt;/h3&gt;

&lt;p&gt;Start a &lt;code&gt;igcc&lt;/code&gt; inferior REPL process with &lt;code&gt;SPC l s i&lt;/code&gt;. After the REPL process being started, you cansend code to inferior process, all key bindings prefix with &lt;code&gt;SPC l s&lt;/code&gt;, including sending line, sending selection or evensend whole buffer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fka0g6a10v118t57to306.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fka0g6a10v118t57to306.png" alt="c_repl" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vim</category>
      <category>spacevim</category>
      <category>c</category>
      <category>cpp</category>
    </item>
    <item>
      <title>Use Vim as a PHP IDE</title>
      <dc:creator>Eric Wong</dc:creator>
      <pubDate>Wed, 08 May 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/spacevim/use-vim-as-a-php-ide-1k7i</link>
      <guid>https://dev.to/spacevim/use-vim-as-a-php-ide-1k7i</guid>
      <description>&lt;h1&gt;
  
  
  Use Vim as a PHP IDE
&lt;/h1&gt;

&lt;p&gt;This is a general guide for using SpaceVim as a PHP IDE, including layer configuration and usage. Each of the following sections will be covered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable language layer&lt;/li&gt;
&lt;li&gt;Code completion&lt;/li&gt;
&lt;li&gt;Syntax linting&lt;/li&gt;
&lt;li&gt;Jump to test file&lt;/li&gt;
&lt;li&gt;running code&lt;/li&gt;
&lt;li&gt;Code formatting&lt;/li&gt;
&lt;li&gt;REPL support
&amp;lt;!-- vim-markdown-toc --&amp;gt;
### Enable language layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To add PHP language support in SpaceVim, you need to enable the &lt;code&gt;lang#php&lt;/code&gt; layer. Press &lt;code&gt;SPC f v d&lt;/code&gt; to openSpaceVim configuration file, and add the following snippet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[[layers]]
  name = "lang#php"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more info, you can read the &lt;a href="https://spacevim.org/layers/lang/php/" rel="noopener noreferrer"&gt;lang#php&lt;/a&gt; layer documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code completion
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;lang#php&lt;/code&gt; layer will load the PHP plugin automatically, unless it’s overriden in your &lt;code&gt;init.toml&lt;/code&gt;.The completion menu will be opened as you type.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqyhea4kc06mcrh92fn9k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqyhea4kc06mcrh92fn9k.png" alt="phpide" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Syntax linting
&lt;/h3&gt;

&lt;p&gt;The checkers layer is enabled by default. This layer provides asynchronous syntax linting via &lt;a href="https://github.com/neomake/neomake" rel="noopener noreferrer"&gt;neomake&lt;/a&gt;.It will run &lt;a href="https://github.com/vimeo/psalm" rel="noopener noreferrer"&gt;psalm&lt;/a&gt; asynchronously.&lt;/p&gt;

&lt;p&gt;To install psalm, you may need to run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require --dev vimeo/psalm

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Jump to test file
&lt;/h3&gt;

&lt;p&gt;To manage the alternate file for a project, you may need to create a &lt;code&gt;.project_alt.json&lt;/code&gt; file in the root of yourproject.&lt;/p&gt;

&lt;p&gt;for exmaple, add following content into the &lt;code&gt;.project_alt.json&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "src/*.php": {"alternate": "test/{}.php"},
  "test/*.php": {"alternate": "src/{}.php"}
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with this configuration, you can jump between the source code and test file via command &lt;code&gt;:A&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  running code
&lt;/h3&gt;

&lt;p&gt;To run current script, you can press &lt;code&gt;SPC l r&lt;/code&gt;, and a split windowwill be openen, the output of the script will be shown in this window.It is running asynchronously, and will not block your Vim.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjiyd2cjg2r6dhib7tqha.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjiyd2cjg2r6dhib7tqha.gif" alt="phpcoderunner" width="1315" height="655"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Code formatting
&lt;/h3&gt;

&lt;p&gt;The format layer is also enabled by default. With this layer you can use key binding &lt;code&gt;SPC b f&lt;/code&gt; to format current buffer.Before using this feature, please install php_beautifier:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pear install PHP_Beautifier

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  REPL support
&lt;/h3&gt;

&lt;p&gt;Start a &lt;code&gt;php -a&lt;/code&gt; inferior REPL process with &lt;code&gt;SPC l s i&lt;/code&gt;. After the REPL process being started, you cansend code to inferior process. All key bindings prefix with &lt;code&gt;SPC l s&lt;/code&gt;, including sending line, sending selection or evensend whole buffer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2n3lbw27qeahh75ilrz.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2n3lbw27qeahh75ilrz.gif" alt="phprepl" width="1315" height="655"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>vim</category>
      <category>spacevim</category>
    </item>
    <item>
      <title>Use Vim as a Ruby IDE</title>
      <dc:creator>Eric Wong</dc:creator>
      <pubDate>Mon, 18 Feb 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/spacevim/use-vim-as-a-ruby-ide-2og5</link>
      <guid>https://dev.to/spacevim/use-vim-as-a-ruby-ide-2og5</guid>
      <description>&lt;h1&gt;
  
  
  Use Vim as a Ruby IDE
&lt;/h1&gt;

&lt;p&gt;This is a general guide for using SpaceVim as a Ruby IDE, including layer configuration and usage.Each of the following sections will be covered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable language layer&lt;/li&gt;
&lt;li&gt;Code completion&lt;/li&gt;
&lt;li&gt;Syntax linting&lt;/li&gt;
&lt;li&gt;Jump to test file&lt;/li&gt;
&lt;li&gt;running code&lt;/li&gt;
&lt;li&gt;Code formatting&lt;/li&gt;
&lt;li&gt;REPL support
&amp;lt;!-- vim-markdown-toc --&amp;gt;
### Enable language layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To add Ruby language support in SpaceVim, you need to enable the &lt;code&gt;lang#ruby&lt;/code&gt; layer. Press &lt;code&gt;SPC f v d&lt;/code&gt; to openSpaceVim configuration file, and add the following snippet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[[layers]]
  name = "lang#ruby"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more info, you can read the &lt;a href="https://spacevim.org/layers/lang/ruby/" rel="noopener noreferrer"&gt;lang#ruby&lt;/a&gt; layer documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code completion
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;lang#ruby&lt;/code&gt; layer will load the Ruby plugin automatically, unless it’s overriden in your &lt;code&gt;init.toml&lt;/code&gt;.The completion menu will be opened as you type.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwn9p9h1961n3lkct9kdr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwn9p9h1961n3lkct9kdr.png" alt="rubycomplete" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Syntax linting
&lt;/h3&gt;

&lt;p&gt;The checkers layer is enabled by default. This layer provides asynchronous syntax linting via &lt;a href="https://github.com/neomake/neomake" rel="noopener noreferrer"&gt;neomake&lt;/a&gt;.It will run rubocop asynchronously.&lt;/p&gt;

&lt;p&gt;Install rubocop via gem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gem install rubocop

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx34p4j3hc1489s997r30.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx34p4j3hc1489s997r30.png" alt="rubylint" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Jump to test file
&lt;/h3&gt;

&lt;p&gt;SpaceVim use built-in plugin to manager the files in a project, you can add a &lt;code&gt;.project_alt.json&lt;/code&gt; to the root of your project with the following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "src/*.rb": {"alternate": "test/{}.rb"},
  "test/*.rb": {"alternate": "src/{}.rb"}
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this configuration, you can jump between the source code and test file via command &lt;code&gt;:A&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  running code
&lt;/h3&gt;

&lt;p&gt;To run current script, you can press &lt;code&gt;SPC l r&lt;/code&gt;, and a split windowwill be openen, the output of the script will be shown in this window.It is running asynchronously, and will not block your Vim.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwce8naxuq1kz2vm8qzpd.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwce8naxuq1kz2vm8qzpd.gif" alt="rubyrunner" width="1303" height="653"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Code formatting
&lt;/h3&gt;

&lt;p&gt;The format layer is also enabled by default. With this layer you can use key binding &lt;code&gt;SPC b f&lt;/code&gt; to format current buffer.Before using this feature, please install rufo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gem install rufo

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8r7y5t6opjoecmj805af.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8r7y5t6opjoecmj805af.gif" alt="formatruby" width="1303" height="653"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  REPL support
&lt;/h3&gt;

&lt;p&gt;Start a &lt;code&gt;irb&lt;/code&gt; inferior REPL process with &lt;code&gt;SPC l s i&lt;/code&gt;. After the REPL process being started, you cansend code to inferior process. All key bindings prefix with &lt;code&gt;SPC l s&lt;/code&gt;, including sending line, sending selection or evensend whole buffer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu92ygjsu0i5opt671qnv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu92ygjsu0i5opt671qnv.gif" alt="rubyrepl" width="1303" height="653"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>vim</category>
      <category>spacevim</category>
    </item>
    <item>
      <title>Use Vim as a Perl IDE</title>
      <dc:creator>Eric Wong</dc:creator>
      <pubDate>Tue, 12 Feb 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/spacevim/use-vim-as-a-perl-ide-23ph</link>
      <guid>https://dev.to/spacevim/use-vim-as-a-perl-ide-23ph</guid>
      <description>&lt;h1&gt;
  
  
  Use Vim as a Perl IDE
&lt;/h1&gt;

&lt;p&gt;This is a general guide for using SpaceVim as a perl IDE, including layer configuration and usage. Each of the following sections will be covered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable language layer&lt;/li&gt;
&lt;li&gt;Code completion&lt;/li&gt;
&lt;li&gt;Syntax linting&lt;/li&gt;
&lt;li&gt;Jump to test file&lt;/li&gt;
&lt;li&gt;running code&lt;/li&gt;
&lt;li&gt;Code formatting&lt;/li&gt;
&lt;li&gt;REPL support
&amp;lt;!-- vim-markdown-toc --&amp;gt;
### Enable language layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To add perl language support in SpaceVim, you need to enable the &lt;code&gt;lang#perl&lt;/code&gt; layer. Press &lt;code&gt;SPC f v d&lt;/code&gt; to openSpaceVim configuration file, and add following configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[[layers]]
  name = "lang#perl"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for more info, you can read the &lt;a href="https://spacevim.org/layers/lang/perl/" rel="noopener noreferrer"&gt;lang#perl&lt;/a&gt; layer documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code completion
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;lang#perl&lt;/code&gt; layer will load the perl plugin automatically, unless overriden in your &lt;code&gt;init.toml&lt;/code&gt;.The completion menu will be opened as you type.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa644fbmaf2sqzl0r8sxb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa644fbmaf2sqzl0r8sxb.png" alt="perlcomplete" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Syntax linting
&lt;/h3&gt;

&lt;p&gt;The checkers layer is enabled by default. This layer provides asynchronous syntax linting via &lt;a href="https://github.com/neomake/neomake" rel="noopener noreferrer"&gt;neomake&lt;/a&gt;.It will run perl and perlcritic asynchronously.&lt;/p&gt;

&lt;p&gt;Install perlcritic via cpan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cpanm Perl::Critic

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6hrjqasexwdttsjn357r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6hrjqasexwdttsjn357r.png" alt="perllint" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Jump to test file
&lt;/h3&gt;

&lt;p&gt;SpaceVim use built-in plugin to manager the files in a project, you can add a &lt;code&gt;.project_alt.json&lt;/code&gt; to the root of your project with following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "src/*.pl": {"alternate": "test/{}.pl"},
  "test/*.pl": {"alternate": "src/{}.pl"}
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with this configuration, you can jump between the source code and test file via command &lt;code&gt;:A&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  running code
&lt;/h3&gt;

&lt;p&gt;To run current script, you can press &lt;code&gt;SPC l r&lt;/code&gt;, and a split windowswill be openen, the output of the script will be shown in this windows.It is running asynchronously, and will not block your vim.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmeib8loyuntbaefnwmcl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmeib8loyuntbaefnwmcl.png" alt="perlrunner" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Code formatting
&lt;/h3&gt;

&lt;p&gt;The format layer is also enabled by default, with this layer you can use key binding &lt;code&gt;SPC b f&lt;/code&gt; to format current buffer.Before using this feature, please install perltidy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cpanm Perl::Tidy

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  REPL support
&lt;/h3&gt;

&lt;p&gt;Start a &lt;code&gt;perli&lt;/code&gt; or &lt;code&gt;perl -del&lt;/code&gt; inferior REPL process with &lt;code&gt;SPC l s i&lt;/code&gt;. After the REPL process has been started. you can send code to inferior process, all key bindings are begin with &lt;code&gt;SPC l s&lt;/code&gt; prefix, including sending line, sending selection or evensend whole buffer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqgscql9r8rwjjyg7v7g4.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqgscql9r8rwjjyg7v7g4.gif" alt="perlrepl" width="1303" height="653"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Use Vim as a CoffeeScript IDE</title>
      <dc:creator>Eric Wong</dc:creator>
      <pubDate>Mon, 28 Jan 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/spacevim/use-vim-as-a-coffeescript-ide-4afl</link>
      <guid>https://dev.to/spacevim/use-vim-as-a-coffeescript-ide-4afl</guid>
      <description>&lt;h1&gt;
  
  
  &lt;a href="//../blog/"&gt;Blogs&lt;/a&gt; » Use Vim as a CoffeeScript IDE
&lt;/h1&gt;

&lt;p&gt;This is a general guide for using SpaceVim as a &lt;a href="https://coffeescript.org/" rel="noopener noreferrer"&gt;CoffeeScript&lt;/a&gt; IDE, including layer configuration and usage. Each of the following sections will be covered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable language layer&lt;/li&gt;
&lt;li&gt;Code completion&lt;/li&gt;
&lt;li&gt;Syntax linting&lt;/li&gt;
&lt;li&gt;Jump to test file&lt;/li&gt;
&lt;li&gt;running code&lt;/li&gt;
&lt;li&gt;Code formatting
&amp;lt;!-- vim-markdown-toc --&amp;gt;
### Enable language layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By default &lt;code&gt;lang#coffeescript&lt;/code&gt; layer is not loaded. To add CoffeeScript language support in SpaceVim,you need to enable the &lt;code&gt;lang#coffeescript&lt;/code&gt; layer. Press &lt;code&gt;SPC f v d&lt;/code&gt; to openSpaceVim configuration file, and add following configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[[layers]]
  name = "lang#coffeescript"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for more info, you can read the &lt;a href="//../layers/lang/coffeescript/"&gt;lang#coffeescript&lt;/a&gt; layer documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code completion
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;lang#coffeescript&lt;/code&gt; layer will load the vim-coffeescript plugin automatically, unless overriden in your &lt;code&gt;init.toml&lt;/code&gt;.The completion menu will be opened as you type.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj57prd4nhtaw2be7seot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj57prd4nhtaw2be7seot.png" alt="coffeeide" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Syntax linting
&lt;/h3&gt;

&lt;p&gt;The checkers layer is enabled by default. This layer provides asynchronous syntax linting via &lt;a href="https://github.com/neomake/neomake" rel="noopener noreferrer"&gt;neomake&lt;/a&gt;.It will run &lt;a href="https://github.com/clutchski/coffeelint" rel="noopener noreferrer"&gt;coffeelint&lt;/a&gt; asynchronously.&lt;/p&gt;

&lt;p&gt;The coffeelint is command line lint for coffeescript, currently is maintained by &lt;a href="https://github.com/swang" rel="noopener noreferrer"&gt;Shuan Wang&lt;/a&gt;.To install coffeelint, just run following command in terminal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g coffeelint

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: if no coffeelint is installed, neomake will ues default command &lt;code&gt;coffee&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F03sye1u5uyfzbm6sw23i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F03sye1u5uyfzbm6sw23i.png" alt="coffeecheckers" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Jump to test file
&lt;/h3&gt;

&lt;p&gt;SpaceVim use built-in plugin to manager the files in a project,you can add a &lt;code&gt;.project_alt.json&lt;/code&gt; to the root of your project with following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "src/*.coffee": {"alternate": "test/{}.coffee"},
  "test/*.coffee": {"alternate": "src/{}.coffee"}
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with this configuration, you can jump between the source code and test file via command &lt;code&gt;:A&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  running code
&lt;/h3&gt;

&lt;p&gt;To run current script, you can press &lt;code&gt;SPC l r&lt;/code&gt;, and a split windowswill be openen, the output of the script will be shown in this windows.It is running asynchronously, and will not block your vim.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxnc0960p293u3cd0dzsf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxnc0960p293u3cd0dzsf.png" alt="coffeerunner" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Code formatting
&lt;/h3&gt;

&lt;p&gt;The format layer is also enabled by default, with this layer you can use key binding &lt;code&gt;SPC b f&lt;/code&gt; to format current buffer.Before using this feature, please install coffee-fmt.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g coffee-fmt

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Use Vim as a Python IDE</title>
      <dc:creator>Eric Wong</dc:creator>
      <pubDate>Thu, 27 Sep 2018 00:00:00 +0000</pubDate>
      <link>https://dev.to/spacevim/use-vim-as-a-python-ide-59n3</link>
      <guid>https://dev.to/spacevim/use-vim-as-a-python-ide-59n3</guid>
      <description>&lt;h1&gt;
  
  
  Use Vim as a Python IDE
&lt;/h1&gt;

&lt;p&gt;This is a general guide for using SpaceVim as a python IDE, including layer configuration and usage. Each of the following sections will be covered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable language layer&lt;/li&gt;
&lt;li&gt;Code completion&lt;/li&gt;
&lt;li&gt;Syntax lint&lt;/li&gt;
&lt;li&gt;Import packages&lt;/li&gt;
&lt;li&gt;Jump to test file&lt;/li&gt;
&lt;li&gt;running code&lt;/li&gt;
&lt;li&gt;Code formatting&lt;/li&gt;
&lt;li&gt;REPL&lt;/li&gt;
&lt;li&gt;Debug
&amp;lt;!-- vim-markdown-toc --&amp;gt;
### Enable language layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To add python language support in SpaceVim, you need to enable &lt;code&gt;lang#python&lt;/code&gt; layer. Just press &lt;code&gt;SPC f v d&lt;/code&gt; to openSpaceVim configuration file, and add following configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[[layers]]
  name = "lang#python"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for more info, you can read the &lt;a href="https://spacevim.org/layers/lang/python/" rel="noopener noreferrer"&gt;lang#python&lt;/a&gt; layer documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code completion
&lt;/h3&gt;

&lt;p&gt;Base on which completion engine is used, &lt;code&gt;lang#python&lt;/code&gt; layer load the jedi plugin automatically.The completion menu will be opened as you type.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3qaulsq23y3dx9f7jv0s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3qaulsq23y3dx9f7jv0s.png" alt="complete python code" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Syntax lint
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://github.com/neomake/neomake" rel="noopener noreferrer"&gt;neomake&lt;/a&gt; - Asynchronous linting and make framework for Neovim/Vim&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I am maintainer of javac maker in neomake, the javac maker support maven project, gradle project or eclipse project.also you can set the classpath.&lt;/p&gt;

&lt;h3&gt;
  
  
  Import packages
&lt;/h3&gt;

&lt;p&gt;When edit python file, you can import the package automatically, remove unused package and format package list.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install --user isort

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Jump to test file
&lt;/h3&gt;

&lt;p&gt;SpaceVim use vim-project to manager the files in a project, you can add a &lt;code&gt;.projections.json&lt;/code&gt; to the root of your project with following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "src/*.py": {"alternate": "test/{dirname}/{basename}Test.py"},
  "test/**/Test*.py": {"alternate": "src/{}.py"}
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with this configuration, you can jump between the source code and test file via command &lt;code&gt;:A&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  running code
&lt;/h3&gt;

&lt;p&gt;To run current script, you can press &lt;code&gt;SPC l r&lt;/code&gt;, and a split windowswill be openen, the output of the script will be shown in this windows.It is running asynchronously, and will not block your vim.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fouxkn3hdb5vyfbq1e1ph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fouxkn3hdb5vyfbq1e1ph.png" alt="code runner" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Code formatting
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://github.com/sbdchd/neoformat" rel="noopener noreferrer"&gt;neoformat&lt;/a&gt; - A (Neo)vim plugin for formatting code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For formatting java code, you also nEed have &lt;a href="http://astyle.sourceforge.net/" rel="noopener noreferrer"&gt;uncrustify&lt;/a&gt; or &lt;a href="http://astyle.sourceforge.net/" rel="noopener noreferrer"&gt;astyle&lt;/a&gt; in your PATH.BTW, the google’s &lt;a href="https://github.com/google/google-java-format" rel="noopener noreferrer"&gt;java formatter&lt;/a&gt; also works well with neoformat.&lt;/p&gt;

&lt;h3&gt;
  
  
  REPL
&lt;/h3&gt;

&lt;p&gt;you need to install jdk9 which provide a build-in tools &lt;code&gt;jshell&lt;/code&gt;, and SpaceVim use the &lt;code&gt;jshell&lt;/code&gt; as default inferior REPL process:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl1zsb6xgyaqlc279fysa.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl1zsb6xgyaqlc279fysa.gif" alt="REPl-JAVA" width="1366" height="743"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Debug
&lt;/h3&gt;

</description>
      <category>python</category>
      <category>vim</category>
      <category>spacevim</category>
    </item>
    <item>
      <title>Grep on the fly in SpaceVim</title>
      <dc:creator>Eric Wong</dc:creator>
      <pubDate>Tue, 23 Jan 2018 00:00:00 +0000</pubDate>
      <link>https://dev.to/spacevim/grep-on-the-fly-in-spacevim-5aep</link>
      <guid>https://dev.to/spacevim/grep-on-the-fly-in-spacevim-5aep</guid>
      <description>&lt;h1&gt;
  
  
  Asynchronous grep on the fly
&lt;/h1&gt;

&lt;p&gt;FlyGrep means &lt;strong&gt;grep on the fly&lt;/strong&gt; , it will update the result as you type. Of course, it is runningasynchronously. Before using this feature, you need to install a searching tool. FlyGrep worksthrough search tools: &lt;code&gt;ag&lt;/code&gt;, &lt;code&gt;rg&lt;/code&gt;, &lt;code&gt;ack&lt;/code&gt;, &lt;code&gt;pt&lt;/code&gt; and &lt;code&gt;grep&lt;/code&gt;, Choose one you like.&lt;/p&gt;

&lt;p&gt;This ia a built-in plugin in SpaceVim, and we also separated a plugin : &lt;a href="https://github.com/wsdjeg/FlyGrep.vim" rel="noopener noreferrer"&gt;FlyGrep.vim&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Search in a project&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In SpaceVim, you can use &lt;code&gt;SPC s p&lt;/code&gt; or &lt;code&gt;SPC s /&lt;/code&gt; to search in the current project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn7p0v624wpc9xcnmsjhb.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn7p0v624wpc9xcnmsjhb.gif" alt="searching project" width="1366" height="743"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Search in current file&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can use &lt;code&gt;SPC s s&lt;/code&gt; to search in the current file. To search word under the cursor, you can press &lt;code&gt;SPC s S&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2v8snplrkxm8t9wkjxrk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2v8snplrkxm8t9wkjxrk.gif" alt="searching current file" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Search in all loaded buffers&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To searching in all loaded buffers, you need to press &lt;code&gt;SPC s b&lt;/code&gt;, and you can also use &lt;code&gt;SPC s B&lt;/code&gt; to search word under the point.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fatkq7lukh3kgap9iazm5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fatkq7lukh3kgap9iazm5.gif" alt="searching-loaded-buffer" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Search in an arbitrary directory&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to searching in a different directory instead of current directory, you canuse &lt;code&gt;SPC s f&lt;/code&gt;. Then insert the path of the arbitrary directory.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Search in a project in the background&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you need background searching, you can press &lt;code&gt;SPC s j&lt;/code&gt;, after searching is done, the index will be displayed on statusline. you can use &lt;code&gt;SPC s l&lt;/code&gt; to list all the search results.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key bindings
&lt;/h2&gt;

&lt;p&gt;The search commands in SpaceVim are organized under the &lt;code&gt;SPC s&lt;/code&gt; prefix with the next key is the tool to use and the last key is the scope. For instance &lt;code&gt;SPC s a b&lt;/code&gt; will search in all opened buffers using &lt;code&gt;ag&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If the last key (determining the scope) is uppercase then the current word under the cursor is used as default input for the search. For instance &lt;code&gt;SPC s a B&lt;/code&gt; will search with word under cursor.&lt;/p&gt;

&lt;p&gt;If the tool key is omitted then a default tool will be automatically selected for the search. This tool corresponds to the first tool found on the system of the list &lt;code&gt;g:spacevim_search_tools&lt;/code&gt;, the default calling sequence is &lt;code&gt;rg&lt;/code&gt;, &lt;code&gt;ag&lt;/code&gt;, &lt;code&gt;pt&lt;/code&gt;, &lt;code&gt;ack&lt;/code&gt; then &lt;code&gt;grep&lt;/code&gt;. For instance &lt;code&gt;SPC s b&lt;/code&gt; will search in the opened buffers using &lt;code&gt;pt&lt;/code&gt; if &lt;code&gt;rg&lt;/code&gt; and &lt;code&gt;ag&lt;/code&gt; have not been found on the system.&lt;/p&gt;

&lt;p&gt;The tool keys are:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ag&lt;/td&gt;
&lt;td&gt;a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;grep&lt;/td&gt;
&lt;td&gt;g&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ack&lt;/td&gt;
&lt;td&gt;k&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rg&lt;/td&gt;
&lt;td&gt;r&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pt&lt;/td&gt;
&lt;td&gt;t&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The available scopes and corresponding keys are:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;opened buffers&lt;/td&gt;
&lt;td&gt;b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;files in a given directory&lt;/td&gt;
&lt;td&gt;f&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;current project&lt;/td&gt;
&lt;td&gt;p&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Within FlyGrep buffer:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key Binding&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;Esc&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;close FlyGrep buffer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;Enter&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;open file at the cursor line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;Tab&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;move cursor line down&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;C-j&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;move cursor line down&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;S-Tab&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;move cursor line up&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;C-k&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;move cursor line up&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;Bs&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;remove last character&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;C-w&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;remove the word before the cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;C-u&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;remove the line before the cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;C-k&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;remove the line after the cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;&amp;lt;C-a&amp;gt;&lt;/code&gt;/&lt;code&gt;&amp;lt;Home&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Go to the beginning of the line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;&amp;lt;C-e&amp;gt;&lt;/code&gt;/&lt;code&gt;&amp;lt;End&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Go to the end of the line&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
    </item>
  </channel>
</rss>
