bash-language-server - LSP-based Bash language server

Bash Language Server

Bash language server implementation based on Tree Sitter and its grammar for Bash with explainshell integration.


  • Jump to declaration
  • Find references
  • Code Outline & Show Symbols
  • Highlight occurrences
  • Code completion
  • Simple diagnostics reporting
  • Documentation for flags on hover
  • Workspace symbols
  • Rename symbol


npm i -g bash-language-server

If you encounter installation errors, ensure you have node version 8 or newer (node --version).


The following editors and IDEs have available clients:


For Vim 8 or later install the plugin prabirshrestha/vim-lsp and add the following configuration to .vimrc:

if executable('bash-language-server')
  au User lsp_setup call lsp#register_server({
        \ 'name': 'bash-language-server',
        \ 'cmd': {server_info->[&shell, &shellcmdflag, 'bash-language-server start']},
        \ 'allowlist': ['sh'],
        \ })

For Vim 8 or Neovim using neoclide/coc.nvim, according to it's Wiki article, add the following to your coc-settings.json:

  "languageserver": {
    "bash": {
      "command": "bash-language-server",
      "args": ["start"],
      "filetypes": ["sh"],
      "ignoredRootPaths": ["~"]

For Vim 8 or NeoVim using dense-analysis/ale add the following configuration to your .vimrc:

let g:ale_linters = {
    \ 'sh': ['language_server'],
    \ }


For NeoVim using autozimu/LanguageClient-neovim, add the following configuration to init.vim:

let g:LanguageClient_serverCommands = {
    \ 'sh': ['bash-language-server', 'start']
    \ }

For NeoVim v0.5(nightly) using its built-in lsp, install neovim/nvim-lspconfig and add the following configuration to either your init.vim or init.lua


lua require'lspconfig'.bashls.setup{}




For Vim8/NeoVim v0.5 using jayli/vim-easycomplete. Execute :InstallLspServer sh and config nothing. Maybe it's the easiest way to use bash-language-server in vim/nvim.


On the config file (File -> Preferences -> Edit Oni config) add the following configuration:

"language.bash.languageServer.command": "bash-language-server",
"language.bash.languageServer.arguments": ["start"],


Lsp-mode has a built-in client, can be installed by use-package. Add the configuration to your .emacs.d/init.el

(use-package lsp-mode
  :commands lsp
  (sh-mode . lsp))

Development Guide

Please see docs/development-guide for more information.

Download Source Code

Download ZIP
Apr 19, 2022