如何在Linux上使用VIM进行.Net Core开发
对于在Linux上开发.Net Core的程序员来说, 似乎都缺少一个好的IDE.
Windows上有Visual Studio, Mac上有Visual Studio for Mac, 难道Linux只有Visual Studio Code了吗?
Linux上有两个最好的编辑器: VIM和Emacs, 哪个更好不是这一篇的主题, 这一篇的主题是如何在Linux上简单的构建一个比较好用的.Net Core开发环境.
以下的内容面向的是刚接触VIM的新手, 如果你完全未接触过, 可以去找一些入门的文章看看.
以下使用的环境是 Ubuntu 16.04 LTS + .Net Core 2.0 preview 2.
导入一个通用的vimrc
如果你是新手, 并且你的vimrc(vim的配置文件)空空如也, 请导入下面这个vimrc.
这个配置文件启用了智能缩进和改善了快捷键等等, 强烈推荐新手一开始使用它.
地址: https://github.com/amix/vimrc
git clone --depth=1 git://github.com/amix/vimrc.git ~/.vim_runtime
sh ~/.vim_runtime/install_basic_vimrc.sh
安装模块管理工具pathogen.vim
跟众多IDE中一样, vim可以模块化管理功能.
管理工具除了pathogen外还有Vundle等, 但pathogen是最简单的, 安装完以后把插件放在"~/.vim/bundle"下即可.
地址: https://github.com/tpope/vim-pathogen
mkdir -p ~/.vim/autoload ~/.vim/bundle
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
echo -e "\nexecute pathogen#infect()" >> ~/.vimrc
安装mono
虽然这篇文章介绍的是.Net Core开发, 但是C#的智能语法提示插件基于mono,所以必须先安装mono.
ubuntu 16.04自带的mono版本比较低, 需要从官方安装, 步骤如下:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/ubuntu xenial main" | sudo tee /etc/apt/sources.list.d/mono-official.list
sudo apt-get update
sudo apt-get install mono-devel
安装vim.nox
ubuntu 16.04上的vim默认不带python支持, 而omnisharp-vim要求python支持, 所以需要另外安装一个vim.nox.
sudo apt-get install vim.nox-py2
sudo update-alternatives --set vi /usr/bin/vim.nox-py2
sudo update-alternatives --set vim /usr/bin/vim.nox-py2
安装OmniSharp
OmniSharp用于动态解析C#的语法, 为语法分析和补全提示等功能提供支持, Visual Studio Code中用的也是它.
地址: https://github.com/OmniSharp/omnisharp-vim
cd ~/.vim/bundle
git clone https://github.com/OmniSharp/omnisharp-vim.git
cd omnisharp-vim
git submodule update --init --recursive
cd server
xbuild
cd ~/.vim/bundle/omnisharp-vim/omnisharp-roslyn
./build.sh
安装OmniSharp需要的其他组件
OmniSharp只提供了语言服务, 还需要安装其他组件来实现智能提示等功能.
dispatch.vim
用于后台启动OmniSharp的语言服务
地址: https://github.com/tpope/vim-dispatch
cd ~/.vim/bundle
git clone https://github.com/tpope/vim-dispatch
CtrlP
用于查找和定位类型
地址: https://github.com/ctrlpvim/ctrlp.vim
cd ~/.vim/bundle
git clone https://github.com/ctrlpvim/ctrlp.vim
syntastic
用于实现语法检查
地址: https://github.com/vim-syntastic/syntastic
cd ~/.vim/bundle
git clone https://github.com/vim-syntastic/syntastic
vim-deus
替换默认的配色
地址: https://github.com/ajmwagar/vim-deus
cd ~/.vim/bundle
git clone https://github.com/ajmwagar/vim-deus
添加自定义的配置
创建我们自己使用的配置文件
mkdir -p ~/.vim/bundle/myconf/plugin
vi ~/.vim/bundle/myconf/plugin/myconf.vim
添加以下的部分到myconf.vim中, 更多配置可以参考omnisharp-vim中的README.
粘贴前需要使用":set paste"防止粘贴的内容触发快捷键.
" 让omnisharp使用roslyn
let g:OmniSharp_server_type = 'v1'
let g:OmniSharp_server_type = 'roslyn'
let g:OmniSharp_prefer_global_sln = 1" 设置omnisharp
let g:OmniSharp_timeout = 1
set noshowmatch
set completeopt=longest,menuone,preview
let g:syntastic_cs_checkers = ['code_checker']
set updatetime=500
augroup omnisharp_commandsautocmd!autocmd FileType cs call s:SetCSharpOptions()setlocal omnifunc=OmniSharp#Completefun! s:SetCSharpOptions()autocmd BufEnter,TextChanged,InsertLeave *.cs SyntasticCheckautocmd BufWritePost *.cs call OmniSharp#AddToProject()autocmd CursorHold *.cs call OmniSharp#TypeLookupWithoutDocumentation()" 设置快捷键" F12转到定义nnoremap <F12> :OmniSharpGotoDefinition<cr>nnoremap gd :OmniSharpGotoDefinition<cr>" Ctrl+F12转到实现nnoremap <C-F12> :OmniSharpFindImplementations<cr>nnoremap fi :OmniSharpFindImplementations<cr>" F11查找使用nnoremap <F11> :OmniSharpFindUsages<cr>nnoremap fu :OmniSharpFindUsages<cr>nnoremap ft :OmniSharpFindType<cr>nnoremap fs :OmniSharpFindSymbol<cr>nnoremap fm :OmniSharpFindMembers<cr>nnoremap fx :OmniSharpFixIssue<cr>nnoremap fxu :OmniSharpFixUsings<cr>nnoremap tt :OmniSharpTypeLookup<cr>nnoremap dc :OmniSharpDocumentation<cr>nnoremap <C-Up> :OmniSharpNavigateUp<cr>nnoremap <C-Down> :OmniSharpNavigateDown<cr>nnoremap gc :OmniSharpGetCodeActions<cr>vnoremap gcv :call OmniSharp#GetCodeActions('visual')<cr>" F2重命名nnoremap <F2> :OmniSharpRename<cr>nnoremap rl :OmniSharpReloadSolution<cr>nnoremap cf :OmniSharpCodeFormat<cr>nnoremap tp :OmniSharpAddToProject<cr>nnoremap ss :OmniSharpStartServer<cr>nnoremap sp :OmniSharpStopServer<cr>nnoremap th :OmniSharpHighlightTypes<cr>" F1切换buffernnoremap <F1> :buffers<CR>:buffer" F5编译+运行nnoremap <F5> :make<CR>" Enter选择提示内容+显示文档inoremap <expr><Enter> pumvisible() ? "\<C-Y>\<Esc>:OmniSharpDocumentation<CR>a" : "\<Enter>"" Tab切换提示内容inoremap <expr><Tab> pumvisible() ? "\<C-n>" : "\<Tab>"" (选择提示内容+显示文档inoremap <expr>( pumvisible() ? "\<Esc>:OmniSharpDocumentation<CR>a(" : "("" 添加多行注释inoremap /// ///<Space><summary><CR><CR></summary><Esc>kA<Space>" 设置即时提示set completeopt+=menuset completeopt+=menuoneset completeopt+=noinsertautocmd InsertCharPre * call s:TypeComplete()fun! s:TypeComplete()if pumvisible() && v:char !~ '\.'return ''endifif v:char =~ '\(\K\|\.\)'call feedkeys("\<C-x>\<C-o>", 'n')endifendfunendfun
augroup END" 定义有多行时不提示Enter继续
set cmdheight=2" 转到定义时不询问保存
set hidden" 开启256色支持
set t_Co=256" 显示行号
set number" 替换默认的配色
colorscheme deus
.Net Core 2.0支持
如果系统同时如果安装了.Net Core 2.0 preview 2, 可能会导致Omnisharp的语言服务启动失败, 可以用下面的办法解决.
cp -i ~/.nuget/packages/runtime.ubuntu.16.04-x64.runtime.native.System/1.0.1/runtimes/ubuntu.16.04-x64/native/System.Native.so ~/.vim/bundle/omnisharp-vim/omnisharp-roslyn/artifacts/publish/OmniSharp/default/net46/libSystem.Native.so
cp -i /usr/share/dotnet/sdk/2.0.0-preview2-006497/Sdks/Microsoft.NET.Sdk/tools/net46/NuGet.*.dll ~/.vim/bundle/omnisharp-vim/omnisharp-roslyn/artifacts/publish/OmniSharp/default/net46/
另外由于omnisharp的目前的一个bug(#309), 还需要执行以下的命令
cd ~/.vim/bundle/omnisharp-vim/omnisharp-roslyn/artifacts/scripts
ln -s OmniSharp Omnisharp
如果仍然无法得到智能提示, 可以手动启动语言服务确认是否出错.
~/.vim/bundle/omnisharp-vim/omnisharp-roslyn/artifacts/scripts/OmniSharp -p 2000 -s ~/NewProject/NewProject.sln
开发示例
首先创建一个项目
mkdir NewProject
cd NewProject
dotnet new console
dotnet new sln
dotnet sln add NewProject.csproj
然后生成一个Makefile, 这样可以支持":Make"或者"F5"时编译运行
echo -e "PHONY: run\nrun:\n\tdotnet run\n" > Makefile
最后使用vim打开代码文件即可
vim Program.cs
效果(静态图)
效果(gif)
教程就到此为止了, 需要更多功能可以查看omnisharp-vim的官方Github.
原文地址:http://www.cnblogs.com/zkweb/p/7298996.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
如何在Linux上使用VIM进行.Net Core开发相关推荐
- c++获取当前目录_如何在 Linux 下利用 Vim 搭建 C/C++ 开发环境?
2020年了,不要再看网上那些老旧的文章还在教你使用手工生成 tags 的,请使用自动代码索引生成工具,比如 vim-gutentags,现在网上好像就没有一篇能正确讨论 Vim C/C++ 环境搭建 ...
- zypper 删除mysql_如何在 Linux 上安装/卸载一个文件中列出的软件包?
原标题:如何在 Linux 上安装/卸载一个文件中列出的软件包? 我们可以手动去安装这些软件但是这将花费大量的时间.你可以手动安装一俩个服务器,但是试想如果你有大概十个服务器呢.在这种情况下你无法手动 ...
- Linux上安装VIM
没学会如何在Linux上自动下载.安装软件,只好费劲的自己下了自己装吧 o(︶︿︶)o ---------------------------------------------------- 首先下 ...
- 如何在linux上的上修改配置ip地址
如何在linux上的上修改配置ip地址 再Linux上面配置IP有很多种方式,每个人有每个人的习惯,所以根据个人喜好进行配置. 方式如下: 1.使用图形化界面进行配置IP地址,但是大多数的服务器都不需 ...
- linux上查看网络限制,如何在Linux上限制网络带宽
您是否曾经与多个设备共享网络带宽?如果您曾经处于一个应用程序占用了所有流量的位置,那么您是系统管理员还是Linux用户,您将需要发现如何控制应用程序的上载和下载速度,以确保您的带宽并不完全被单个应用程 ...
- linux下安装sbt_如何在Linux上安装SBT
linux下安装sbt 介绍 (Introduction) Hi! I am Sanjula, and in this guide I hope to teach you how to install ...
- 如何在Linux上找到包含特定文本的所有文件?
我正在尝试找到一种方法来扫描整个Linux系统,查找包含特定文本字符串的所有文件. 只是为了澄清,我在文件中寻找文本,而不是文件名. 当我查找如何做到这一点时,我遇到了两次这个解决方案: find / ...
- docker删除所有容器_如何在Linux上创建,列出和删除Docker容器
本篇文章介绍的内容是关于在Linux机器上创建,列出和删除docker容器,下面我们来看具体的内容. 我的官方群点击此处 1.启动Docker容器 使用下面的命令启动新的Docker容器.这将启动一个 ...
- 如何在 Linux 上安装服务器管理软件 Cockpit
如何在 Linux 上安装服务器管理软件 Cockpit Cockpit 是一个自由开源的服务器管理软件,它使得我们可以通过它好看的 web 前端界面轻松地管理我们的 GNU/Linux 服务器.Co ...
最新文章
- android网络请求回调管理,Android HTTP网络请求的异步实现
- mysql数据库语法_MySQL数据库语法(一)
- 10问10答:你真的了解线程池吗?
- 2017.9.28 lca 失败总结
- Windows系统创建符号链接文件
- MS CRM 2011实施指南5.20版已经发布
- Django组件 中间件
- 微型计算机普遍采用的数字编码是,计算机原理复习题1
- java64位安装包下载_java64位安装包
- 智慧体检中心管理系统方案/APP/小程序/公众号/网站
- lodash中curry的实现
- Linux运维工程师必备工具合集
- 高登学苑-解密携程4.9分的秘诀学习笔记
- python尼姆游戏_python实现聪明的尼姆游戏(人机对战)
- 何恺明团队新作FLIP:通过Masking扩展语言-图像预训练
- 年轻人说“接受自己的平庸”,八成是自欺欺人
- python根据时间序列画折线图_Python cufflinks 绘制折线图,时间序列,子图:简单,很快,很酷,还会动,从此 seaborn 是路人...
- A+B=X【浙江工商大学oj 详细解析版】
- 图像类找工作面试题(二)——常见问题大总结
- 山东哈斯精密机械有限公司