nvim-lspconfig - KolMitE

nvim-lspconfig

nvim-lspconfig

noviembre 29, 2022 Software en General 0

nvim-lspconfig

Configuraciones para el cliente Nvim LSP (:help lsp).

  • No presente los problemas del cliente Nvim LSP aquí. El cliente Nvim LSP no vive aquí. Esta es solo una colección de configuraciones de LSP.
  • Si encontró un error en el cliente Nvim LSP, infórmelo en el repositorio principal de Nvim.
  • Estas configuraciones son mejor esfuerzo y sin apoyo. Ver contribuciones.

Ver también :help lsp-config.

Instalar

  • Requiere la última versión estable de Neovim o Nightly. Actualice Nvim y nvim-lspconfig antes de informar un problema.
  • Instale nvim-lspconfig como cualquier otro complemento de Vim, por ejemplo, con packer.nvim:

    local use = require('packer').use
    require('packer').startup(function()
      use 'wbthomason/packer.nvim' -- Package manager
      use 'neovim/nvim-lspconfig' -- Configurations for Nvim LSP
    end)

Inicio rápido

  1. Instale un servidor de idioma, por ejemplo, pyright
    npm i -g pyright
  2. Agregue la configuración del servidor de idioma a su init.lua.
    require'lspconfig'.pyright.setup{}
  3. Inicie Nvim, el servidor de idiomas se conectará y proporcionará diagnósticos.
    nvim main.py
    
  4. Correr :LspInfo para ver el estado o para solucionar problemas.
  5. Consulte Configuración sugerida para configurar asignaciones comunes y finalización omnifunc.

Consulte server_configurations.md (:help lspconfig-all de Nvim) para obtener la lista completa de configuraciones, incluidas las instrucciones de instalación y sugerencias de personalización adicionales y opcionales para cada servidor de idioma. Para servidores que no están en la ruta de su sistema (p. ej., jdtls, elixirls), debe agregar manualmente cmd hacia setup parámetro. La mayoría de los servidores de idiomas se pueden instalar en menos de un minuto.

Configuración sugerida

nvim-lspconfig no establece combinaciones de teclas ni habilita la finalización de forma predeterminada. La siguiente configuración de ejemplo proporciona mapas de teclas sugeridos para las funciones de servidor de idioma más utilizadas y finalización activada manualmente con omnifunc ().

Nota: debe pasar el definido on_attach como argumento para cada setup {} llamar y las combinaciones de teclas en on_attach solo tiene efecto en los búfer con un servidor de idioma activo.

-- Mappings.
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
local opts = { noremap=true, silent=true }
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, opts)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts)
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts)

-- Use an on_attach function to only map the following keys
-- after the language server attaches to the current buffer
local on_attach = function(client, bufnr)
  -- Enable completion triggered by <c-x><c-o>
  vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')

  -- Mappings.
  -- See `:help vim.lsp.*` for documentation on any of the below functions
  local bufopts = { noremap=true, silent=true, buffer=bufnr }
  vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts)
  vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
  vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts)
  vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts)
  vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts)
  vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts)
  vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts)
  vim.keymap.set('n', '<space>wl', function()
    print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
  end, bufopts)
  vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts)
  vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts)
  vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts)
  vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
  vim.keymap.set('n', '<space>f', function() vim.lsp.buf.format { async = true } end, bufopts)
end

local lsp_flags = {
  -- This is the default in Nvim 0.7+
  debounce_text_changes = 150,
}
require('lspconfig')['pyright'].setup{
    on_attach = on_attach,
    flags = lsp_flags,
}
require('lspconfig')['tsserver'].setup{
    on_attach = on_attach,
    flags = lsp_flags,
}
require('lspconfig')['rust_analyzer'].setup{
    on_attach = on_attach,
    flags = lsp_flags,
    -- Server-specific settings...
    settings = {
      ["rust-analyzer"] = {}
    }
}

El omnifunc incorporado de Nvim proporciona la finalización manual y desencadenada. Para autofinalización, se requiere un complemento de autocompletado de propósito general.

Solución de problemas

Si tiene un problema, el primer paso es reproducir con una configuración mínima.

Las razones más comunes por las que un servidor de idiomas no se inicia o no se conecta son:

  1. El servidor de idiomas no está instalado. nvim-lspconfig no instala servidores de idioma por usted. Debería poder ejecutar el cmd definido en el módulo Lua de cada servidor desde la línea de comando y vea que se inicia el servidor de idioma. Si el cmd es un nombre ejecutable en lugar de una ruta absoluta al ejecutable, asegúrese de que esté en su ruta.
  2. Faltan complementos de tipo de archivo. Vim/neovim no detecta ciertos idiomas porque aún no se han agregado al sistema de detección de tipo de archivo. Asegurar :set ft? muestra el tipo de archivo y no un valor vacío.
  3. No activar la detección de raíz. Alguno Los servidores de idiomas solo se iniciarán si se abren en un directorio, o en un directorio secundario, que contenga un archivo que señale el raíz del proyecto. La mayoría de las veces, esta es una .git carpeta, pero cada servidor define la configuración raíz en el archivo lua. Consulte server_configurations.md o el origen de la lista de directorios raíz.
  4. debes pasar on_attach y capabilities por cada setup {} si quieres que estos surtan efecto.
  5. No llames setup {} dos veces para el mismo servidor. La segunda llamada a setup {} sobrescribirá el primero.

Antes de informar un error, verifique sus registros y la salida de :LspInfo. Agregue lo siguiente a su init.vim para habilitar el registro:

vim.lsp.set_log_level("debug")

Intente ejecutar el servidor de idioma y abra el registro con:

:LspLog

La mayoría de las veces, el motivo del error está presente en los registros.

Comandos

  • :LspInfo muestra el estado de los servidores de idiomas activos y configurados.
  • :LspStart <config_name> Inicie el nombre del servidor solicitado. Solo se iniciará con éxito si el comando detecta un directorio raíz que coincida con la configuración actual. Pasar autostart = false para usted .setup{} solicite un servidor de idioma si desea iniciar clientes únicamente con este comando. El valor predeterminado es todos los servidores que coincidan con el tipo de archivo de búfer actual.
  • :LspStop <client_id> El valor predeterminado es detener todos los clientes de búfer.
  • :LspRestart <client_id> El valor predeterminado es reiniciar todos los clientes de búfer.

wiki

Vea el wiki para temas adicionales, incluyendo:

  • Instalación automática del servidor
  • Compatibilidad con fragmentos
  • Configuración local del proyecto
  • Complementos recomendados para funciones mejoradas del servidor de idiomas

Contribuciones

Si le falta un servidor de idioma en la lista de server_configurations.md, contribuir con una nueva configuración ayuda a otros, especialmente si el servidor requiere una configuración especial. Sigue estos pasos:

  1. Lea CONTRIBUYENDO.md.
  2. Crear un nuevo archivo en lua/lspconfig/server_configurations/SERVER_NAME.lua.
    • Copie una configuración existente para comenzar. La mayoría de las configuraciones son simples. Para ver un ejemplo extenso, consulte texlab.lua.
  3. Haga preguntas en nuestro Discurso o en la sala Neovim Matrix.

Idiomas




  • Lúa
    99,6%


  • Otro
    0,4%

Por favor Comparte y Síguenos:
RSS
Follow by Email
Facebook
Twitter

Deja una respuesta