• Stars
    star
    3,098
  • Rank 14,431 (Top 0.3 %)
  • Language
    Vim Script
  • License
    MIT License
  • Created almost 8 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

async language server protocol plugin for vim and neovim

vim-lsp Gitter

Async Language Server Protocol plugin for vim8 and neovim.

Installing

Install vim-plug and then:

Plug 'prabirshrestha/vim-lsp'

Performance

Certain bottlenecks in Vim script have been implemented in lua. If you would like to take advantage of these performance gains use vim compiled with lua or neovim v0.4.0+

Registering servers

if executable('pylsp')
    " pip install python-lsp-server
    au User lsp_setup call lsp#register_server({
        \ 'name': 'pylsp',
        \ 'cmd': {server_info->['pylsp']},
        \ 'allowlist': ['python'],
        \ })
endif

function! s:on_lsp_buffer_enabled() abort
    setlocal omnifunc=lsp#complete
    setlocal signcolumn=yes
    if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif
    nmap <buffer> gd <plug>(lsp-definition)
    nmap <buffer> gs <plug>(lsp-document-symbol-search)
    nmap <buffer> gS <plug>(lsp-workspace-symbol-search)
    nmap <buffer> gr <plug>(lsp-references)
    nmap <buffer> gi <plug>(lsp-implementation)
    nmap <buffer> gt <plug>(lsp-type-definition)
    nmap <buffer> <leader>rn <plug>(lsp-rename)
    nmap <buffer> [g <plug>(lsp-previous-diagnostic)
    nmap <buffer> ]g <plug>(lsp-next-diagnostic)
    nmap <buffer> K <plug>(lsp-hover)
    nnoremap <buffer> <expr><c-f> lsp#scroll(+4)
    nnoremap <buffer> <expr><c-d> lsp#scroll(-4)

    let g:lsp_format_sync_timeout = 1000
    autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync')
    
    " refer to doc to add more commands
endfunction

augroup lsp_install
    au!
    " call s:on_lsp_buffer_enabled only for languages that has the server registered.
    autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
augroup END

Refer to vim-lsp-settings on how to easily setup language servers using vim-lsp automatically.

Plug 'prabirshrestha/vim-lsp'
Plug 'mattn/vim-lsp-settings'

auto-complete

Refer to docs on configuring omnifunc or asyncomplete.vim.

Snippets

vim-lsp does not support snippets by default. If you want snippet integration, you will first have to install a third-party snippet plugin and a plugin that integrates it in vim-lsp. At the moment, you have following options:

  1. vim-vsnip together with vim-vsnip-integ
  2. UltiSnips together with vim-lsp-ultisnips
  3. neosnippet.vim together with vim-lsp-neosnippet

For more information, refer to the readme and documentation of the respective plugins.

Folding

You can let the language server automatically handle folding for you. To enable this, you have to set 'foldmethod', 'foldexpr' and (optionally) 'foldtext':

set foldmethod=expr
  \ foldexpr=lsp#ui#vim#folding#foldexpr()
  \ foldtext=lsp#ui#vim#folding#foldtext()

If you would like to disable folding globally, you can add this to your configuration:

let g:lsp_fold_enabled = 0

Also see :h vim-lsp-folding.

Semantic highlighting

