把一个最强的 NSIS 脚本编辑工具变得更加强大，令到 NSIS 脚本编辑更加趋于简单。

关于 NSIS 是什么来的，还有相关语法的中文帮助，可以到以下网址看看。
http://foobar.nease.net/nsis/
(包含相关范例，NSIS 编译器的中文版，非固实安装修改版的编译器等等)

关于 NSIS 功能强大的插件，除了在安装制作程序中包含的插件外，你可以到以下网址找到功能更加多样化的插件。
http://nsis.sourceforge.net/wiki/Category:Plugins
(包含了现今安装程序大都需要的功能)

该版本为修改版，所有产生的错误原则上不是由 NIS Edit 原作者产生，对错误的产生如有任何疑问，可在以下论坛帖子提出： http://bbs.hanzify.org/index.php?showtopic=30423

同时，这个修改后的版本，也不会承担任何用户在使用过程中产生错误而造成的损失。

版本历史：

build 050125
1.基于 NIS Edit 2.0.2 重新编译。
改名为 VNISEdit.exe 可以和原版 NIS Edit 置于同一目录下。
2.添加一种菜单的皮肤。
3.增加 NSIS 函数向导功能。
你可以自行添加脚本。（在目录下的 functions.vns）
可以选目录，选文件，选预定参数……
4.改程序调用帮助时，不要把帮助窗口置顶，因为置顶会令到查看帮助时不能切换回编辑器窗口。
5.NSIS 脚本区段结构分析（一个能真实反映你程序到时候会出现的组件选择构图）。
双击视图的项可以定位到相关区段。
脚本代码线程实时分析，随代码改动自动更新视图
6.汉化一些没有汉化的菜单，对话框。
7.修改工具栏显示的按钮提示。
8.修正鼠标移到函数上面时，提示显示只会是在函数的正下方（位置不会随意显示）

build 050202
1.修正 区段视图 的 BUG，暂时措施，禁止了不完整TreeNode显示时的hint出现，会导致程序崩溃。所以暂时禁止，以后想办法解决。
2.修正 !else ifdef 等等的分析。
3.修正 参数占用了名字的区段视图分析的问题。
4.修正函数向导中的两个 BUG。（再提一下，有没有人有空完成一下那个程序目录下的 function.vns 的脚本，因为里面的函数并不全，令到这个函数向导功能失色不少）
5.改文本块缩进快捷键为 Tab，取消缩进为 Shift+Tab，这里说明一下，这样设定并不影响代码输入时输入 Tab 字符。这样就感觉功能更好了。
编译并运行改为 F9，运行程序改为 Shift+F9 跟随 Delphi，呵呵，我习惯了，没办法，你不喜欢可以在 Lang\Chinese_Simplified.lng 这个文件里改，想怎么改都可以。
6.按 F1 时，光标可任意定位，只拿一行中的第一个关键词作为帮助的检索对象，不过可能有人不喜欢这样，所以这个做成一个选项，在选项中勾选。
7.增加文本块的整块注释和取消注释的功能。
8.修正不能另存为其他类型文件的BUG。（这个BUG是重新编译时出现的）（至于另存为html时不支持中文文字，那个问题原版也有，有空看看它的问题在哪里）
9.文件Tab列表。（此项默认不打开，在菜单下选择打开）
10.汉化发现的还没有汉化的地方。

build 050203
1.修正注释文本与取消注释文本的BUG。
2.修正函数向导中的拖放的BUG。
3.增加一个默认用自动换行方式打开脚本的选项，这个不知道是不是作者漏了，我发现代码中有它的选项，但是却没有在程序界面上让用户选择。
4.修正在区段视图中双击鼠标时出现的定位很难发现的问题（虽然定位准确，而且指定定位那行显示在编辑器中第二行，但是在自动换行模式下那一行很难确定在第2行，所以稍微做个行显示，容易发现而已）。
（以上问题有点麻烦，所以先放个修正版出来，再去实现关键字自动完成功能，毕竟自动完成这个功能要花点时间）

build 050206
1.修正视图结构图刷新时的一些BUG，这个BUG可能使视图不能正常显示，要重新打开程序才恢复正常。
2.修正在窗口切换时，保留当前视图的位置，重新切换回时，还是保留原来的视图位置样子。
3.修正鼠标移到函数上时的 hint 提示的准确位置，在换行模式下，有缩进 Tab 字符时都能准确定位显示。
4.修正函数向导插入函数时，检测上一行缩进的时候包括检测 Tab 字符（默认插入方式）。并且如果按住 Ctrl 键时，函数放置位置会插在光标所在位置。
5.修正导出另存为 HTML 和 RTF 文件的中文支持，Html网页包括 gb 和 big5 的支持，随选择的界面语言变化。并修正 html 文件中的字串可以自动换行，免得字符串把网页撑宽了。RTF 只处理了 GB 码的支持。因为 RTF 的格式不是太熟悉，=_=|||
（由于 nsis 2.05 的 SubSection 改成了 SectionGroup ，所以造成结构图的分析有误，这个版本暂时不能正确分析 nsis 2.05 的脚本）

build 050206（修正）
1.在我的电脑上怎么也试不出错误，暂时使用猜测的方法来修正错误。把之前在线程代码分析里面抽出来的代码重新移回去，因为估计可能这些代码跟线程内代码同步运行会引发未知错误。
2.增加 nsis 2.05 中的 SectionGroup 的支持，原 SubSection 仍然支持，保留对旧版本脚本的支持。
3.语法高亮增加 SectionGroup SectionGroupEnd 关键字，帮助关联也增加了这两个关键字。
4.修正 Section 不输入名称时不能检测到该区段的BUG。没有名称的 Section 在结构图中会显示“-”。

build 050209
1.再次修正脚本结构视图分析，这次用的是超多条件判断的脚本文件“C:\Program Files\NSIS\Include\LogicLib.nsh”来测试。
2.自动完成功能，^_^。
自动检测最新的 NSIS 命令支持，列出的是你当前 NSIS 所支持的命令，所以，你的电脑必须安装 NSIS 否则自动完成功能是不会出现的。
这是刚发现的，NIS Edit 是随 NSIS 升级而提供全面的命令提示支持的(直接由 makensis 提供命令解释)。
自动完成的提示框是可以自己随意调整大小的。这个功能超级好玩，不过自动完成后，还没有自动出现命令的参数内容提示，不完美，这个正在努力研究。有点信心，可惜实力不足，所以只能说研究研究。呵呵。
操作方式: 输入命令的第一个字母，等0.7秒，如果不等，直接输入，提示框不会弹出。弹出提示框后，会自动筛选。

build 050211
1.修正自动完成功能的小小BUG。
2.自动完成框中的字体跟随 Windows 中 hint 的字体。
3.自动完成后，会出现函数的提示。超级酷~~
输入自动完成后，会自动出现提示，提示只有在换行的时候才会消失。另外，在任何可识别的NSIS命令后打空格，同样会出现这个提示框。呵呵。

build 050212
1.修正：例如：SectionEnd 之类的命令，在后面打空格，也不会出现参数提示，因为这类命令根本没参数。另外，在可识别命令的后面的空白地方按 Ctrl+Shift+Space 也可以调出参数提示。
2.修正：例如：$(^NameDA)之类的语法高亮显示。
3.修正：在左边行号显示区不会检测到编辑区的命令而调出显示命令的参数的提示。
4.在行号区点击左键会选择所在行。

build 050212-2
1.修正在行号区点鼠标选择最后一行时不能选择的BUG。在行号区拖动鼠标选择时不是选择一片区域的 BUG。
2.调整精简部分自动完成的代码，请测试，改动后未认真测试，有问题的请提出来。
3.修正视图分析中单引号的在名字显示中的去除。“'”和“`”
4.优化视图分析代码，使它的分析的视图闪烁度降到最低，基本除了加入一些会改变视图结构的元素外，其他改变都不会令到视图在你眼前闪烁，我可不想在我编程的时候，视图还在闪啊闪的，影响我想东西啊，保护视力哦，呵呵，完美实现。(未经详细测试，如有问题请提出)
5.进一步优化吧，命令输入自动调整，当你很多时候都使用相同的那几个命令时，VNISEdit 会为你自动把经常用的放到最前面，呵呵，其实我很懒，每次输入的时候都想只打一个字符就算输入完成了。(如附图，Section 和 SectionEnd 输入过一次之后，第二次就会出现在前两位)
6.任何时候按“Ctrl+J”都可以调出自动完成的窗口。

build 050213
增加一个脚本文件 funcparams.vns （又要希望有心人来帮忙了  ）
实现命令参数的自动完成，脚本工程超级巨大，所以我也就是作了两个而已。

build 050301
这次的修改仍然没有涉及到向导部分。主要是把 NIS Edit 自身功能完善一下。
1.完整的中文显示修正，不再显示乱码，呵呵，始终是中国人，半个的方块字也不能不是中文的(在左边边界超出区域外的半个中文字不再显示，在右边边界的半个中文字能正确显示)，去除提示对话框中中文句子最后自动添加的句点(看着不顺眼啊)
2.显示缩进竖线。
3.修正了自动完成的BUG，现在任何时候(包括光标在关键字里面)按 Ctrl+J 都可以弹出自从完成窗口，在参数提示时弹出的是参数提示窗口。
4.添加插件，reg2nsi(蓝色网际编写)，添加文件插件(功能比较完整 ^_^，顺手汉化了)，ISS2NSI(一个把 Inno Setup 3.06 脚本转换成 NSIS 脚本的插件，年代已久，估计用处不大，仅供参考)
5.修正一个脚本结构分析线程中的一个同步运行代码的问题，重新打开 TreeView 的 Hint 显示，希望这次不要出错啦。

Build 050302
1.前次因为搞显示中文的时候没有注意会令到自动换行的时候会在行末显示一个非正常文字，现在修正。
2.修正缩进竖线显示的一个问题，某些时候会有点显示混乱。
3.重新规划自动完成功能，基本按照如下操作：当在一个空白行中，输入第一个命令字母，等0.7秒，然后提示框会出现，输入空格命令自动完成，然后会自动出现命令提示(Hint)，然后后面的参数提示框基本按照前面命令提示框的出现方法。但是，参数提示框的弹出一定要在命令提示(Hint)出现的时候才会起作用，所以，你想命令提示(Hint)出现可以按(Ctrl+Shift+Space)，注意命令提示的出现已经改成在一行中的首个关键字后的任何地方都可以按，不一定要在命令后的空格位置按。至于 NSIS 命令提示框的自动完成功能也会检测这行中是否已经输入了首个单词(通常 NSIS 命令都是作为首个单词放在行首的)，如果之后输入的单词，将不会激发命令自动完成提示框。在这个时候，如果你想临时激活这个自动完成提示框，你必须按Ctrl+J按键。Ctrl+J 按键在命令提示(Hint)出现的时候，激活的是参数自动完成提示框。
4.更换最新的 Reg2Nsi(一个把*.reg注册表文件转化为 NSIS 脚本的东东，蓝色网际编写)

build 050320
1.稍微修改了一下缩进竖线的显示算法(隔一个空行的显示优化)。
2.添加蓝色网际编辑的function.vns
3.向导中添加闪屏的设置(如果没有设置渐显渐隐参数，会自动使用较低级的插件splash.dll，省去2KB的大小，不要说我太小气了哦)
(蓝色网际的VPatch关于补丁的向导插件，大家有兴趣可以直接在 http://bbs.hanzify.org/index.php?showtopic=32130 下载来用)
4.更改脚本结构视图的控件，因为该控件结构特殊，所以要连带分析代码一起优化，显示速度更惊人，就算脚本结构改变，视图变化时也不会造成闪烁。把函数向导的控件也换了，支持显示Hint，方便快速浏览该函数的简明帮助和简单语法。
5.工具菜单下增加一个“打开脚本所在文件夹”。
6.向导中文件可以选择多个来做删除操作，可以用Del键(以前只能单个删除，麻烦)，添加目录可以选择是否拆开单个文件添加和是否包含子目录，同样可编辑。(这部分迟些时候会来个大调整，把它搞得更加可视化，例如文件分组，在某一个组中是否打勾等等，包括VPatch的处理都会在这部分实现，目前先用着这个稍稍改善的东东)
7.修正 ShowStartup 窗口打开历史文件时出错的 BUG，这个原版没问题，是自己改代码的时候疏漏了。

build 050323
1.修正函数向导的一个错误。并把函数排序显示。
2.修正向导中闪屏脚本中的透明颜色(没有加“0x”)的错误。
3.修正一个由自动完成功能引起的关闭程序时出现的错误。
4.添加贯穿安装过程 MIDI 的设置。SDK 中的 MCI 调用。
5.修正窗口切换的时候，保留视图状态的一点不足。
6.修正编辑目录文件时关于包含子目录的小问题。
7.修正如果只选择一种语言时，不会添加显示语言选择窗口的代码。
8.修正在自定义制作窗口时关闭窗口出错的问题。(原版没有，自己修改代码出现的错误)
9.修正选项中取消语法显示时出现的错误(原版没问题，这是处理中文显示问题时触发的错误)。

build 050331
1.修正文件Tab列表错误。
2.修正 function 和 标记 的列表获取。(无注释，无重复)
3.向导里背景音乐可以选取多种类型的音乐(除 mid,rmi,wav 其他音乐文件应该都可以重复播放)，慎用，不要把安装程序做得太离谱，不符合 NSIS 小巧的优点。(这里只列出 mid wav wma mp3 rmi 可供选择，其实很多其他类型的音乐文件皆可播放，你可以自己尝试)

build 050402
基于 NIS Edit 2.0.3 重新编译，把 2.0.3 的新增功能全部添加到最新版的 VNISEdit 中。
附加修正：
1.允许直接编辑创建快捷方式时的目标文件，当指定安装一个目录下的所有文件时，这里没法选择单个文件，所以允许编辑。同时可选择多个快捷方式项进行删除操作。
2.修改后的脚本编译，再撤销，再编译，这时候脚本撤销的修改并没有提交，修正这个原版遗留的问题。

build 050405
1.实现 comments 段的分析。处理了一下视图的各项显示方式。
2. NSIS 命令自动完成选项设置。

build 050407
1.向导中多个快捷方式删除的错误修正。
2.修正斜体字显示问题。
3.修正: 自动完成功能中的热键呼出不受选项的限制，NSIS 命令: Ctrl+J，NSIS 命令提示: Ctrl+Shift+Space，NSIS 参数: Ctrl+Shift+J，选项中选择的只是限制了自动完成列表框的自动弹出。
4.修正区段视图的一点小问题。

build 050409
1.修正自动完成功能中的BUG，并且调整功能，把延迟弹出拆分为命令弹出和参数弹出各自设置，因为我比较喜欢参数以较快的速度弹出，省时间啊。添加了部分函数的参数，没时间，所以一点一点添加~~，不要认为这个功能没用哦，我看看怎么做一个参数带中文简明提示的，像 NSIS 命令自动完成的列表框那样的。目前还没有实现。
(PS: 迟些时候再改一改，把参数也作一个调整排序的功能，呵呵)
这个没什么的，如果你认为太烦人，可以在选项中把它禁止掉，这样还是可以用热键呼出的。
2.修正自定义窗体INI的问题。

build 050418
1.修正自动完成中的BUG。
2.修正区段视图的分析错误。
3.修正“使用边槽字体”选项不能记录状态的BUG，原版就有的问题。
4.向导脚本“卸载”区段脚本删除文件添加两种方式，1)简易方式，2)安全方式。
简易方式：基本上按照 makensis.nsi 中的卸载方式，安装目录下曾经安装过的子目录都使用 RMDIR /r 清除，安装目录根目录下安装的文件逐个删除，然后用 RMDIR 不带参数删除可能是空的安装目录。(至少解决了目前在选择带子目录的整目录安装的脚本中的关于卸载文件的完整性，无需自己再修改脚本)
安全方式：仍在开发中，暂时禁用。
5.VNISEdit 由这版开始不再默认支持 XP 界面，但是对于使用 XP 界面支持仍然不会出现问题的用户，也提供了一个重新打开 XP 界面支持的方法，具体看目录中的“关于XP界面支持.txt”文件。(该问题原版同样存在)
6.修正添加目录下文件时接受用户输入例如“*.txt”之类的通配符，而不会统一自动加入“*.*”通配符。修正添加目录时关于文件覆盖方式选择不对应的问题。
7.增加参数语法高亮显示: /date, /BRANDING, transparent, /gray, SET, CUR, END, ALT, CONTROL, EXT, SHIFT, ProductName, Comments, CompanyName, LegalCopyright, FileDescription, FileVersion, ProductVersion, InternalName, LegalTrademarks, OriginalFilename, PrivateBuild, SpecialBuild, un.custom, un.license, un.components, un.directory, un.instfiles, un.uninstConfirm, left, right, top, bottom, notext, IDD_LICENSE, IDD_DIR, IDD_SELCOM, IDD_INST, IDD_INSTFILES, IDD_UNINST, IDD_VERIFY
修正 $TEMPLATES, $RESOURCES_LOCALIZED 高亮显示问题。
8.更换 Reg2Nsi 插件。
9.基本完成参数的自动完成列表脚本。

