Vim
For the full settings schema, see Setup Overview.
Required plugins
- vim-lsp — Language Server Protocol client
- asyncomplete.vim — Async auto-completion
- asyncomplete-lsp.vim — LSP source for asyncomplete
- async.vim — Async job control
Install with Vundle (add to ~/.vimrc before call vundle#end()):
~/.vimrc
Plugin 'prabirshrestha/async.vim'
Plugin 'prabirshrestha/vim-lsp'
Plugin 'prabirshrestha/asyncomplete.vim'
Plugin 'prabirshrestha/asyncomplete-lsp.vim'LSP configuration
Add the following to ~/.vimrc:
~/.vimrc
" Solidity language server (https://github.com/asyncswap/solidity-language-server)
if executable('solidity-language-server')
au User lsp_setup call lsp#register_server({
\ 'name': 'solidity-language-server',
\ 'cmd': {server_info->['solidity-language-server', '--stdio']},
\ 'root_uri': {server_info->lsp#utils#path_to_uri(
\ empty(lsp#utils#find_nearest_parent_file_directory(
\ lsp#utils#get_buffer_path(), ['foundry.toml', '.git']))
\ ? getcwd()
\ : lsp#utils#find_nearest_parent_file_directory(
\ lsp#utils#get_buffer_path(), ['foundry.toml', '.git']))},
\ 'whitelist': ['solidity'],
\ })
endif
" LSP keybindings (applied per-buffer when LSP attaches)
function! s:on_lsp_buffer_enabled() abort
setlocal omnifunc=lsp#complete
setlocal signcolumn=yes
nmap <buffer> gd <plug>(lsp-definition)
nmap <buffer> gr <plug>(lsp-references)
nmap <buffer> gi <plug>(lsp-implementation)
nmap <buffer> gt <plug>(lsp-type-definition)
nmap <buffer> K <plug>(lsp-hover)
nmap <buffer> <leader>rn <plug>(lsp-rename)
nmap <buffer> [d <plug>(lsp-previous-diagnostic)
nmap <buffer> ]d <plug>(lsp-next-diagnostic)
nmap <buffer> <leader>a <plug>(lsp-code-action)
endfunction
augroup lsp_install
au!
autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
augroup END
let g:lsp_diagnostics_echo_cursor = 1Lint options reference
Lint options (severity, rule IDs, only, exclude) are documented in Setup Overview → Lint values.
Credits
Based on leekt/vimsettings.