vim-lsp supports the unofficial extension to the LSP protocol for semantic highlighting (microsoft/vscode-languageserver-node#367). This feature requires Neovim highlights, or Vim with the textprop feature enabled. You will also need to link language server semantic scopes to Vim highlight groups. Refer to :h vim-lsp-semantic for more info.

Supported commands

Note:

  • Some servers may only support partial commands.
  • While it is possible to register multiple servers for the same filetype, some commands will pick only the first server that supports it. For example, it doesn't make sense for rename and format commands to be sent to multiple servers.
Command Description
:LspAddTreeCallHierarchyIncoming Find incoming call hierarchy for the symbol under cursor, but add the result to the current list
:LspCallHierarchyIncoming Find incoming call hierarchy for the symbol under cursor
:LspCallHierarchyOutgoing Find outgoing call hierarchy for the symbol under cursor
:LspCodeAction Gets a list of possible commands that can be applied to a file so it can be fixed (quick fix)
:LspCodeLens Gets a list of possible commands that can be executed on the current document
:LspDeclaration Go to the declaration of the word under the cursor, and open in the current window
:LspDefinition Go to the definition of the word under the cursor, and open in the current window
:LspDocumentDiagnostics Get current document diagnostics information
:LspDocumentFormat Format entire document
:LspDocumentRangeFormat Format document selection
:LspDocumentSymbol Show document symbols
:LspHover Show hover information
:LspImplementation Show implementation of interface in the current window
:LspNextDiagnostic jump to next diagnostic (all of error, warning, information, hint)
:LspNextError jump to next error
:LspNextReference jump to next reference to the symbol under cursor
:LspNextWarning jump to next warning
:LspPeekDeclaration Go to the declaration of the word under the cursor, but open in preview window
:LspPeekDefinition Go to the definition of the word under the cursor, but open in preview window
:LspPeekImplementation Go to the implementation of an interface, but open in preview window
:LspPeekTypeDefinition Go to the type definition of the word under the cursor, but open in preview window
:LspPreviousDiagnostic jump to previous diagnostic (all of error, warning, information, hint)
:LspPreviousError jump to previous error
:LspPreviousReference jump to previous reference to the symbol under cursor
:LspPreviousWarning jump to previous warning
:LspReferences Find references
:LspRename Rename symbol
:LspStatus Show the status of the language server
:LspTypeDefinition Go to the type definition of the word under the cursor, and open in the current window
:LspTypeHierarchy View type hierarchy of the symbol under the cursor
:LspWorkspaceSymbol Search/Show workspace symbol

Diagnostics

Document diagnostics (e.g. warnings, errors) are enabled by default, but if you preferred to turn them off and use other plugins instead (like Neomake or ALE, set g:lsp_diagnostics_enabled to 0:

let g:lsp_diagnostics_enabled = 0         " disable diagnostics support

Highlight references

Highlight references to the symbol under the cursor (enabled by default). You can disable it by adding

let g:lsp_document_highlight_enabled = 0

to your configuration.

To change the style of the highlighting, you can set or link the lspReference highlight group, e.g.:

highlight lspReference ctermfg=red guifg=red ctermbg=green guibg=green

Debugging

In order to enable file logging set g:lsp_log_file.

let g:lsp_log_verbose = 1
let g:lsp_log_file = expand('~/vim-lsp.log')

" for asyncomplete.vim log
let g:asyncomplete_log_file = expand('~/asyncomplete.log')

You can get detailed status on your servers using :CheckHealth -- built into neovim or in a plugin on vim:

if !has('nvim') | Plug 'rhysd/vim-healthcheck' | endif
CheckHealth

Tests

vim-themis is used for testing. To run integration tests gopls executable must be in path.

Maintainers

Backers

Support us with a monthly donation and help us continue our activities. [Become a backer]

Sponsors

Become a sponsor and get your logo on our README on GitHub with a link to your site. [Become a sponsor]

More Repositories

1

asyncomplete.vim

async completion in pure vim script for vim8 and neovim
Vim Script
893
star
2

dwm-win32

dwm port of tiling manager to Window
C
439
star
3

async.vim

normalize async job control api for vim and neovim
Vim Script
275
star
4

asyncomplete-lsp.vim

Vim Script
122
star
5

hn-react

Hacker News Client built using ReactJS
JavaScript
119
star
6

quickpick.vim

experimental quick picker for vim
Vim Script
79
star
7

FluentHttp

a light weight library aimed to ease the development for your rest client
C#
48
star
8

dotfiles

There is no place like ~
Lua
48
star
9

asyncomplete-buffer.vim

provides buffer autocomplete for asyncomplete.vim
Vim Script
43
star
10

reactive-cocoa-playground

Objective-C
40
star
11

asyncomplete-file.vim

provides file autocomplete for asyncomplete.vim
Vim Script
39
star
12

rblog

super fast blog engine written in rust. live demo @ https://blog.prabir.me
Rust
36
star
13

asyncomplete-ultisnips.vim

provides ultisnips autocomplete for asyncomplete.vim
Vim Script
33
star
14

FacebookSharp

Facebook Graph API for .Net
C#
30
star
15

callbag.vim

Vim Script
27
star
16

typescript-language-server

Language Server Protocol implementation for Typescript via tsserver
TypeScript
25
star
17

asyncomplete-tags.vim

provides tag auto completion for asyncomplete.vim via vim tagfiles
Vim Script
23
star
18

simple-ubuntu-installer

simple encrypted zfs ubuntu installer
Shell
22
star
19

simple-arch-installer

Shell
19
star
20

synology-nomad

Shell
19
star
21

FB-CSharp-SDK-First-FB-Application

Facebook C# SDK - Writing your first facebook application
C#
19
star
22

asyncomplete-gocode.vim

provides go autocomplete for asyncomplete.vim via gocode
Vim Script
18
star
23

nji

NodeJs (Package) Installer
C#
17
star
24

async-vfs

async vfs for rust
Rust
13
star
25

asyncomplete-flow.vim

provides javascript autocomplete for asyncomplete.vim via flow
Vim Script
13
star
26

asyncomplete-necovim.vim

provides syntax autocomplete for asyncomplete.vim via neco-vim
Vim Script
13
star
27

writing-an-os-from-scratch

This is a tutorial that teaches you how to write a bootloader/os from scratch
Assembly
12
star
28

simple-owin

simple owin implementation examples
C#
12
star
29

mq

Rust
11
star
30

asyncomplete-emoji.vim

provides emoji autocomplete for asyncomplete.vim
Vim Script
10
star
31

njake

node.js jakefile helper tasks for .net developers
JavaScript
10
star
32

asyncomplete-neosnippet.vim

provides neosnippet autocomplete for asyncomplete.vim
Vim Script
10
star
33

quickpick-colorschemes.vim

Colorscheme picker for quickpick.vim
Vim Script
10
star
34

asyncomplete-tscompletejob.vim

provides typescript autocomplete for asyncomplete.vim via tscompletejob
Vim Script
9
star
35

lua-callbag

Lua
8
star
36

surrealdb-migrator

Rust
8
star
37

nuget-button

javascript helper for generating nuget button
JavaScript
8
star
38

lua-eventbus

Lua
8
star
39

writing-vim-plugins-in-lua

7
star
40

asyncomplete-emmet.vim

Vim Script
6
star
41

asyncomplete-necosyntax.vim

provides syntax autocomplete for asyncomplete.vim via necosyntax
Vim Script
6
star
42

win32-c-boilerplate

boilerplate code for win32 c binaries
Makefile
6
star
43

universal-typescript-boilerplate

TypeScript
5
star
44

Facebook.Extensions.Task

C# v5 async extensions for Facebook C# SDK
C#
5
star
45

gitignore

common gitignore files for .net development
5
star
46

opengraph.net

C# Facebook OpenGraph.NET library fork from http://opengraph.codeplex.com
C#
5
star
47

rax

middleware for .net (trying to make owin better)
C#
4
star
48

quickpick-lsp.vim

Vim Script
4
star
49

sprockets-dotnet

Sprockets style dependency resolver for .NET
JavaScript
4
star
50

dark-themes

Dark themes for various text editors - Visual Studio, Notepad++, Vim, Eclipse
Vim Script
4
star
51

Facebook.Moq

Moq helpers for Facebook C# SDK
C#
4
star
52

linqtofacebook

Linq Provider for Facebook Graph API
C#
4
star
53

typescript-webpack-umd-boilerplate

JavaScript
4
star
54

NancyFacebookSample

NancyFx + Facebook C# SDK
C#
4
star
55

winzsh

Fork of https://sourceforge.net/projects/zsh-nt/
C
4
star
56

azure-sdk-for-net-tasks

TPL extensions for Azure SDK for .NET
C#
4
star
57

quickpick-npm.vim

Vim Script
3
star
58

dwm-win32-6

C
3
star
59

ProfilesAndSettings

Stores my profile and settings for PowerShell, gitconfig, hgrc, irbc
Vim Script
3
star
60

hn-react-mobx

HackerNews + MobX + React
JavaScript
3
star
61

socket-io-net

socket.io server implemented in .net and owin
JavaScript
3
star
62

github

github api wrapper for .net
C#
3
star
63

backbone-js-on-nancy

Sample demonstrating Single Page App using Backbone JS and NancyFX
JavaScript
3
star
64

SimpleFx

SimpleFX is a list of .NET libraries that match the Simple ethos and does its job well.
3
star
65

vs-erc

C#
3
star
66

synology-package-template

Shell
3
star
67

ctrlp-env

ctrlp extension to view environment variables
Vim Script
2
star
68

Unity.Wcf

unity di for wcf
C#
2
star
69

js-namespace

Javscript Namespace Library
JavaScript
2
star
70

wilo

Rust
2
star
71

zcloud

Shell
2
star
72

moonrepo-rust-vite-template

CSS
2
star
73

vim-fz-extras

Vim Script
2
star
74

go-coreutils

coreutils written in go
Go
2
star
75

tsearch

Rust
2
star
76

quickpick-filetypes.vim

filetype picker for quickpick.vim
Vim Script
2
star
77

my-sublimetext-settings

My Sublime Text 2 settings for Mac and Windows
2
star
78

vsnip-snippets

My snippets for https://github.com/hrsh7th/vim-vsnip
2
star
79

reactjs-typescript-boilerplate

JavaScript
2
star
80

trillium-send-file

Rust
1
star
81

expressjs-boilerplate

expressjs/backbone boilerplate
JavaScript
1
star
82

dwmjs

C
1
star
83

cowsay.rs

Rust
1
star
84

hapijs-sample

JavaScript
1
star
85

my-node-playground

JavaScript
1
star
86

TaskExtensions

Helper Extensions methods for Task Parallel Library
C#
1
star
87

Prabir.CocoR

Coco/R plugin for Visual Studio
C#
1
star
88

NuGetPowerShellScripts

helpers powershell scripts for nuget
1
star
89

salvo-template

Rust
1
star
90

ELMAH.MySql

MySql provider for ELMAH
1
star
91

docker-static-site

HTML
1
star
92

vfs-s3

Amazon S3 backend for @c9/vfs
JavaScript
1
star
93

StyleCopCmd

Fork of StyleCopCmd from http://nichesoftware.co.nz/page/373/stylecop-cmd-version-history
Ruby
1
star
94

Nancy.Facebook.RealtimeSubscription

C#
1
star
95

objstor

object store
Rust
1
star
96

reactjs-boilerplate

ReactJS boilerplate code with WebPack
JavaScript
1
star
97

dotnet-in-python

C#
1
star
98

SimpleBlog

Simple .NET Blog written in OWIN
C#
1
star
99

python-sdk

This SDK is deprecated. It does not support the new cookie format that we rolled out as part of the OAuth Migration. In short, it doesn't work. We currently have no plans to update it. Feel free to clone this repository and modify.
Python
1
star