Skip to content
Gin edited this page Aug 21, 2024 · 19 revisions

Dart - Dart Analysis Server

The Dart and Flutter SDK ships with an analysis server with a --lsp flag. Install the vim-lsc-dart plugin to configure this client automatically.

C/C++

Using clangd

clangd comes with the clang package on most Linux distributions. On macOS you need to install the llvm package from Homebrew and look in /usr/local/opt/llvm/bin for the clangd binary.

vimrc:

let g:lsc_server_commands = {
    \ 'cpp': {
        \ 'command': 'clangd --background-index',
        \ 'suppress_stderr': v:true
    \},
    \ 'c': {
        \ 'command': 'clangd --background-index',
        \ 'suppress_stderr': v:true
    \},
\}

Python

  • bash setup
pip install 'python-language-server[all]'
  • vimrc
let g:lsc_server_commands = { 'python' : 'pylsp'}

Elixir - JakeBecker/ElixirLS

First, clone ElixirLS into a directory of your choosing:

git clone https://github.com/JakeBecker/elixir-ls.git

Then run:

mix compile; mix elixir_ls.release -o <output_directory>

Make sure <output_directory>/language_server.sh is executable.

Add the following to your .bash_profile:

  • bash_profile
function elixir-language-server() {
  (<output_directory>/language_server.sh $*)
}
  • vimrc
let g:lsc_server_commands = {
  \ 'elixir': 'elixir-language-server'
  \ }

Scala

You can find instructions on how to bootstrap Metals for vim-lsc here on the Metals website

You'll want to make sure that you correctly have the --java-opt -Dmetals.client=vim-lsc set correctly to vim-lsc. Then you can include the following in your .vimrc.

let g:lsc_server_commands = {
  \ 'scala': 'metals-vim'
  \ }

JavaScript

typescript-language-server

npm install -g typescript typescript-language-server
  • vimrc
let g:lsc_server_commands = {
  \ 'javascript': 'typescript-language-server --stdio'
  \ }

javascript-typescript-langserver

npm install -g javascript-typescript-langserver
  • vimrc
let g:lsc_server_commands = {
  \ 'javascript': 'javascript-typescript-stdio'
  \ }

PHP

npm install -g intelephense
  • vimrc
let g:lsc_server_commands = {
  \ 'php': {
  \    'command': 'intelephense --stdio',
  \    'message_hooks': {
  \        'initialize': {
  \            'initializationOptions': {'storagePath': '/tmp/intelephense'},
  \        },
  \    },
  \  },
  \}

HTML

npm install -g vscode-html-languageserver-bin
  • vimrc
let g:lsc_server_commands = {
  \ 'html': 'html-languageserver --stdio'
  \ }

CSS

npm install -g vscode-css-languageserver-bin
  • vimrc
let g:lsc_server_commands = {
  \ 'css': 'css-languageserver --stdio'
  \ }

Golang - gopls

Set $GOPATH and ensure $PATH includes $GOPATH/bin

go get golang.org/x/tools/gopls@latest

Please use the official gopls settings found here

Vim

npm install -g vim-language-server
let g:lsc_server_commands = {
  \ 'vim' : {
  \   'name': 'vim-language-server',
  \   'command': 'vim-language-server --stdio',
  \      'message_hooks': {
  \          'initialize': {
  \              'initializationOptions': { 'vimruntime': $VIMRUNTIME, 'runtimepath': &rtp },
  \          },
  \      },
  \   },
  \}

Other

If all you want is linting you can use efm-languageserver. efm-languageserver is a general purpose languageserver used like vim's compiler plugins and errorformat settings. For more information consult their documentation here

Set $GOPATH and ensure $PATH includes $GOPATH/bin

go get github.com/mattn/efm-langserver
let g:lsc_server_commands = {
  \ 'mail' : {
  \   'name': 'efm-langserver',
  \   'command': 'efm-langserver -c=path/to/config.yaml',
  \   'suppress_stderr': v:true,
  \  },
  \}

Bash/sh

npm install -g bash-language-server
  • vimrc
let g:lsc_server_commands = {
  \ 'sh': 'bash-language-server start'
  \ }

Java

#/usr/bin/env sh

JDTLS=<path-to-jdt.ls-folder>

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=ALL \
     -noverify \
     -Xmx1G \
     -jar $JDTLS/org.eclipse.jdt.ls.product/target/repository/plugins/org.eclipse.equinox.launcher_<version>.jar \
     -configuration $JDTLS/org.eclipse.jdt.ls.product/target/repository/config_linux \
     --add-modules=ALL-SYSTEM \
     --add-opens java.base/java.util=ALL-UNNAMED \
     --add-opens java.base/java.lang=ALL-UNNAMED \
     "$@"
  • vimrc
let g:lsc_server_commands = {
  \ 'java': 'jdt_language_server -data ' . getcwd()
  \ }

Rust

Install the rust-analyzer either through binary installation or with rustup as mentioned in the docs. Here is the simpler binary installation for linux:

curl -L https://github.com/rust-analyzer/rust-analyzer/releases/latest/download/rust-analyzer-linux -o ~/.local/bin/rust-analyzer
chmod +x ~/.local/bin/rust-analyzer

If using this method, ensure ~/.local/bin is listed in the $PATH variable.

For other platforms, download the latest release binary and make similar changes.

  • vimrc
let g:lsc_server_commands = {
  \  "rust": "rust-analyzer",
  \ }

Clojure

sudo bash < <(curl -s https://raw.githubusercontent.com/clojure-lsp/clojure-lsp/master/install)
  • vimrc
let g:lsc_server_commands = {
  \ 'clojure': 'clojure-lsp',
  \ }