Created
September 7, 2019 20:56
-
-
Save omid3098/456a9abab92dfd929f941bd840fdaebb to your computer and use it in GitHub Desktop.
.vimrc For OmniSharp and Unity development
This file contains 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
" Plugins: | |
call plug#begin('~/.vim/plugged') | |
Plug 'tpope/vim-fugitive' | |
Plug 'tpope/vim-surround' | |
Plug 'scrooloose/nerdtree' | |
Plug 'OmniSharp/omnisharp-vim' | |
Plug 'dense-analysis/ale' | |
Plug 'vim-airline/vim-airline' | |
Plug 'vim-airline/vim-airline-themes' | |
Plug 'edkolev/tmuxline.vim' | |
Plug '/usr/local/opt/fzf' | |
Plug 'junegunn/fzf.vim' | |
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } | |
Plug 'wakatime/vim-wakatime' | |
Plug 'mhinz/vim-startify' | |
call plug#end() | |
" Enable airline themes | |
let g:airline#extensions#tabline#enabled = 1 | |
" Enable Powerline fonts for vim | |
let g:airline_powerline_fonts = 1 | |
" full colors | |
set t_Co=256 | |
" Ignore meta files in NerdTree | |
" set wildignore+=*.pyc,*.o,*.obj,*.svn,*.swp,*.class,*.hg,*.DS_Store,*.min.*,*.meta | |
" let NERDTreeRespectWildIgnore=1 | |
" Enabling fzf | |
set rtp+=~/.fzf | |
" Default fzf layout | |
" - down / up / left / right | |
let g:fzf_layout = { 'down': '~40%' } | |
" Customize fzf colors to match your color scheme | |
let g:fzf_colors = | |
\ { 'fg': ['fg', 'Normal'], | |
\ 'bg': ['bg', 'Normal'], | |
\ 'hl': ['fg', 'Comment'], | |
\ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'], | |
\ 'bg+': ['bg', 'CursorLine', 'CursorColumn'], | |
\ 'hl+': ['fg', 'Statement'], | |
\ 'info': ['fg', 'PreProc'], | |
\ 'border': ['fg', 'Ignore'], | |
\ 'prompt': ['fg', 'Conditional'], | |
\ 'pointer': ['fg', 'Exception'], | |
\ 'marker': ['fg', 'Keyword'], | |
\ 'spinner': ['fg', 'Label'], | |
\ 'header': ['fg', 'Comment'] } | |
" Use the stdio OmniSharp-roslyn server | |
let g:OmniSharp_server_stdio = 1 | |
" Set the type lookup function to use the preview window instead of echoing it | |
"let g:OmniSharp_typeLookupInPreview = 1 | |
" Timeout in seconds to wait for a response from the server | |
let g:OmniSharp_timeout = 5 | |
" Don't autoselect first omnicomplete option, show options even if there is only | |
" one (so the preview documentation is accessible). Remove 'preview' if you | |
" don't want to see any documentation whatsoever. | |
set completeopt=longest,menuone | |
" Fetch full documentation during omnicomplete requests. | |
" By default, only Type/Method signatures are fetched. Full documentation can | |
" still be fetched when you need it with the :OmniSharpDocumentation command. | |
"let g:omnicomplete_fetch_full_documentation = 1 | |
" Set desired preview window height for viewing documentation. | |
" You might also want to look at the echodoc plugin. | |
set previewheight=5 | |
" Tell ALE to use OmniSharp for linting C# files, and no other linters. | |
let g:ale_linters = { 'cs': ['OmniSharp'] } | |
" Update semantic highlighting on BufEnter and InsertLeave | |
let g:OmniSharp_highlight_types = 2 | |
augroup omnisharp_commands | |
autocmd! | |
" Show type information automatically when the cursor stops moving | |
autocmd CursorHold *.cs call OmniSharp#TypeLookupWithoutDocumentation() | |
" The following commands are contextual, based on the cursor position. | |
autocmd FileType cs nnoremap <buffer> gd :OmniSharpGotoDefinition<CR> | |
autocmd FileType cs nnoremap <buffer> <Leader>fi :OmniSharpFindImplementations<CR> | |
autocmd FileType cs nnoremap <buffer> <Leader>fs :OmniSharpFindSymbol<CR> | |
autocmd FileType cs nnoremap <buffer> <Leader>fu :OmniSharpFindUsages<CR> | |
" Finds members in the current buffer | |
autocmd FileType cs nnoremap <buffer> <Leader>fm :OmniSharpFindMembers<CR> | |
autocmd FileType cs nnoremap <buffer> <Leader>fx :OmniSharpFixUsings<CR> | |
autocmd FileType cs nnoremap <buffer> <Leader>tt :OmniSharpTypeLookup<CR> | |
autocmd FileType cs nnoremap <buffer> <Leader>dc :OmniSharpDocumentation<CR> | |
autocmd FileType cs nnoremap <buffer> <C-\> :OmniSharpSignatureHelp<CR> | |
autocmd FileType cs inoremap <buffer> <C-\> <C-o>:OmniSharpSignatureHelp<CR> | |
" Navigate up and down by method/property/field | |
autocmd FileType cs nnoremap <buffer> <C-k> :OmniSharpNavigateUp<CR> | |
autocmd FileType cs nnoremap <buffer> <C-j> :OmniSharpNavigateDown<CR> | |
" Find all code errors/warnings for the current solution and populate the quickfix window | |
autocmd FileType cs nnoremap <buffer> <Leader>cc :OmniSharpGlobalCodeCheck<CR> | |
augroup END | |
" Contextual code actions (uses fzf, CtrlP or unite.vim when available) | |
nnoremap <Leader><Space> :OmniSharpGetCodeActions<CR> | |
" Run code actions with text selected in visual mode to extract method | |
xnoremap <Leader><Space> :call OmniSharp#GetCodeActions('visual')<CR> | |
" Rename with dialog | |
nnoremap <Leader>nm :OmniSharpRename<CR> | |
nnoremap <F2> :OmniSharpRename<CR> | |
" Rename without dialog - with cursor on the symbol to rename: `:Rename newname` | |
command! -nargs=1 Rename :call OmniSharp#RenameTo("<args>") | |
nnoremap <Leader>cf :OmniSharpCodeFormat<CR> | |
" Start the omnisharp server for the current solution | |
nnoremap <Leader>ss :OmniSharpStartServer<CR> | |
nnoremap <Leader>sp :OmniSharpStopServer<CR> | |
nnoremap <Leader>o :FZF<CR> | |
" Enable snippet completion | |
let g:OmniSharp_want_snippet=1 | |
" Comment and UnComment | |
let s:comment_map = { | |
\ "c": '\/\/', | |
\ "cpp": '\/\/', | |
\ "cs": '\/\/', | |
\ "go": '\/\/', | |
\ "java": '\/\/', | |
\ "javascript": '\/\/', | |
\ "lua": '--', | |
\ "scala": '\/\/', | |
\ "php": '\/\/', | |
\ "python": '#', | |
\ "ruby": '#', | |
\ "rust": '\/\/', | |
\ "sh": '#', | |
\ "desktop": '#', | |
\ "fstab": '#', | |
\ "conf": '#', | |
\ "profile": '#', | |
\ "bashrc": '#', | |
\ "bash_profile": '#', | |
\ "mail": '>', | |
\ "eml": '>', | |
\ "bat": 'REM', | |
\ "ahk": ';', | |
\ "vim": '"', | |
\ "tex": '%', | |
\ } | |
function! ToggleComment() | |
if has_key(s:comment_map, &filetype) | |
let comment_leader = s:comment_map[&filetype] | |
if getline('.') =~ "^\\s*" . comment_leader . " " | |
" Uncomment the line | |
execute "silent s/^\\(\\s*\\)" . comment_leader . " /\\1/" | |
else | |
if getline('.') =~ "^\\s*" . comment_leader | |
" Uncomment the line | |
execute "silent s/^\\(\\s*\\)" . comment_leader . "/\\1/" | |
else | |
" Comment the line | |
execute "silent s/^\\(\\s*\\)/\\1" . comment_leader . " /" | |
end | |
end | |
else | |
echo "No comment leader found for filetype" | |
end | |
endfunction | |
nnoremap <leader>cm :call ToggleComment()<cr> | |
vnoremap <leader>cm :call ToggleComment()<cr> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment