如何在Linux上使用VIM進行.Net Core開發

来源:http://www.cnblogs.com/zkweb/archive/2017/08/07/7298996.html
-Advertisement-
Play Games

對於在Linux上開發.Net Core的程式員來說, 似乎都缺少一個好的IDE. Windows上有Visual Studio, Mac上有Visual Studio for Mac, 難道Linux只有Visual Studio Code了嗎? Linux上有兩個最好的編輯器: VIM和Emac ...


對於在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_commands
    autocmd!
    autocmd FileType cs call s:SetCSharpOptions()
    setlocal omnifunc=OmniSharp#Complete
    fun! s:SetCSharpOptions()
        autocmd BufEnter,TextChanged,InsertLeave *.cs SyntasticCheck
        autocmd 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切換buffer
        nnoremap <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+=menu
        set completeopt+=menuone
        set completeopt+=noinsert
        autocmd InsertCharPre * call s:TypeComplete()
        fun! s:TypeComplete()
            if pumvisible() && v:char !~ '\.'
                return ''
            endif
            if v:char =~ '\(\K\|\.\)'
                call feedkeys("\<C-x>\<C-o>", 'n')
            endif
        endfun
    endfun
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.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 通過創建自定義Tag Helpers,我們可以擴展現有元素或創建我們自己的元素。 ...
  • ASP.NET Core Tag Helpers系列目錄,共四篇: "ASP.NET Core MVC – Tag Helpers 介紹" "ASP.NET Core MVC – Caching Tag Helpers" "ASP.NET Core MVC – Form Tag Helpers" " ...
  • IdentityServer4 是一個提供 認證服務,單點登錄/登出(SSO),API訪問控制,聯合認證通道的可定製、免費商業支持的框架。 ...
  • 我對ASP.NET CORE瞭解不多,不知道是不是重覆造輪子,也或者什麼也不是,這個Demo是這樣的: 1、非常簡單或者說原始;2、將單頁Web應用增加了一個頁(Page)概念(相當於MVC的 View) 3、Ajax無刷新跳轉到新 Page,並支持H5瀏覽器刷新 Page、前進後退到其它 Page ...
  • 本文將在asp.net core api 項目中使用efcore corefirst模式 簡單配置鏈接sqlserver資料庫,以及簡單的資料庫遷移操作 一 新建項目 1. 首先我們先用vs2017 創建一個空的 asp.net core api 項目 2. 在生成的解決方案下在建立一個訪問資料庫使 ...
  • string轉byte[]:byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str ); byte[]轉string:string str = System.Text.Encoding.Default.GetString ( by ...
  • 下載地址:https://www.microsoft.com/en-gb/download/details.aspx?id=7211 1.啟動IIS管理器,然後點擊左側的伺服器名稱,(註意:不要點擊網站下的站點或虛擬目錄,否則找不到下麵的” Enable Advanced Logging”); 2. ...
  • 創建始終為最新狀態、具有吸引力的互動式報告 Power BI Embedded 使你可以針對 Power BI Desktop 中的應用程式數據創建有影響力的互動式數據可視化,而無需編寫任何代碼。通過形式自由的拖放式畫布輕鬆瀏覽你的應用程式數據,並使用公式和關係式生產豐富的數據模型。直接從各種新式 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...