mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-26 15:50:04 +08:00
1472a549c6
* Update shell layer doc * Update script for update layer index * Update script for update layer index * Update colorscheme layer doc * Update autocomplete layer doc * Update checkers layer doc * Update chinese layer doc * Update chat layer doc * Update faq * Update VersionControl layer doc * Update help file * Update cscope layer doc * Use cn group * Update debug layer doc * Update ctrlp layer doc * Update default layer doc * Improve the community page * Improve the community page * Update default layer doc * Update denite layer doc * Update git layer doc * Update ui layer doc * Update tags layer doc * Update leaderf layer doc * Update fzf layer doc * Update unite layer doc * Update tools layer doc * Update index * Update tools#dash layer doc * Update lsp layer doc * Update faq
129 lines
3.7 KiB
Markdown
129 lines
3.7 KiB
Markdown
---
|
||
title: "SpaceVim lsp 模块"
|
||
description: "lsp 模块为 SpaceVim 提供 language server protocol 的支持,提供更多语言相关服务"
|
||
lang: cn
|
||
---
|
||
|
||
# [可用模块](../) >> lsp
|
||
|
||
<!-- vim-markdown-toc GFM -->
|
||
|
||
- [模块描述](#模块描述)
|
||
- [模块特性](#模块特性)
|
||
- [模块安装](#模块安装)
|
||
- [安装语言服务器](#安装语言服务器)
|
||
- [模块配置](#模块配置)
|
||
- [快捷键](#快捷键)
|
||
|
||
<!-- vim-markdown-toc -->
|
||
|
||
## 模块描述
|
||
|
||
lsp 模块提供了 [language-server-protocol](https://microsoft.github.io/language-server-protocol/) 的支持,
|
||
这以模块在 [LanguageClient-neovim](https://github.com/SpaceVim/LanguageClient-neovim) 基础上做了许多定制,
|
||
这一链接为一克隆的版本,需要 `+python` 支持。
|
||
|
||
同时,当你的 Vim 不支持 `+python3` 时,我们采用 [vim-lsp](https://github.com/prabirshrestha/vim-lsp) 这一使用纯 vim 脚本书写的插件。
|
||
|
||
neovim 团队也在尝试实现一个内置的 [lsp 框架](https://github.com/neovim/neovim/pull/6856),后续该框架完成后,在 neovim 内将默认使用该框架。
|
||
|
||
在 SpaceVim 内部,lsp 的框架选择逻辑大致时这样的:
|
||
|
||
```vim
|
||
if has('nvim')
|
||
" use neovim build-in lsp
|
||
elseif has('python3')
|
||
" use LanguageClient-neovim
|
||
else
|
||
" use vim-lsp
|
||
endif
|
||
```
|
||
|
||
## 模块特性
|
||
|
||
- 异步调用,避免卡顿
|
||
- 代码补全,(需要载入 [autocomplet](https://spacevim.org/layers/autocomplete/) 模块)
|
||
- 实时代码语法检查
|
||
- 重命名函数
|
||
- 显示错误信息
|
||
- 跳至定义处
|
||
- 列举所有引用
|
||
- 文档检索
|
||
- 代码格式化
|
||
- 代码自动修复
|
||
|
||
**注:** 以上所有信息依赖于语言服务器所实现的功能,请查阅 [Language Servers](https://microsoft.github.io/language-server-protocol/implementors/servers/) 列表。
|
||
|
||
## 模块安装
|
||
|
||
默认未载入,如需载入该模块,可在配置文件加入:
|
||
|
||
```toml
|
||
[[layers]]
|
||
name = "lsp"
|
||
```
|
||
|
||
### 安装语言服务器
|
||
|
||
**JavaScript:**
|
||
|
||
```sh
|
||
npm install -g javascript-typescript-langserver
|
||
```
|
||
|
||
**Python:**
|
||
|
||
```sh
|
||
pip install --user python-language-server
|
||
```
|
||
|
||
## 模块配置
|
||
|
||
为指定模块启用语言服务器支持,需要在载入模块时,指定 `filetypes` 选项:
|
||
|
||
```toml
|
||
[[layers]]
|
||
name = "lsp"
|
||
filetypes = [
|
||
"rust",
|
||
"javascript"
|
||
]
|
||
```
|
||
|
||
默认语言服务器的执行命令列表如下:
|
||
|
||
| 语言 | 命令 |
|
||
| ------------ | ------------------------------------------------ |
|
||
| `javascript` | `['javascript-typescript-stdio']` |
|
||
| `haskell` | `['hie', '--lsp']` |
|
||
| `c` | `['clangd']` |
|
||
| `cpp` | `['clangd']` |
|
||
| `html` | `['html-languageserver', '--stdio']` |
|
||
| `objc` | `['clangd']` |
|
||
| `objcpp` | `['clangd']` |
|
||
| `dart` | `['dart_language_server']` |
|
||
| `go` | `['go-langserver', '-mode', 'stdio']` |
|
||
| `rust` | `['rustup', 'run', 'nightly', 'rls']` |
|
||
| `python` | `['pyls']` |
|
||
| `php` | `['php', 'path/to/bin/php-language-server.php']` |
|
||
|
||
如果需要修改语言服务器的命令,在载入模块时,需要指定 `override_cmd` 选项:
|
||
|
||
```toml
|
||
[[layers]]
|
||
name = "lsp"
|
||
filetypes = [
|
||
"rust",
|
||
"javascript"
|
||
]
|
||
[layers.override_cmd]
|
||
rust = ["rustup", "run", "nightly", "rls"]
|
||
```
|
||
|
||
## 快捷键
|
||
|
||
| 按键 | 描述 |
|
||
| --------------- | ------------- |
|
||
| `K` / `SPC l d` | 显示文档 |
|
||
| `SPC l e` | 重命名 symbol |
|