如何在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跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P2517-订货【网络流,费用流】

正题 AC链接&#xff1a; https://www.luogu.org/record/show?rid7949532 大意 有n个月&#xff0c;每个月商品价格di&#xff0c;需求量Ui。有容量为S的仓库&#xff0c;一个商品汇存一个月要m。求最低成本 解题思路 首先是月份做为点&#xff0c;成本作为费用&#xff0…

教学交流研讨会总结(一)

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。最近&#xff0c;我的个人站上线啦&#xff0c;大家可以直接在浏览器的地址栏中输入&#xff1a;穆雄雄.com&#xff0c;轻轻敲击回车&#xff0c;即可直接进入……

JFreeChart(五)之XY图

转载自 JFreeChart XY图 在xy图(散点图)是根据一个数据系列组成的x和y值的列表。每个值对(x&#xff0c;y)是坐标系中的一个点。这里1值确定水平(X)位置&#xff0c;而另一个确定垂直(Y)位置。本章演示了如何使用JFreeChart从一个给定的业务数据创建XY图表。 业务数据 考虑…

服务环境搭建

文章目录Nacos服务搭建一、nacos-server 环境搭建二、nacos-mysql 环境搭建三、建 领域模型REST访问配置&#xff08;给其他语言使用&#xff09;四、nacos-server 集群搭建Nacos服务搭建 一、nacos-server 环境搭建 1、 [nacos-server主机]&#xff08;考虑到后续开发的问题…

p2762-太空飞行计划问题【网络流,最大权闭合图,最小割】

正题 AC评测记录链接&#xff1a; https://www.luogu.org/record/show?rid7965757 大意 有nn个实验,有m" role="presentation">mm个实验器材的集合GG。完成第i" role="presentation">ii个实验可以获得cici元&#xff0c;第ii个实验需…

ASP.NET Core 源码学习之Logging[1]:Introduction

在ASP.NET 4.X中&#xff0c;我们通常使用 log4net, NLog 等来记录日志&#xff0c;但是当我们引用的一些第三方类库使用不同的日志框架时&#xff0c;就比较混乱了。而在 ASP.Net Core 中内置了日志系统&#xff0c;并提供了一个统一的日志接口&#xff0c;ASP.Net Core 系统以…

全国教学交流研讨会“教学为本”主题总结

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。最近&#xff0c;我的个人站上线啦&#xff0c;大家可以直接在浏览器的地址栏中输入&#xff1a;穆雄雄.com&#xff0c;轻轻敲击回车&#xff0c;即可直接进入……

JFreeChart(六)之3D饼图/条形图

转载自 JFreeChart 3D饼图/条形图 三维/3D图表是那些显示在一个三维格式。可以使用这些图表来提供更好的显示效果和清晰的信息。三维/3D饼图是饼图另外一个不错的3D效果。 3D效果可以通过添加一些额外的代码来实现&#xff0c;它会创建一个饼图3D效果。 3D饼图 请看下面的…

P2598-狼和羊的故事【最大流,最小割】

正题 评测记录&#xff1a; https://www.luogu.org/recordnew/lists?uid52918&pidP2598 大意 有n*m的矩阵&#xff0c;里面有羊和狼(也有可能是空)&#xff0c;可以在两个格子之间围上篱笆让两个格子不能互相到达&#xff0c;要求狼的格子不能和羊的格子在同一个联通块…

.NET Core 2.0 正式发布信息汇总

万众瞩目的.NET Core 2.0终于发布了&#xff0c;原定于9.19的dotnetconf大会的发布时间大大提前了1个月&#xff0c;.NET Core 2.0/.NET Standard 2.0的正式发布是.NET 开源跨平台的一个重大里程碑&#xff0c; 可以激活庞大的10几年以来各大公司和社区.NET 平台上的投资&#…

JFreeChart(七)之气泡图表​​​​​​​

转载自 JFreeChart气泡图表 本章演示如何使用JFreeChart从一个给定的业务数据创建气泡图表。使用气泡图显示在三维方式的信息。气泡绘制在其中(x&#xff0c;y)坐标相交的地方。气泡的大小被认为是范围或X和Y轴的数量。 业务数据 考虑不同的人的年龄&#xff0c;体重和工作…

家校共建,用心教学

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。最近&#xff0c;我的个人站上线啦&#xff0c;大家可以直接在浏览器的地址栏中输入&#xff1a;穆雄雄.com&#xff0c;轻轻敲击回车&#xff0c;即可直接进入……

2018/7/6-纪中某C组题【jzoj1192,jzoj1397,jzoj1736】

前言 全体爆零&#xff0c;十分开心 正题 T1&#xff1a;矩阵 大意 就是N个矩阵&#xff0c;然后进行矩阵乘法(n∗mn∗m和m∗pm∗p的矩阵相乘就会变成n∗pn∗p的矩阵并且运算次数是n∗m∗pn∗m∗p)&#xff0c;然后求最小乘法运算次数。 考试时 一直以为会是图论&#xff…

ASP.NET Core - Razor页面之Handlers处理方法

简介 在前一篇文章中&#xff0c;我们讨论了Razor页面。今天我们来谈谈处理方法&#xff08;Handlers&#xff09;。我们知道可以将代码和模型放在 .cshtml 文件里面或与 .cshtml 匹配的 .cshtml.cs 文件中。Razor页面处理程序或处理方法将用户请求匹配到我们的方法&#xff1…

JFreeChart(八)之时序图

转载自 JFreeChart时序图 时序图表显示的数据点在相等的时间间隔序列变化。本章演示了如何从一个给定的业务数据使用JFreeChart&#xff0c;建立时序图。 业务数据 让我们考虑通过使用标准 Java API 的 Math.random()产生的各种随机数。我们使用这些数字产生一个时间序列图…

立德树人

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。最近&#xff0c;我的个人站上线啦&#xff0c;大家可以直接在浏览器的地址栏中输入&#xff1a;穆雄雄.com&#xff0c;轻轻敲击回车&#xff0c;即可直接进入……

.NET Standard 2.0 特性介绍和使用指南

前言 早上起来.NET社区沸腾了&#xff0c;期待已久的.NET Core 2.0终于发布&#xff01;根据个人经验&#xff0c;微软的产品一般在2.0时会趋于成熟&#xff0c;所以一个新的.Net开发时代已经来临&#xff01;未来属于.NET Core。 对于.NET Core 2.0的发布介绍&#xff0c;围绕…

2018/7/7-纪中某C组题【jzoj1494,jzoj1495,jzoj1496,jzoj1497】

前言 290卡成145&#xff0c;十分开心。 正题 T1&#xff1a;密码 大意 N个数乘起来 考试时 看起来十分简单的高精乘单精 解题思路 10241024其实是10241024高精乘高精了解一下&#xff0c;30分QAQ 代码(高精乘高精我就不解释了吧) #include<cstdio> #include<…

加油四班!加油佟穆!我们的征途是星辰大海!!!

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号【雄雄的小课堂】首先&#xff0c;感谢佟老师与范老师&#xff0c;在我不在的时候&#xff0c;三班的就业和四班的学习都落在了两位老师的肩头&#xff0c;其次&#xff0c;还需要特别感谢冯老师&#xff0c;能抽时间…

JFreeChart(一)之架构

转载自 JFreeChart架构 本章介绍给大家介绍 JFreeChart 不同类中如何交互的概念, JFreeChart基本类层次和应用水平的架构在基于Java应用程序如何工作的。 类层次架构 类层次架构解释了如何把不同阶层的相互库交互&#xff0c;以创建不同类型的图表。 以下是在上述框图中使用…