build 050512
1.修正中文显示问题。
2.修正向导中关于添加整个目录文件使用通配符添加相关文件的BUG。向导中清除文件列表的BUG。

build 050515
1.优化脚本导出 HTML 的代码，打开速度加快，另外可以随编辑器的字体设置变化，跳格符宽度也随编辑器的设置宽度变化，添加行号。所有字体样式都会跟随编辑器设置，包括关键字，行号。
2.添加复制脚本为 UBB 代码。方便论坛发帖讨论时使用，颜色始终是代码查看的最好辅助。
3.增加 rtf 导出为 big5 内码脚本文件（随界面语言自动选择）。

build 050605
1.导出 HTML 时行号是否显示会随编辑器设置是否显示。
2.鼠标移到关键字上时，例如在注释中的时候，不再弹出提示。只会在有高亮显示的代码中才会弹出用法提示。
3.在“!INCLUDE”或“CALL”或“!INSERTMACRO”的跳转中，修正小手光标的显示只会在相关单词上显示，且只在该单词上点击才会跳转。并且做出 Delphi 的热点击的效果(Hot Link)，如图，在颜色设置那里也添加了一个 Hot Link 的颜色设置，纯粹的 Delphi 编程演练，无大作用。^^ 还有，跳转之后，会用粉红色标识那一行。
4.修正编辑器控件中关于修剪行尾空格可能会造成自动完成输入时关键字走位的问题。
5.添加选项设置自动完成列表中是否显示标题。贴近 Delphi 编辑器效果
6.添加复制和导出选项，可能在别的论坛发UBB代码需要[code]来引用。
7.在“!INCLUDE”或“CALL”或“!INSERTMACRO”的跳转中，记录跳转位置，方便返回原来的位置。

build 050606
修正新功能带来的几个BUG。

build 050806
1.修正无语法高亮显示时的中文显示问题。
2.修改区段视图为默认页签，因为估计它的使用频率要比“窗口”页更大。
3.修正 HotLink 关键字在某些时候显示错位问题。
4.编译错误提示按多语言(在文件 VNISEdit\Config\CmpParsing.ini 中设置不同语言的错误提示)检索语句然后定位脚本中错误位置，方便适应任何语言版本的编译器。
5.修正脚本编辑时的撤消重做的问题(某些时候全部撤销后脚本应该是改变了，但是却不能保存)。
6.设计窗口可以使用 Del 删除控件，视图支持控件显示，双击定位。包括在 ini 脚本中的定位。在可视化设计中或者 ini 脚本中的修改，都会实时在视图中显示出来。
修正设计窗口某些时候失去焦点，造成点击控件没反应的问题。
7.InstallOptions 窗口可视化属性添加“RTL”属性设置。(右向左阅读)，还有，窗口属性如果选择 Default 将会清除 ini 文件中的该项属性设置。修正：ICO 和 BMP 控件 Text 属性点击弹出的会是对话框选择图片，而不是一个文本编辑框。
8.脚本向导压缩方式增加固实方式的选择。默认压缩算法使用 LZMA。修正：如果选择无压缩，就会添加 SetCompress off 关闭压缩。

