Skip to content

Using Herb with Vim

Configure the Herb Language Server with traditional Vim for HTML+ERB development.

Herb with Vim

Installation

Manual Configuration

First, install the Herb Language Server globally:

bash
npm install -g @herb-tools/language-server
bash
yarn global add @herb-tools/language-server
bash
pnpm add -g @herb-tools/language-server
bash
bun add -g @herb-tools/language-server

Then configure Vim to use the language server. You'll need an LSP client plugin like:

Example with vim-lsp

Add to your .vimrc:

vim
if executable('herb-language-server')
  au User lsp_setup call lsp#register_server({
    \ 'name': 'herb-ls',
    \ 'cmd': {server_info->['herb-language-server', '--stdio']},
    \ 'allowlist': ['eruby', 'erb'],
    \ })
endif

Example with coc.nvim

Add to your coc-settings.json:

json
{
  "languageserver": {
    "herb": {
      "command": "herb-language-server",
      "args": ["--stdio"],
      "filetypes": ["eruby", "erb"],
      "rootPatterns": [".git", "Gemfile"]
    }
  }
}

Example with ALE

Add to your .vimrc to register the Herb Language Server with ALE:

vim
let g:ale_linters = {
\   'eruby': ['herb'],
\   'erb': ['herb'],
\}

" Define the herb linter
call ale#linter#Define('eruby', {
\   'name': 'herb',
\   'lsp': 'stdio',
\   'executable': 'herb-language-server',
\   'command': '%e --stdio',
\   'project_root': function('ale#ruby#FindProjectRoot'),
\   'language': 'eruby',
\})

" Also define for erb filetype
call ale#linter#Define('erb', {
\   'name': 'herb',
\   'lsp': 'stdio',
\   'executable': 'herb-language-server',
\   'command': '%e --stdio',
\   'project_root': function('ale#ruby#FindProjectRoot'),
\   'language': 'eruby',
\})

Alternatively, for a simpler setup, you can use ALE's generic LSP support:

vim
let g:ale_linters = {
\   'eruby': ['ale_lsp'],
\   'erb': ['ale_lsp'],
\}

augroup AleHerbLSP
  autocmd!
  autocmd User ALEWantResults call ale#lsp#RegisterLSP('eruby', {
  \   'name': 'herb-language-server',
  \   'executable': 'herb-language-server',
  \   'command': '%e --stdio',
  \   'project_root': {buffer -> ale#path#FindNearestDirectory(buffer, '.git')},
  \})
augroup END

Troubleshooting

Ensure the language server is in your PATH:

bash
which herb-language-server

Check your LSP client's documentation for debugging commands.

Other editors

If you are looking to use Herb in another editor, check out the instructions on the editor integrations page.

Released under the MIT License.