#+TITLE: C# contribution layer for Spacemacs [[file:img/csharp.png]] [[file:img/dotnet.png]] * Table of Contents :TOC@4: - [[#description][Description]] - [[#packages-included][Packages Included]] - [[#install][Install]] - [[#prerequisites][Prerequisites]] - [[#aspnet-5][ASP.NET 5]] - [[#curl][curl]] - [[#omnisharp-server][Omnisharp server]] - [[#caveats][Caveats]] - [[#key-bindings][Key Bindings]] - [[#compilation][Compilation]] - [[#filesolutionproject-manipulation][File/Solution/Project manipulation]] - [[#navigation][Navigation]] - [[#helpers-documentation-info][Helpers (documentation, info)]] - [[#refactoring][Refactoring]] - [[#omnisharp-server-interaction][OmniSharp server interaction]] - [[#tests][Tests]] - [[#code-manipulation][Code manipulation]] * Description This layer adds experimental support for C# language using [[https://github.com/OmniSharp/omnisharp-emacs][OmniSharp]]. * Packages Included - [[https://github.com/OmniSharp/omnisharp-emacs][OmniSharp-emacs]] - [[https://github.com/OmniSharp/omnisharp-server][OmniSharp-server]] * Install To use this contribution add it to your =~/.spacemacs= #+BEGIN_SRC emacs-lisp (setq-default dotspacemacs-configuration-layers '(csharp)) #+END_SRC ** Prerequisites *** ASP.NET 5 Follow the instructions for your platform [[https://github.com/aspnet/home#getting-started][here]]. *** curl You'll need [[http://curl.haxx.se/][curl]] to be able to use the Omnisharp package. Use your favorite package manager to install it (on Windows you can use [[https://chocolatey.org/][chocolatey]]). Be sure to make the =curl= binary available to your PATH environment variable, or set the variable =omnisharp--curl-executable-path= in your dotfile function =dotspacemacs-config=: #+BEGIN_SRC emacs-lisp (setq-default omnisharp--curl-executable-path "/PATH/TO/CURL/curl") #+END_SRC *** Omnisharp server You have to compile the OmniSharp server following the instructions which can be found [[https://github.com/OmniSharp/omnisharp-server][here]]. Don't forget to add the server binary directory to your system PATH environment variable. The full path the binary can also be directly referenced in the variable =omnisharp-server-executable-path= (put this in your =dotspacemacs-config= function): #+BEGIN_SRC emacs-lisp (setq-default omnisharp-server-executable-path "/PATH/TO/OMNISHARP/OmniSharpServer") #+END_SRC OmniSharp should now automatically load and start a server when you open a =.cs= file. * Caveats - It's currently not possible to create a C# solution outside of an IDE such as [[http://www.monodevelop.com/][MonoDevelop]], it's therefore recommended that you install it to create your solutions. - Debugging is possible using [[https://github.com/mono/sdb][SDB]]. * Key Bindings ** Compilation | Key Binding | Description | |-------------+--------------------| | ~mcc~ | Build the solution | ** File/Solution/Project manipulation | Key Binding | Description | |-------------+-----------------------------------------------| | ~mfa~ | Add the current file to solution | | ~mfA~ | Add files selected in dired to solution | | ~mfr~ | Remove the current file from solution | | ~mfR~ | Removed files selected in dired from solution | | ~mpl~ | Add reference to solution | ** Navigation | Key Binding | Description | |-------------+-----------------------------------------------| | ~mgf~ | Go to solution file | | ~mgF~ | Go to solution file then member | | ~mgg~ | Go to definition | | ~mgG~ | Go to definition in other window | | ~mgi~ | Find implementations | | ~mgm~ | Go to solution member | | ~mgM~ | Go to solution member in other window | | ~mgr~ | Go to region | | ~mgs~ | Find symbols using Helm | | ~mgu~ | Find usages of symbol under cursor using Helm | ** Helpers (documentation, info) | Key Binding | Description | |-------------+------------------------------------------------------------------------| | ~mht~ | Get type information for symbol under cursor | | ~mhT~ | Get type information for symbol under cursor and put it into kill-ring | ** Refactoring | Key Binding | Description | |-------------+------------------------------| | ~mrm~ | Rename symbol under cursor | | ~mrr~ | Refactor symbol under cursor | ** OmniSharp server interaction | Key Binding | Description | |-------------+----------------------------| | ~msr~ | Reload the solution | | ~mss~ | Start the OmniSharp server | | ~msS~ | Stop the OmniSharp server | ** Tests | Key Binding | Description | |-------------+---------------------------------------| | ~mta~ | Run all tests in project | | ~mtb~ | Run all tests in current file/fixture | | ~mtt~ | Run test under cursor | ** Code manipulation | Key Binding | Description | |-------------+---------------------------| | ~mo~ | Auto complete overrides | | ~mi~ | Fix usings/imports | | ~m=~ | Format the current buffer |