nvim-lspconfig
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
- Instale un servidor de idioma, por ejemplo, pyright
npm i -g pyright
- Agregue la configuración del servidor de idioma a su init.lua.
require'lspconfig'.pyright.setup{}
- Inicie Nvim, el servidor de idiomas se conectará y proporcionará diagnósticos.
nvim main.py
- Correr
:LspInfo
para ver el estado o para solucionar problemas. - 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:
- 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 elcmd
es un nombre ejecutable en lugar de una ruta absoluta al ejecutable, asegúrese de que esté en su ruta. - 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. - 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. - debes pasar
on_attach
ycapabilities
por cadasetup {}
si quieres que estos surtan efecto. - No llames
setup {}
dos veces para el mismo servidor. La segunda llamada asetup {}
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. Pasarautostart = 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:
- Lea CONTRIBUYENDO.md.
- 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.
- Haga preguntas en nuestro Discurso o en la sala Neovim Matrix.
Idiomas
-
Lúa
99,6% -
Otro
0,4%