Created
July 4, 2021 22:55
-
-
Save kavan-mevada/5ef228c7a0a7d034fcc3503aba0bcad4 to your computer and use it in GitHub Desktop.
Vim 0.5 Rust Setup
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" Prerequisites: | |
" - neovim >= 0.5 | |
" - rust-analyzer: https://rust-analyzer.github.io/manual.html#rust-analyzer-language-server-binary | |
" Steps: | |
" - :PlugInstall | |
" - Restart | |
call plug#begin('~/.vim/plugged') | |
" Collection of common configurations for the Nvim LSP client | |
Plug 'neovim/nvim-lspconfig' | |
" Extentions to built-in LSP, for example, providing type inlay hints | |
Plug 'nvim-lua/lsp_extensions.nvim' | |
" Autocompletion framework for built-in LSP | |
Plug 'nvim-lua/completion-nvim' | |
" Some color scheme other then default | |
Plug 'franbach/miramare' | |
call plug#end() | |
syntax enable | |
filetype plugin indent on | |
colorscheme miramare | |
" Set completeopt to have a better completion experience | |
set completeopt=menuone,noinsert,noselect | |
" Avoid showing extra messages when using completion | |
set shortmess+=c | |
set number | |
set mouse=a | |
set keymodel=startsel,stopsel | |
" Configure lsp | |
" https://github.com/neovim/nvim-lspconfig#rust_analyzer | |
lua <<EOF | |
-- nvim_lsp object | |
local nvim_lsp = require'lspconfig' | |
-- function to attach completion when setting up lsp | |
local on_attach = function(client) | |
require'completion'.on_attach(client) | |
end | |
local capabilities = vim.lsp.protocol.make_client_capabilities() | |
capabilities.textDocument.completion.completionItem.snippetSupport = true | |
-- Enable rust_analyzer | |
nvim_lsp.rust_analyzer.setup({ | |
capabilities=capabilities, | |
on_attach=on_attach | |
}) | |
-- Enable diagnostics | |
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with( | |
vim.lsp.diagnostic.on_publish_diagnostics, { | |
virtual_text = true, | |
signs = true, | |
update_in_insert = true, | |
} | |
) | |
EOF | |
" Code navigation shortcuts | |
" as found in :help lsp | |
nnoremap <silent> <c-]> <cmd>lua vim.lsp.buf.definition()<CR> | |
nnoremap <silent> K <cmd>lua vim.lsp.buf.hover()<CR> | |
nnoremap <silent> gD <cmd>lua vim.lsp.buf.implementation()<CR> | |
nnoremap <silent> <c-k> <cmd>lua vim.lsp.buf.signature_help()<CR> | |
nnoremap <silent> 1gD <cmd>lua vim.lsp.buf.type_definition()<CR> | |
nnoremap <silent> gr <cmd>lua vim.lsp.buf.references()<CR> | |
nnoremap <silent> g0 <cmd>lua vim.lsp.buf.document_symbol()<CR> | |
nnoremap <silent> gW <cmd>lua vim.lsp.buf.workspace_symbol()<CR> | |
" rust-analyzer does not yet support goto declaration | |
" re-mapped `gd` to definition | |
nnoremap <silent> gd <cmd>lua vim.lsp.buf.definition()<CR> | |
"nnoremap <silent> gd <cmd>lua vim.lsp.buf.declaration()<CR> | |
" Trigger completion with <tab> | |
" found in :help completion | |
" Use <Tab> and <S-Tab> to navigate through popup menu | |
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>" | |
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>" | |
" use <Tab> as trigger keys | |
imap <Tab> <Plug>(completion_smart_tab) | |
imap <S-Tab> <Plug>(completion_smart_s_tab) | |
" have a fixed column for the diagnostics to appear in | |
" this removes the jitter when warnings/errors flow in | |
set signcolumn=yes | |
" Set updatetime for CursorHold | |
" 300ms of no cursor movement to trigger CursorHold | |
set updatetime=300 | |
" Show diagnostic popup on cursor hover | |
autocmd CursorHold * lua vim.lsp.diagnostic.show_line_diagnostics() | |
" Goto previous/next diagnostic warning/error | |
nnoremap <silent> g[ <cmd>lua vim.lsp.diagnostic.goto_prev()<CR> | |
nnoremap <silent> g] <cmd>lua vim.lsp.diagnostic.goto_next()<CR> | |
" Enable type inlay hints | |
autocmd CursorMoved,InsertLeave,BufEnter,BufWinEnter,TabEnter,BufWritePost *.rs | |
\ lua require'lsp_extensions'.inlay_hints{ prefix = '', highlight = "Comment", enabled = {"TypeHint", "ChainingHint", "ParameterHint"} } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment