Setting up Unity with Vim or VS Code on Linux


The following has been tested on Ubuntu and Arch, although it should work for any distro – just change package names accordingly.

screenshot

If you want to use Vim, feel free to skip the VS Code section – although I’d still recommend setting that up to confirm Mono and OmniSharp are working properly.

Mono    

Arch: mono via pacman. Additionally, having mono-msbuild and mono-msbuild-sdkresolver installed has helped in some cases where OmniSharp wouldn’t start properly.

Ubuntu: Install Mono as described here. I’m pretty sure msbuild is shipped along with the above download.

.NET SDK    

Ubuntu: Install via snap:

sudo snap install --classic dotnet-sdk

VS Code might be unable to locate the dotnet-sdk if installed via snap. You can simply fix it by runnig sudo snap alias dotnet-sdk.dotnet dotnet.

Arch: dotnet-sdk via pacman.

(Skip to Vim)

VS Code    

Ubuntu: Install non-Snap VS Code via the .deb package from here.

sudo apt install ./code*.deb

Arch: Install visual-studio-code-bin from AUR (to get access to all extensions). (More info in the Arch Wiki)

In VS Code: Install the following extensions (File -> Preferences -> Extensions):

  • C# (Microsoft)
  • Unity Code Snippets (Kleber Silva)
  • Unity Snippets (Ycleptic Studios)
  • Unity Tools (Tobiah Zarlez)

Either search for each extension, or install them by running:

code --install-extension ms-dotnettools.csharp
code --install-extension kleber-swf.unity-code-snippets
code --install-extension twxs.cmake
code --install-extension Tobiah.unity-tools

In VSCode’s settings (File -> Preferences -> Settings):

  1. Search omnisharp.path, hit Edit in settings.json, and set it to "latest".
  2. Search omnisharp.useGlobalMono and set to always.
  3. Search omnisharp.useModernNet and uncheck the box.

The extensions will automatically download omnisharp. You should be able to see progress in the Output window of VS Code, if not, it might be a good idea to restart VS Code.

Unity    

On Ubuntu, use the Unity Hub AppImage from here. On Arch, install unityhub. You can find more detailed setup instructions here.

From the Unity Editor, in Edit -> Preferences -> External Tools select VSCode (likely /usr/bin/code). Below, tick the following:

  • Embedded packages
  • Local packages
  • Git packages
  • Built-in packages

and hit Regenerate Project Files.

Issues opening files    

You should be able to double click on the .cs files from within Unity and have VS Code open the file. On some systems there’s an issue where VS Code opens some weird paths with quotation marks in them.

To fix this, open up VS Code by yourself, click File -> Open Folder and select your project directory (the one with the Assets directory in it). VS Code should now ask you which project to open. Choose the .sln file and you should be good to go.

That’s it!    

Now, your VS Code should be smart! Hovering over Unity stuff should display documentation, as seen below.

screenshot

Bonus Round: Vim    

Note: I use neovim. The following has not been tested with regular vim.

To set up neovim integration, I use CoC.

If you use plugged, add the following line to your init.nvim:

Plug 'neoclide/coc.nvim'

Since the coc-omnisharp extension is deprecated, we’ll instead use the csharp-ls language server.

On Arch, csharp-ls can be installed from AUR.

After installing, adapt the languageserver section of your coc-settings.json as follows:

  "languageserver": {
    "csharp-ls": {
      "command": "csharp-ls",
      "filetypes": ["cs"],
      "rootPatterns": ["*.csproj", ".vim/", ".git/", ".hg/"]
    }
  }

On startup of neovim, the language server will look for the .sln file. Until I figure out a workaround, this means the editor needs to be started from the Unity project’s root directory.

If it doesn’t work, remember to generate the project files in Unity!

2025 Update: Unity Auto-Reloading Bug Workaround    

Sometime this year, a bug started appearing where Unity would not auto-reload after scripts or assets had been changed.

The workaround, as described in this forum post, is to wiggle your mouse cursor in and out of the Unity editor window until the reload is triggered.

On Ubuntu, it seems the issue has been fixed, but not for me on Arch.

So this is what I do all day long:

The state of Unity development on Linux in 2025.

Comments    

This post evolved from a GitHub Gist. Feel free to post any comments or additions there. Also, thanks to @jreeee for the Snap Alias tip :)