build 050807
1.修正可视化编辑时视图产生的一点小问题。
2.安装向导修正：
-- 当 VNISEdit 使用中文界面时，向导使用 SimpChinese 为默认安装界面语言。
-- 向导里面的注释全部改为在语言文件中设置，适合改为多语言注释。以后向导的注释添加规则：如果NSIS帮助里面没有解释的，我一定会添加简单注释(语言文件中实现，方便改为多语言)，如果帮助里面有的，例如 NSIS 的常用命令，我不一定添加注释，因为可以按 F1 获取该命令的相关解释。
-- 传统安装界面添加 xp 风格的选项
-- 传统安装界面选择多语言后也会添加一个多语言选择对话框。
-- 向导中改用 InstallDirRegKey HKLM "${PRODUCT_UNINST_KEY}" "UninstallString" 来检测原安装程序安装目录，而原来使用的 InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" 里面使用的是检测 Software\Microsoft\Windows\CurrentVersion\App Paths\ 里面的程序名字，而程序名字重复的可能性太大，所以改为检测卸载程序的所在路径。
-- 向导界面选择中的“无”改为“静默安装”
-- 当使用多语言选择窗口时，会添加 LangDLL.dll 插件为预释放文件。
-- 如果选择显示闪屏，会添加 splash.dll 或 advsplash.dll 插件为预释放文件。
-- 如果选择播放背景音乐，会添加 system.dll 插件为预释放文件。
-- 修正 .onGUIEnd 为 Function，=_=!!! 这个汗啊，这么久，居然没有人提出这个脚本的严重错误，今天用来做了一个安装，怎么在组件可以选择，实在是晕，居然用了 Section 来着。

build 050831
1.修正一个跳转的小问题。
2.帮助菜单自动检索 Doc 目录下的插件说明文档。
3.在编辑器中，按 F1 时会首先认为是插件名字而去检索插件文档，如果有相关文档，会调用。方便调用插件的帮助。当没有找到插件文档时，才会检索关键字帮助。
4.向导中增加一个“极限压缩”算法的选项。

build 050903
1.插件文档帮助菜单排序显示。
2.再次修正关于撤销重做对于保存按钮的激活的问题。
3.向导修正
  -- 把所有 Function 区段放到 Section 区段的后面，并在之间添加注释声明 Function 区段必须写在 Section 区段的后面，避免 NSIS 安装程序出现未知的异常现象。
  -- 添加安全的卸载程序方式，根据 install.log 安装记录文件来进行卸载程序，避免删除非本安装程序放置的文件，这个功能需要当前使用的 NSIS 编译器已经打开 log 安装记录功能。这个在向导中会即时检测当前编译器是否已经打开该功能，并且作出提示。

build 060709
1.添加了 N 个菜单皮肤。
2.修正文件列表栏为标准工具栏，统一工具栏样式。
3.向导修正
  -- 添加了安装程序底部文本属性设置。
  -- 添加背景窗口属性设置。

build 060712
1.在复制 HTML 代码的同时会在粘贴板同时复制一份 HTML Format 的内容，可方便其他可以粘贴网页内容的编辑工具使用，例如: Dreamweaver, MS Word。
2.等了很久，原作者都没动静，所以自己来了，添加 Call 函数对于 标记 的代码跳转，包括 全局标记 和 局部标记。
  增加 Goto 的代码跳转，包括 标记 和 正负偏移，对于正负偏移，可能不能正确反映复杂的条件代码，但是对于一般的代码还是能很好反映，会处理其中夹杂的注释或者换行代码。

restools
2006-7-12