Skip to content

Instantly share code, notes, and snippets.

@nonrice
Last active May 23, 2026 02:04
Show Gist options
  • Select an option

  • Save nonrice/c13f28e0566a28dabf04fcb036213ba3 to your computer and use it in GitHub Desktop.

Select an option

Save nonrice/c13f28e0566a28dabf04fcb036213ba3 to your computer and use it in GitHub Desktop.
vimrc
set nocompatible
filetype plugin indent on
if empty(glob('~/.vim/autoload/plug.vim'))
silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif
call plug#begin()
Plug 'bfrg/vim-c-cpp-modern'
Plug 'rust-lang/rust.vim'
Plug 'tpope/vim-sleuth'
Plug 'tpope/vim-fugitive'
Plug 'nonrice/bpick'
Plug 'nonrice/vim-lsp'
Plug 'mattn/vim-lsp-settings'
Plug 'jenterkin/vim-autosource'
Plug 'dbakker/vim-projectroot'
Plug 'ojroques/vim-oscyank'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
call plug#end()
" --- editing ---
set expandtab tabstop=4 shiftwidth=4 softtabstop=4
set autoindent smartindent
imap {<CR> {<CR>}<Esc>O
set foldmethod=syntax
set foldlevelstart=20
" --- buffers ---
set hidden
set autoread
au FocusGained,BufEnter * :silent! !
" --- interface ---
let mapleader=" "
set mouse=a
set splitright
set laststatus=2
set ruler
set wildoptions=pum,fuzzy
set incsearch
set relativenumber number
set cursorline
set scrolloff=10
syntax on
" --- terminal ---
set ttyfast
set lazyredraw
set notimeout ttimeout ttimeoutlen=50
let &t_BE = "\e[?2004h"
let &t_BD = "\e[?2004l"
let &t_PS = "\e[200~"
let &t_PE = "\e[201~"
" --- lsp ---
let g:lsp_experimental_workspace_folders = 1
let g:lsp_diagnostics_virtual_text_align = 'after'
"let g:lsp_work_done_progress_enabled = 1
"let g:lsp_log_verbose = 1
"let g:lsp_log_file = expand('~/vim-lsp.log')
let g:lsp_settings_filetype_rust = ['rust-analyzer', 'bacon-ls']
let g:lsp_settings = {
\ 'rust-analyzer': {
\ 'initialization_options': {
\ 'checkOnSave': v:false,
\ 'diagnostics': v:false,
\ 'cargo': {'targetDir': 'target/rust-analyzer'},
\ },
\ }
\}
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-j> lsp#scroll(+4)
nnoremap <buffer> <expr><C-k> lsp#scroll(-4)
endfunction
augroup lsp_install
au!
autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
augroup END
function! s:add_bemol_workspace_folders() abort
let l:bemol_dir = finddir('.bemol', '.;')
if empty(l:bemol_dir)
return
endif
let l:ws_root_folders_file = l:bemol_dir . '/ws_root_folders'
if !filereadable(l:ws_root_folders_file)
return
endif
let l:folders = readfile(l:ws_root_folders_file)
for l:server_name in lsp#get_allowed_servers()
if l:server_name ==# 'rust-analyzer' | continue | endif
if lsp#is_server_running(l:server_name)
for l:folder in l:folders
if !empty(l:folder)
call lsp#add_workspace_folder(l:server_name, l:folder)
endif
endfor
endif
endfor
endfunction
augroup bemol_workspace
autocmd!
autocmd User lsp_server_init call s:add_bemol_workspace_folders()
augroup END
" --- keys ---
nnoremap <leader>l :BPick<CR>
nnoremap <leader>s :BPickSet<CR>
nnoremap <leader>j :buffer#<CR>
nnoremap <leader>m :make!<CR>
nnoremap <leader>e :Files<CR>
nnoremap <leader>b :Buffers<CR>
nmap <leader>y <Plug>OSCYankOperator
nmap <leader>yy <leader>y_
vmap <leader>y <Plug>OSCYankVisual
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment