Skip to content
Auguste Rame edited this page Sep 23, 2023 · 30 revisions

Visual Studio Code

Using ZLS in Visual Studio Code is as simple as installing the official Zig Language extension (open in VSCode).

Sublime Text

Sublime Text 3

{
    "clients": {
        "zig": {
            "command": ["zls"],
            "enabled": true,
            "languageId": "zig",
            "scopes": ["source.zig"],
            "syntaxes": ["Packages/Zig Language/Syntaxes/Zig.tmLanguage"]
        }
    }
}

Sublime Text 4

{
    "clients": {
        "zig": {
            "command": ["zls"],
            "enabled": true,
            "selector": "source.zig"
        }
    }
}

Neovim / Vim8

CoC

With Extension

Run :CocInstall coc-zls to install coc-zls. This extension supports the same functionality as the VS Code extension.

Manually

{
    "languageserver": {
        "zls" : {
            "command": "command_or_path_to_zls",
            "filetypes": ["zig"]
        }
    }
}

YouCompleteMe

  • Install YouCompleteMe from here.
  • Add these lines to your vimrc:
"ensure zig is a recognized filetype
autocmd BufNewFile,BufRead *.zig set filetype=zig
let g:ycm_language_server =
    \\ [
    \\{
    \\     'name': 'zls',
    \\     'filetypes': [ 'zig' ],
    \\     'cmdline': [ '/path/to/zls_executable' ]
    \\    }
    \\ ]

nvim-lspconfig

Requires Nvim 0.5 (HEAD)!

  • Install nvim-lspconfig from here.
  • Install zig.vim from here.

nvim-lspconfig already ships a configuration for zls. A simple init.vim might look like this:

call plug#begin('~/.config/nvim/plugged')
Plug 'neovim/nvim-lspconfig'
Plug 'nvim-lua/completion-nvim'
Plug 'ziglang/zig.vim'
call plug#end()
:lua << EOF
    local lspconfig = require('lspconfig')
    local on_attach = function(_, bufnr)
        vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
        require('completion').on_attach()
    end
    local servers = {'zls'}
    for _, lsp in ipairs(servers) do
        lspconfig[lsp].setup {
            on_attach = on_attach,
        }
    end
EOF
" Set completeopt to have a better completion experience
set completeopt=menuone,noinsert,noselect
" Enable completions as you type
let g:completion_enable_auto_popup = 1

LanguageClient-neovim

  • Install the LanguageClient-neovim from here.
  • Edit your neovim configuration and add zls for zig filetypes:
let g:LanguageClient_serverCommands = {
        \\ 'zig': ['~/code/zls/zig-out/bin/zls'],
        \\ }

Kate

  • Install language support for Zig from here.
  • Enable LSP client plugin in Kate settings.
  • Add this snippet to LSP client's user settings (e.g. /$HOME/.config/kate/lspclient) (or paste it in LSP client's GUI settings)
{
    "servers": {
        "zig": {
            "command": ["zls"],
            "url": "https://github.com/zigtools/zls",
            "highlightingModeRegex": "^Zig$"
        }
    }
}

Emacs

;; Setup lsp-mode as desired.
;; See https://emacs-lsp.github.io/lsp-mode/page/installation/ for more information.
(require 'lsp-mode)
;; Either place zls in your PATH or add the following:
(setq lsp-zig-zls-executable "<path to zls>")

Doom Emacs

  • Enable :tool lsp module.
  • Enable :lang (zig +lsp) module.
  • Run doom sync in a terminal.

Spacemacs

  • Add lsp and zig to dotspacemacs-configuration-layers in your .spacemacs file.
  • If you don't have zls in your PATH, add the following to dotspacemacs/user-config in your .spacemacs file:
(setq lsp-zig-zls-executable "<path to zls>")

Helix

  • Just add zls to your PATH.
  • run hx --health to check if helix found zls.

Prebuilt Binaries

Latest

Note We currently recommend using the latest binaries as Zig and ZLS are fast-evolving.

x86-64 AArch64 x86
Linux x86-64 Linux AArch64 Linux x86 Linux
Windows x86-64 Windows - x86 Windows
MacOS x86-64 Macos AArch64 MacOS -

Release

Head to the Releases tab and select the right executable in the Assets section at the bottom of the latest release.

To untar the release artifact, simply install zstd with your package manager of choice or other means, and then:

tar --use-compress-program unzstd -x --strip-components=1 -f [archive] [output_path]

From Source

See this section in the README.

Clone this wiki locally