Language syntax, IntelliSense and build system for Nullsoft Scriptable Install System (NSIS).
Screenshot of NSIS in Visual Studio Code with Hopscotch theme
- Language syntax for NSIS and NSIS Language Files
- IntelliSense for core NSIS commands, variables and predefines
- IntelliSense for core plug-ins:
- AdvSplash
- Banner
- BgImage
- Dialer
- InstallOptions
- LangDLL
- Math
- nsDialogs
- nsExec
- NSISdl
- Splash
- StartMenu
- System
- UserInfo
- VPatch
 
- IntelliSense for core libraries (“Useful Headers”):
- FileFunc
- LogicLib
- Memento
- Modern UI
- MultiUser
- Sections
- StrFunc
- WinMessages
- WinVer
- WordFunc
- x64
 
- NSIS Diagnostics
- Drunken NSIS
- Build Tools
- Environment Variables
You can further extend NSIS support with IntelliSense for third-party plug-ins.
Launch Quick Open, paste the following command, and press Enter
ext install idleberg.nsis
With shell commands installed, you can use the following command to install the extension:
$ code --install-extension idleberg.nsis
Download the packaged extension from the the release page and install it from the command-line:
$ code --install-extension path/to/nsis-*.vsixAlternatively, you can download the packaged extension from the Open VSX Registry or install it using the ovsx command-line tool:
$ ovsx get idleberg.nsisChange to your Visual Studio Code extensions directory:
Windows
# Powershell
cd $Env:USERPROFILE\.vscode\extensions:: Command Prompt
$ cd %USERPROFILE%\.vscode\extensionsLinux & macOS
$ cd ~/.vscode/extensions/Clone repository as idleberg.nsis:
$ git clone https://github.com/idleberg/vscode-nsis idleberg.nsisInside the cloned directory, install dependencies using your preferred Node package manager:
$ npm installBuild the source:
npm run buildWith most commands, you can specify available options before completion. For instance, rather than completing RequestExecutionLevel and then specifying an option, you can directly choose RequestExecutionLevel user from the completion menu.
To complete compile time commands, variables or predefines, make sure to omit special characters like !, $ and brackets:
- includecompletes to- !include
- INSTDIRcompletes to- $INSTDIR
- NSIS_VERSIONcompletes to- ${NSIS_VERSION}
However, you have to type __LINE__ to complete to ${__LINE__}.
There are several special cases for your convenience:
- MB_OKcompletes to- MessageBox MB_OK "messagebox_text"
- onInitcompletes to a- Function .onInitblock
- LogicLibcompletes to- !include "LogicLib.nsh"
Fuzzy syntax completions are available through “Drunken NSIS”, which tries to iron out some of the inconsistencies in the NSIS language, for instance word order.
Examples:
Interchangable word order of NSIS language and library functions
- ReadFilecompletes to- FileRead
- INIStrReadcompletes to- ReadINIStr
- SetSectionTextcompletes to- SectionSetText
- SetLogcompletes to- LogSet
- FirstFindcompletes to- FindFirst
- ${LineFind}completes to- ${FindLine}
Before you can build, make sure makensis is in your PATH environment variable. Alternatively, you can specify the path to makensis in your user settings.
Example:
{
	"nsis.compiler.pathToMakensis": "C:\\Program Files (x86)\\NSIS\\makensis.exe"
}To trigger a build, select NSIS: Save & Compile” from the command-palette or use the default keyboard shortcut Ctrl+Shift+B. The strict option treats warnings as errors and can be triggered using Ctrl+Alt+Shift+B.
You can tweak your default settings by editing your user settings.
If you prefer Visual Studio Code's built-in Task Runner to build scripts, you can create tasks.json in the project root using the NSIS: Create Build Task command from the command-palette.
Note: The created Task Runner will adapt to the user settings specified in settings.json.
This extension supports a variety of ways to provide environment variables such as NSISDIR or NSISCONFDIR. The following precedence applies:
- terminal.integrated.shell.*setting
- .envfiles
- system-wide environment variables
Note: Some operating systems require Visual Studio Code to be launched from terminal in order to access system-wide environment variables.
Additionally, you can pass special environment variables prefixed with NSIS_APP_ as definitions to your installer script.
Example
# .env
NSIS_APP_ENVIRONMENT=development# installer.nsi
!if ${NSIS_APP_ENVIRONMENT} == "development"
  DetailPrint "Valuable Debug Information"
!endifIf not otherwise specified (see below), files in this repository fall under The MIT License.
An exception is made for files in readable text which contain their own license information, or files where an accompanying file exists (in the same directory) with a “-license” suffix added to the base-name name of the original file, and an extension of txt, html, or similar. For example “tidy” is accompanied by “tidy-license.txt”.
