分类分类
大小:10.25 MB 更新:2023/03/23
类别:文字处理系统:WinXP, Win7, Win8, Win10, WinAll
everedit是一款实用且易于扩展的纯文本编辑器,支持中文编码以及支持脚本编码;该文本编辑器是一个比较单纯的工具,而用户在日常工作中需要用到各种各样的文件,比如html,css,javascript,c++,java等等;很多的时候,用户们都希望有一套与这些文件类型绑定的快捷键、工具条、菜单等;比如我们在切换到html类型的文件的时候,工具条和菜单都会显示为html的,其中有加粗,预览等操作;在切换到java的时候,又期望显示为java独有的工具条和菜单,比如编译,javadoc的操作等等;EverEdit充分考虑这些需求,提供了最简单、直接而且异常强大的支持;不仅如此该程序有着优异的语法着色引擎,可以高亮现存的绝大多数的编程语言;需要的用户可以下载体验
一、查找对话框
PERL5兼容的正则,完备的前后查找;支持增量以及各种高级功能,比如行的过滤,匹配的过滤等。
二、替换对话框
替换支持高速模式,可以非常快的对一个巨大的文档进行几百万次的替换,并且只消耗很少的内存。
三、多文件查找对话框
多文件查找可以自动探测文件的编码,utf-8,utf16,gb2312,big5等都可以自动识别,而不是简单的靠BOM识别。
四、批量替换对话框
批量替换是一个很重要的功能,在Everedit中直接使用批量替换进行资源文件的制作。
除此之外导入一个长度优先表,批量替换还可以用来做繁简转换,还可以做批量全角/半角,标点符号转换等很有意思的功能。
而且批量替换保存的文本是非常平滑的tsv文件,您可以直接用Everedit打开进行列编辑。快速制作大量的替换,进行导入。
1、多内码支持,完美支持Unicode U16、U16-BE、UTF-8、东亚语言字符、西欧语言字符
2、准确的编码探测,万码无忧
3、低内存占用,极低的内存就可以编辑巨大文件
4、PCRE兼容正则表达式(DEELX),支持环视等高级特性
5、集成VBS/JScript脚本引擎,完美利用Windows各种COM组件的特性
6、简洁方便的宏录制,录制出来的宏就是简单的VBS脚本,易读易改
7、GUI插件支持,脚本之外的又一大选择,满足您的各种需求
8、用户自定义工具
9、丰富的状态栏,可以直接点击进行部分常用项的更改
10、标准文本拖放支持
11、可编程高性能着色器,展现任何语言丰富多彩的一面
1、用户可以点击本网站提供的下载路径下载得到对应的程序安装包
2、只需要使用解压功能将压缩包打开,双击主程序即可进行安装,弹出程序界面
什么是代码片段
代码片段又叫文本片段,它是指一小段经常使用的文本的集合。比如可以把经常使用的注释信息、函数的头部说明信息、还有一些反复的编程语句等。通常的来说,代码片段都比较的小,你不应该把一个巨大的文本定义为片段。因性能考虑,EverEdit对每个代码片段的大小限定为2000个字符(因转义处理,实际输入的字符可能会略小于2000)。
格式
文本片段有一定格式,按照该格式存储的文本,在插入到文档的时候会做出一些特殊的动作。当然您也可以不使用任何格式,就把它当成一个普通的文本管理器。典型的文本片段如下:
for (${1:unsigned int} ${2:i} = ${3:0}; $2 ${4:<} ${5:count}; $2${6:++}) {
$0
}
代码片段的使用
在文本片段中,有几个概念:
变量定义
变量引用
变量间跳转
最后光标位置
变量定义
变量的定义非常简单,比如:${1:myvar}。其中数字1表示该变量的序号,在EverEdit中最多支持9个变量1-9,而0则指示着最后一次光标定位的位置。
注意:变量最好按照大小顺序定义。变量不支持嵌套,也就是说变量里面不可以定义变量。比如不支持下面的格式:${1:data ${2:text}}
变量引用
变量定义完之后,如需引用的话,可以使用美元符号后接数字的方式使用,比如$1。在可以识别$的场合,比如变量定义和引用时,如需对$进行转义的话,可以连续输入两个$$;在不可识别的场合,可以随便使用$字符。错误的变量使用和格式将会导致该片段不可跳转。
变量间跳转
在EverEdit中,非常方便的一点是如果定义了多个变量的话,在展开文本片段之后,可以使用Tab跳转到下一个定义,Shift+Tab定义到上一个定义。这是代码片段一个重要特性,不支持该特性的编辑器不能称之为支持代码片段。
最后光标位置
上文提到EverEdit最多只支持9个变量定义,$0被用于最后一次的光标位置。对$0定义没有任何作用!当用户修改完1-9的变了之后,再一次按Tab,光标将会移动到该位置。
引用被选择的文本
有时候想直接在代码管理器点击,插入snippet或者通过脚本菜单生成的snippet来进行操作的时候,EverEdit支持${SELECTED},对普通选区文本进行操作,所有snippet中的${SELECTED}都会被替换为选区的文本。比如HTML中的:${SELECTED}
使用代码片段管理器
EverEdit为大家提供了方便使用的代码片段管理器。可以通过 主菜单→查看→文本片段可以激活片段管理器。它会自动的读取snippet目录下所有的后缀为snippet的文件,并以列表的方式呈现出来。在管理器中您可以新建、修改、删除任何片段。在EverEdit中修改代码片段的样例:
@名称:For loop
@触发文本:for
@文本片段:请在下一行开始输入内容!
for (${1:unsigned int} ${2:i} = ${3:0}; $2 ${4:<} ${5:count}; $2${6:++}) {
$0
}
注意:如果语法文件已经加载代码片段的话,那么该代码片段会自动刷新到对应的语法文件中!
定义说明
@名称:表示该片段呈现在管理器以及自动完成下拉列表中的名称
@触发文本:当输入tab的时候,符合这几个字符的时候则触发。除此之外,自动完成下拉列表也会使用它进行匹配。
@文本片段:该行文本仅是提示用,无实际意义。从第四行开始定义您的代码片段。
关联到语法文件
如果新定义一个snippet文件的话,那么它仅仅会出现在文本片段管理器中,而不会自动的出现在某种语法文件的下拉列表中。因为语法文件并不会如此聪明的知道您要加载哪个snippet。如果想让它自动出现的话,需要手工修改语法文件(比如java.mac),添加如下代码到指定的Region:
java.AddSnippet "my.snippet"
预定义变量
代码片段支持几个预定义变量:
${SELECTED}: 当展开的时候,会用选区替换
${CLIPBOARD}: 展开的时候,会用剪贴板替换
概述
EverEdit内置JScript/VBS作为基础的脚本解释引擎(理论上支持以ActiveScript形式运行的ruby和python)。在EverEdit内部,JScript/VBS不仅可以用来进行常见的文本操作,也可以定义着色文件。JScript/VBS易学易懂,和Windows关系紧密。借助于脚本, EverEdit可以完成很多匪夷所思的功能,JScript和JavaScript非常的像,语法基本一致,JavaScript使用起来毫无难度! 本文并不着重于介绍VBS/JScript的基础语法和用法, 如您需要学习VBS/JScript的基础部分, 请参考相关文档。
为了简化和方便管理,被调用的脚本,要统一地放置到安装目录下的macro目录中。您可以在macro目录中,使用子目录作为分类,脚本的后缀必须为mac,ejs,evb,erb,epy(暂时不识别其它的后缀)。所有被放置到macro目录中的文件都会显示在扩展菜单中,如未显示,您可以点击刷新脚本菜单试试看。
类和函数
EverEdit以面向对象的方式封装了一些常用的类和函数,在脚本中处于最顶层的对象是App,其它的对象均由此创建而来。
全局函数和变量
SCRIPT_PATH: 获取当前脚本的全路径
SCRIPT_NAME: 获取当前脚本的文件名称
Include(): 包含某个文件。注意:EverEdit会直接读取被包含的文件,然后在当前上下文中进行执行。
Application
函数
Menu CreateMenu();
创建菜单。该菜单的弹出将会跟随鼠标位置。
bool BindShortcut(string strCommand, string strKey, bool bSaveNow);
string FindShortcut(string strCommand);
void AddTemplate(string strTitle, string strType, string strFile, bool bRunAsSnippet);
Document GetDoc(int index);
void Sleep(int dwMillisec);
void SendCommand(int nCmd);
发送整数形式的命令到主窗口,nCmd是整数值,对应着菜单中的某个菜单项的ID。
void SendCommandEx(string strText);
发送字符串形式的命令到主窗口,具体命令可参考快捷键中显示的文本。
void WebPreview(string strPathName);
web预览指定路径的文件,预览的web文件将会链接当前活动的文档窗口。可以使用Ctrl+B在链接的文档间切换。
void WebOutput(string strText);
Document NewDoc();
Document CreateDoc();
Document OpenDoc(string strPathName);
void OutputText(string strText, bool bClear=false, bool bTerminate=false);
void OutputLine(string strText);
输出文本到输出窗口, bClear:是否清除当前文本;bTerminate:是否终止当前正在运行的程序。
string ShowInputBox(string strPrompt, string strTitle);
弹出文本输入框。strPrompt:提示文字;strTitle:对话框的标题。
执行一个命令行程序,并获取它的stdout的输出
string GetResultFromExe(string cmdline, string initdir="", int encoding=0)。
void OpenSnippetByTitle(string title);
打开代码管理窗口,并让其显示指定title的snippet文件
int GetEmWidth(); //获取当前显示器,平均字符宽度
int ShowMsgBox(string strText, string strTitle, int buttons);
弹出消息对话框。strText:对话框中的文本;strTitle:对话框的标题。buttons:对话框按钮的组合。
有以下几种组合(摘自MSDN):
#define MB_OK 0x00000000L
#define MB_OKCANCEL 0x00000001L
#define MB_ABORTRETRYIGNORE 0x00000002L
#define MB_YESNOCANCEL 0x00000003L
#define MB_YESNO 0x00000004L
#define MB_RETRYCANCEL 0x00000005L
#define MB_CANCELTRYCONTINUE 0x00000006L
#define
#define MB_ICONHAND 0x00000010L
#define MB_ICONQUESTION 0x00000020L
#define MB_ICONEXCLAMATION 0x00000030L
#define MB_ICONASTERISK 0x00000040L
int ShowHtmlHelp(string strPath, string strWord);
显示chm或者hlp后缀的帮助文件。strPathName:帮助文件的全路径。
strWord:打开帮助文件时自动查找的词汇。如果为空,则定位到起始页。
string CreateTempFile(bool bAutoDelete);
创建临时文件。bAutoDelete:主程序结束时是否自动删除。
bool RemoveFile(string strPath);
显示打开或保存文件的对话框。
string ShowFileDialog(bool bOpen, string strInitDir, string strDefExt);
OutputWindow CreateOutputWindow(string strTitle);
void DebugLibrary(string strPathName);
用于调试插件DLL。通过个简单的脚本(App.DebugLibrary "xxxx.dll")加载指定路径的DLL,
结合开发工具(比如Visual Studio)的附加到进程的功能,可以非常方便地达到调试DLL的目的。
void SetValue(string strPathName, string val);
string GetValue(string strPathName);
PersistentStringTable GetPersistentStringTable(string name); // 获取一个持久化存储的表,如不存在则创建
StringTable CreateStringTable(); //创建字符串表
HtmlDialog ShowHtmlDialog(bool modal, String url, int width, int height);
创建一个html对话框, 里面可以调用ee的各种脚本。通过此函数创建之后,EverEdit的全局对象会放到window.external中, 可以通过var App=window.external获取到
属性
Document ActiveDoc; //get
HexDoc ActiveHex; //get
Document document; //get
OutputWindow OutputWindow; //get
Project Project; //get
string AppPath; //get
string CommandBox; //get
ULONG Hwnd; //get
ULONG FileCount; //get
string Version; //get
string ClipboardText; //get,set
int Lang;//get
Document
函数
Menu CreateMenu();
创建菜单。菜单的弹出位置将会跟随光标Caret。
void SendCommand( int nCmd);
bool Activate();
void Refresh();
强制刷新、重绘文档。
long GetHwnd();
bool SetImageList(string path);
int GetLineImage(int line);
void SetLineImage(int line, int icon);
string GetLineTooltip(int line);
void SetLineTooltip(int line, string strtext);
void AppendLineTooltip(int line, string strtext);
bool HasSel();
当前文档是否含有普通选区。列选和多选会返回False。
void ClearSel();
清除选区包括多选和列选。
void InsertAt(int line, int col, string strText);
指定坐标处插入文本。
void Insert(string strText);
当前光标处插入文本。
void MoveCaret(int nLength);
以光标位置为基准,把光标移动指定长度。注意:换行符也会被计算在内。
void IndentInsert(string strText);
插入文本。被插入的文本从第二行开始按照首行的文本进行缩进。
int GetSyntaxState(int line);
int GetStateStyle(int state);
void OpenOutlineFile1(string strText);
void OpenOutlineFile2(string strText, string strImg);
void Delete(int sline, int scol, int eline, int ecol);
删除指定位置的文本。如果不带任何参数,相当与按一次delete键
void Delete(Pos spos, Pos epos);
void Delete();
void SetCaretPos(int line, int col, bool bVisible);
void SetSel(int sline, int scol, int eline, int ecol);
void SetSel(Pos pos1, Pos pos2);
设置普通选区。
int AddSel(Pos pos1, Pos pos2);
指定范围的文本。添加到选区。如果该范围和当前选区不重合,那么自动变成多选。
Pos Offset2Pos(int nOffset);
int Pos2Offset(Pos pos);
偏移和行列位置之间的转换。
bool ExportTo(string strPathName, int nEncoding, bool bAddBom, int nEol);
bool ExportTo(string strPathName, int nEncoding, bool bAddBom);
bool ExportTo(string strPathName);
导出当前buffer到指定路径(如果文档被修改,则连同被修改的内容一起导出)。strPathName:目的路径;nEncoding:导出为指定编码的文件;bBom:是否添加BOM(仅在UTF 16/8下有效);nEol:换行符的类型。换行符取值如下:
WIN=1
UNIX=2
MAC=3
int ReplaceAll(string strFind, string strReplace, bool bCase, bool bRegex, bool bWord, bool bExtended);
int ReplaceAll(string strFind, string strReplace, bool bCase, bool bRegex, bool bWord);
int ReplaceAll(string strFind, string strReplace, bool bCase, bool bRegex);
int ReplaceAll(string strFind, string strReplace, bool bCase);
int ReplaceAll(string strFind, string strReplace);
替换全部。
int FindAll(string strFind, bool bCase, bool bRegex, bool bWord);
int FindAll(string strFind, bool bCase, bool bRegex);
int FindAll(string strFind, bool bCase);
int FindAll(string strFind);
查找匹配的指定文本字符串,并显示到输出窗口。
bool FindNext(string strFind, bool bCase, bool bRegex, bool bWord);
bool FindNext(string strFind, bool bCase, bool bRegex);
bool FindNext(string strFind, bool bCase);
bool FindNext(string strFind);
以当前光标位置为基准,向下查找并高亮匹配的指定字符串,未找到则返回False。
string GetWord(int flag);
依据flag获取光标处的文本。flag的取值如下:
#define GETWORD_LWORD 1
#define GETWORD_RWORD 2
#define GETWORD_WORD GETWORD_LWORD|GETWORD_RWORD
#define GETWORD_LEDGE 4
#define GETWORD_REDGE 8
#define GETWORD_EDGE GETWORD_LEDGE|GETWORD_REDGE
#define GETWORD_LSYNTAX 16
#define GETWORD_RSYNTAX 32
#define GETWORD_SYNTAX GETWORD_LSYNTAX|GETWORD_RSYNTAX
#define GETWORD_LSYNTAX2 64
#define GETWORD_RSYNTAX2 128
#define GETWORD_SYNTAX2 GETWORD_LSYNTAX2|GETWORD_RSYNTAX2
string GetLineText(int);
int GetLineLength(int);
int GetWrapCount(int);
获取指定行的子行数。
int InsertSnippet(string strSnippet);
插入snippet到光标处。
void CommentLine(string strCommentLine, bool bComment);
void CommentBlock(string strCommentOn, string strCommnetOff, bool bComment);
按照文档的语法模式注释、反注释当前行或者选区文本。
void write(string strText);
void writeln(string strText);
void close();
模拟js的操作。
void GhostTyping(string text, int speed=100);
幽灵打印,调用该函数,将会自动按照指定的速度在文档内键入文本,speed越小速度越快,最快每30毫秒键入一个字符
void Wrap(int type, int value=0)
设定换行的方式, type的取值如下:
0: 取消换行
1: 窗口边界处换行
2: 智能换行,智能判断单词边界和禁则字符
3: 指定列换行(value)
4: 指定列换行并扩展制表符(value)
5: 保留
6: 指定像素处换行(value)
属性
Pos CaretPos;//get,set
Pos SelStartPos;//get
Pos SelEndPos;//get
long Hwnd;//get
bool Dirty;//get
int CaretLine;//get,set
int CaretCol;//get,set
int LineCount;//get
string SelText;//get,set
string PathName;//get
string Scope;//get
int Encoding;//get,set
int TabStop;//get,set
bool SoftTab;//get,set
string Text;//get,set
string EndOfLine;//get
string Syntax;//get,set
string ImageList;//set
int EditMode;//get
光标位置:Pos
int Line;//get,set
int Col;//get,set
输出窗口:OutputWindow
函数
void OutputText(string strText);
void OutputLine(string strText);
void SetJumpPattern(string strText, int file, int line, int col);
设置输出窗口的跳转模式。strText:用正则表达式描述的跳转模式, file/line/col:指定分组描述了文件名、行、列
void ClearJumpPattern();
void Clear();
void Terminate();
终止输出窗口中正运行的进程
void Show();
void Hide();
菜单:Menu
void AddItem(int nCommand, string strText);
void AddSubItem(string strText, Menu pSub);
void AddSeparator();
int Popup();
int Popup(bool bCaretPos);
string GetText(int nCommand);
持久化存储:PersistentStringTable
void BeginAdd(); //必须要和EndAdd配对使用
void AddItem(string key, string value);
void EndAdd();
void RemoveAt(int id);
int FindItemId(string key, bool case);
StringTable FindFirstItem(string key, bool case);
StringTable FindItems(string key, int limit, int sort, bool case);
int GetCount();
void Clear();
字符串表:StringTable
void AddItem(string key, string value);
string GetKeyAt(int idx);
string GetValueAt(int idx);
void RemoveAt(int idx);
string FindFirstItem(string key, bool case);
int GetCount();
void Clear();
HtmlDialog
void SetTitle(string title); //设置对话框的标题
Hello World
下面看看在EverEdit中用脚本如何显示一个Hello,World。首先打开EverEdit,建立一纯文本文件,保存以下代码:
var str = "hello, world";
App.OutputText(str);
var doc = App.ActiveDoc;
doc.Insert( str );
点击主菜单→扩展→保存为脚本,输入任意脚本名称就可以了(支持中文),因为我们是用js写的,所以后缀要输入ejs。然后点击同菜单下的刷新脚本菜单,看看你命名的脚本是不是出现了呢,点击它运行试试吧!
代码片段
不同的Region可以绑定不同的代码片段,比如html中的css,js区域等。比如php.mac中的:
rPhp.AddSnippet "php.snippet"
这样就把snippet加入到了php区域中了。这些snippet仅在该区域起作用,用户输入完整的提示字符,然后按下tab键就可以快速展开。一个区域可以使用AddSnippet函数添加多个snippet。同样,一个文件也可能会有多个不同的着色区域,通过如此搭配,可以实现严格的区分效果。
类和函数
着色文件是可编程的,每个着色文件都是一个按照指定语法书写的脚本文件。因EverEdit开发的历史原因,目前着色文件的语法仅支持vbscript。
颜色定义
在定义语法文件的时候,一定会想到要把不同的部分显示为不同的颜色。EverEdit内置多种颜色,赶快让您的文件多彩起来吧!下面是syntax目录中const.mac描述的颜色值。注意:颜色的具体设定是在主题里面指定的,这些只是颜色的定义,不是具体的颜色表达。
注意:凡是被指定为COLOR_IGNORE模式的字符串,它的前景色将和主界面的背景色一致,看起来好像不存在一样。只有被选择的时候,才会看到!而COLOR_CONCEAL则是一个比较有意思的模式,被指定为COLOR_CONCEAL的字符仅当处于选区或者当前行的时候,才是可见的!借助这个特性,可以实现出很多非常有用的功能!
SyntaxItem
void Capture(int group, int state);
string Name;//get,set
WordItem
bool AutoCase;//get,set
string Name;//get,set
SyntaxRegion
函数
bool AddSnippet(string strName, bool bCase=true)
添加snippet到该Region。strName为snippet的文件名称,因所有的snippet文件必须放到snippet文件夹,所以只需要提供snippet的文件名称即可。bCase:snippet在匹配的时候是否区分大小写
void AddItem(SyntaxItem item );
void AddWord(WordItem item );
void AddRegion(SyntaxRegion child );
void FoldText(string strFold, bool bFCase, string strUnFold, bool bUFCase);
指定语法文件的折叠方法。strFold和strUnFold指示了折叠和反折叠的正则表达式。bFCase/bUFCase:是否匹配大小写
void CommentBlock(string strOn, string strOff);
块注释的文本。主要用于Ctrl+Shift+/的调用。比如c++中,可以这么设置 cpp.CommentBlock "/*", “*/"
void CommentLine(string strText);
行注释的文本。用户Ctrl+/的调用。比如c++中,可以这么设置 cpp.CommentLine "//"
void SetPairs(string strText);
指示该Region可用的配对字符。strText:包含所有的配对字符。配对字符必须连续的放在一块定义,很显然strText的长度应为偶数。
void IndentText(string strIndnet, bool c1, string strUnIndnet, bool c2);
定义用于缩进和反缩进的正则表达式。
void AddCallTip( string strPathName, bool bCase, string strWord="", string strBegin="(", string strSep=",", string strEnd=")", bool bRemoveSpace=false );
定义函数提示,具体参考函数提示部分。
void AddSnippet( string title, string trigger, string text, bool script=false);
属性
void TransRegion;//set
当该区域的文本结束时,该Region默认情况下将会自动跳转到父Region;如果定义了TransRegion那么将会跳转到Region。
string Name;//get;set
该Region的名称。设置该名称之后,在脚本中可以获取光标位置的词法状态。
Parser
Parser默认情况下包含了一个DefaultRegion。部分针对Default Region函数的使用可以参考SyntaxRegion的说明。
函数
bool AddSnippet(string strPathName, bool case_sensitve=true );
void AddItem(SyntaxItem item );
void AddWord(WordItem item );
void AddRegion(SyntaxRegion child);
SyntaxRegion CopyRegion(SyntaxRegion pCopy);
复制一个Region。用于某两个不相关的Region可能包含类似的代码。该函数较耗费资源。
SyntaxItem CreateItem(int state, string strMatch, bool bCase, bool bToRight=false);
创建正则表达式描述的匹配规则。
state:颜色值。
strMatch:正则描述的匹配文本
bCase:是否区分大小写
bToRight:如果该匹配正好在行末,那么背景色是否延伸到窗口右侧。
WordItem CreateWord(int state, string strMatch, bool bCase, string strDelimiters="");
创建关键字匹配。理论上CreateItem可以代替CreateWord,但CreateWord的效率更高且可以自动完成和自动纠正大小写。
strMatch:以空格分割的关键字字符串。
bCase:是否区分大小写
strDelimiters:默认的情况下strMatch所匹配的文本只包括字母数字和下划线,
strDelimiters则表示哪些特殊字符可以被当作一个词,比如中划线-等。
void SetParseMax(int value);
设置单行着色的最大字符上限。默认的情况下,EverEdit只着色每一行的前1000个字符。注意:过大的设置,可能导致程序运行速度过于缓慢!
void AddSnippet( string title, string trigger, string text, bool script=false);
直接在语法文件中,声明一个代码片段
WordItem CreateWordFromFile(int color, string strFileName, bool bCase)
从文件中创建一个关键字列表并指定颜色和大小写,该文件必须放置于syntax目录
AddWordFromFile(string strFileName, string strDelimiters)
从文件中添加指定规则的关键字,它不返回创建的对象,直接按照规则把文件中所有的关键字加入到指定的region。文件的每一行是一个关键字,头尾不可有空格。;开头的是注释,#开头的是新的关键字描述,后面更有3个数字,比如#16,1,0。第一个数字表示词法状态,第二个表示是否区分大小写,第三个表示是否自动更正大小写。
典型的keyword文件如下:
#16,1,0
long
...
#17,1,0
string
...
SyntaxRegion CreateRegion(int state, string strBegin, string strEnd, bool bCase, bool bToRight=false );
创建一个正则表达式描述的Region。
strBegin/strEnd:描述该区域开始或者结束的正则表达式
bCase:strBegin/strEnd描述的正则是否区分大小写
bToRight:如果该Region在行末,那么扩展背景色到右侧窗口
注意:被+两个加号+包围起来的文本表示这不是一个正则表达式,就是普通的文字匹配(效率更高)
SyntaxRegion CreateStringRegion(int state, string strChar, string strEscape, bool mline, string strContinueChar );
创建字符串匹配。
strChar:字符串指示字符,通常为"或者'。
strEscape:转义字符,通常为\
mline:字符串是否跨行。
strContinueChar:字符串续行符,比如C++中的\
void FoldText(string strFold, bool bFCase, string strUnFold, bool bUFCase);
void IndentText(string strIndnet, bool c1, string strUnIndnet, bool c2);
void FoldAnyText(int nLevel, string strText);
正则表达式描述的较为宽松的折叠。
nLevel:折叠的层级
strText:正则表达式
void SetPairs(string strText);
void CommentBlock(string strOn, string strOff);
void CommentLine(string strText);
void AddCallTip( string strPathName, bool bCase, string strWord="", string strBegin="(", string strSep=",", string strEnd=")", bool bRemoveSpace=false );
void SetFont( string font_name, int font_size, int base_line, bool bold);
void SetCJKFont( string font_name, int font_size, int base_line, bool bold);
为该语法文件独立绑定一个字体,当打开用该语法文件渲染的文本时,将会忽略用户的设置,自动使用语法着色文件指定的字体。
属性
string Name;//get,set
默认区域的命名
string FoldingMethod;//get,set
该语法文件的折叠方法。取值为syntax/indent/anytext
string WordChars;//get,set
该语法文件可以被认为是单词的特殊字符。当鼠标双击或者其它操作选择词汇时将会使用该设置。
SyntaxRegion DefaultRegion;//get
string OnOutLine;//set
事件处理脚本,当显示该文件类型的大纲视图时,会自动的调用这个脚本,该脚本应该按照指定格式输出大纲视图识别的格式,该格式后续会介绍。
string OnNewLine;
事件处理脚本,当按下回车键时,会自动调用该脚本,该脚本可以执行常见的脚本函数。
实例1:创建C++着色器
以C语言为例,描述一下如何去定义一个新的语法描述文件!那么,首先让我们看一下C语言中常见的元素:
单行注释
多行注释
字符串
关键字
绝大多数的着色文件均是由上面几个非常简单的元素构成。好了,开始我们的自定义吧!建立一个新的文件mycpp.mac并把它放到syntax目录下。为了使用颜色值,我们可以把已经定义好的cosnt.mac包含进来,当然您也可以直接把该文件的内容粘贴到这个文件当中。
Include( ".\const.mac" )
创建一个自定义的Parser,命名为cpp。
Set cpp=Parser.CreateParser()
在创建完自定义Parser之后,我们就要开始为之添加各种各样的元素了!
创建单行注释匹配:单行注释很显然是一个Region,而不是一个Item,因为它有开始和结束的标志!那就是以//开始,以行尾结束!
Set regionLine=cpp.CreateRegion( COLOR_COMMENT1, "+//+", "$", True )
注意:这儿我们使用了++, 其中被+包围了, 表示这儿为了提高效率不使用正则表达式进行匹配! 结束标志我们把它定义成$, 明确表示匹配到行尾, 不然的话只会匹配//了!
创建多行注释匹配:
Set regionBlock=cpp.CreateRegion( COLOR_COMMENT1, "+/*+", "+*/+", True )
创建字符串匹配:
Set regionString=cpp.CreateStringRegion( COLOR_STRING1, """", "\", False )
创建关键字匹配:
Set itemWord=cpp.CreateItem(COLOR_WORD1, "\b(int|float|double|char|void|
for|while|if|else|return|break|continue)\b", True)
注意:为了更好的创建关键字匹配, 可以使用CreateWord函数, 比如上文中的关键字匹配, 也可以这么写,效率更高:
Set itemWord2=cpp.CreateWord(COLOR_WORD1, "int float double char void for while if else return break continue", True)
把所有创建的匹配加入到主区域中:
cpp.AddRegion( regionLine )
cpp.AddRegion( regionBlock )
cpp.AddRegion( regionString )
cpp.AddItem( itemWord )
到这儿为止我们就自定义了一个简单的C语言着色引擎,看看成品吧!
Include( ".\const.mac" )
Set cpp=Parser.CreateParser()
Set regionLine=cpp.CreateRegion( COLOR_COMMENT1, "+//+", "", True )
Set regionBlock=cpp.CreateRegion( COLOR_COMMENT1, "+/*+", "+*/+", True )
Set regionString=cpp.CreateStringRegion( COLOR_STRING1, """", "\", False )
Set itemWord=cpp.CreateItem(COLOR_WORD1, "\b(int|float|double|char|void|for|while|if|else|return|break|continue)\b", True)
cpp.AddRegion( regionLine )
cpp.AddRegion( regionBlock )
cpp.AddRegion( regionString )
cpp.AddItem( itemWord )
别着急,还剩下最后一步。那就是让EverEdit可以识别它!打开语法着色对话框,新建一文件类型为MyCpp,并选择语法文件为刚刚定义的mycpp.mac!
实例2:细化C++着色器
在实例1中我们学习了如何创造一个自定义的着色引擎, 那么让我们来进一步丰富这个引擎吧!首先, 我想让注释中所有大写的TODO都显示为一种特殊的颜色! 注意仅仅是注释中, 其它的部分不变!
定义TODO匹配
Set itemTodo=cpp.CreateItem(COLOR_HIGHLIGHT1, "\bTODO\b", True)
把TODO匹配加入到单行和多行注释中:
regionLine.AddItem( itemTodo )
regionBlock.AddItem( itemTodo )
这样我们就可以仅仅在注释中显示高亮为COLOR_HIGHLIGHT1颜色的TODO文字了!EverEdit同样为代码折叠提供了简单方便的调用接口。比如当遇到{时折叠一次,遇到}时反折叠一次,那么可以简单的像下面书写:
cpp.FoldText "\{", False, "\}", False
自动缩进
假设在mycpp中有这样一种缩进:当您在行尾是EEA的时候,输入回车时,自动缩进一次;输入的行满足含有EverEdit时,自动反缩进一次。
cpp.IndentText "EEA$ ", False, "EVEREDIT", False
括号匹配
我们定义[],{},(),"",''是匹配的字符。
cpp.SetPairs "[]{}()""""''"
可以被快捷键调用的快速注释:
cpp.CommentLine "//"
cpp.CommentBlock "/*", "*/"
到这儿为止,我们为mycpp添加了TODO高亮;添加了缩进和反缩进,添加了括号匹配和代码折叠,同时还添加了可以被快捷键或者菜单命令调用的注释和反注释的匹配!EverEdit以其强大的功能,为您提供了大量的自定义特性!赶快动手试一下吧!
和着色文件绑定的操作
着色文件不仅描述了如何以分色的方式显示一串文字的不同部分,同时还有一些特定的操作是和着色文件绑定在一起的,比如缩进规则、折叠规则、大纲显示的规则、自定义工具、菜单、工具条等等,这些在EverEdit中均可实现。
缩进规则
在EverEdit中,按下回车的时候,是缩进的时机,这个时候应该根据上下行的规则进行细节判断是缩进还是不缩进。那么反缩进呢?反缩进没有更好的时机,在EverEdit中当用户输入的时候,如果光标行所在的文本满足特定的正则表达式的话,进行一次反缩进。这么做不是100%完美的,多少会有些瑕疵。
折叠规则
首先我们需要知道的是,完美的代码折叠如果不做语义分析的话,是做不到的,往往眼睛看到的、直观的、应该折叠的地方,却无法找到一个有效的模式去描述。EverEdit的折叠规则非常简单,如果该行文本满足折叠表达式,则折叠一次;满足反折叠表达式,则反折叠一次;同时满足,则折叠归零。这么做非常高效,可以解决绝大数的常见的折叠,同时EverEdit还可以自动的对处于同一个Region的代码进行折叠,不同的Region还可以绑定不同的折叠规则,就像html中的js区域和css区域一样。
那么,有一些语言是比较特殊的,比如ini,它应该折叠折叠每一个section,这些section无法用折叠表达式来描述,所以EverEdit又提供了另一种折叠描述,那就是anytext。anytext是指定义一个规则和指定的level,遇到该规则,则自动的使用指定的level而不是EverEdit自动判断的level。看看ini中的代码折叠。
ini.FoldingMethod="anytext"
ini.FoldAnyText 0, "^\s*\[.*?\]$"
另外,EverEdit还提供了依据缩进进行折叠,很多缩进规则比较好的语言,用缩进更美观。比如python中的折叠。
python.FoldingMethod="indent"
主题
EverEdit的主题非常的强大,但是它有一个缺点,那就是所有的语法文件都会应用到同一个主题。有时候我们期望某个独特类型的文件能使用自己的主题,可不可以呢?当然没问题!只要打开对应的语法着色文件,然后加一行代码就可以了!
parser.SetTheme(“xxxx.ini”)
为什么要独立设定主题?
比如markdown里面有加粗、倾斜等字体样式,这些样式有时候我们只希望在markdown中应用,这个时候独立的主题就很有用了。
模式
模式文件的绑定需要通过界面进行操作。主菜单→工具→设置→语法着色,选定您的语法文件,然后点击高级,绑定即可!
帮助文件
每一种文件类型可以绑定后缀为chm或者hlp的帮助文件,当打开对应的帮助文件的时候,EverEdit会自动根据选区的内容,定位到适合的章节。比如我们可以把php的帮助文档,绑定到php中,这样当不知道某个函数的用法的时候,选定这个函数,帮助→关联帮助就可以迅速定位了。除此之外,在模式中也可以调用脚本完成,实现更多的帮助文件的绑定。
函数提示
EverEdit支持简单的基于字符匹配的函数提示,当输入函数的某个开始字符时,会在上方弹出一个文本框,显示该函数的原型和释义,方便用户确认函数的参数和用法,在输入函数参数的分割符时,EverEdit会自动地以下划虚线的方式强调表示。函数提示是以文本文件的形式存储在calltip文件夹中的,如果需要在calltip中显示中日韩字符,要确保该文件是以UTF8不带BOM的形式进行保存的。
下面来看看该文件的存储格式,以c.ecp为例进行说明。
abs(int x):int\nReturns the absolute value of x
其中有\n字符,表示这是一个换行符,后面的部分表示函数的释义,当然这部分是可以省略的。前面的部分表示函数的原型。abs一定要写在最开始,EverEdit会从最开始进行匹配,所以我们把函数的返回类型写在了最后。在定义完一个calltip之后,我们需要明确的告知EverEdit:该calltip要被那个着色文件的哪个region加载,使用下面的函数:
void AddCallTip( string strFileName, bool bCase, string strWord="", string strBegin="(", string strSep=",", string strEnd=")", bool bRemoveSpace=false );
strFileName:文件名称,不需要带路径。比如c.ecp。
bCase:前面匹配的部分是否要区分大小写
strWord:该参数是指在匹配的时候,哪些字符可以被认为是单词。以c.ecp的abs函数为例,因为该文件定义的函数都是以字母开始的,所以不需要特殊的参数。如果某个函数是诸如abs-def(xx)这样的话,我们可以把-加入到这个参数中,那就是"-"。
strBegin:函数开始字符,一般是左括号(
strSep:参数分割字符,一般是逗号,
strEnd:函数结束字符,一般是右括号)
bRemoveSpace:在匹配的时候是否要删除空格。比如abs (…),设置该参数为true的话,则忽略abs到(之前的空格。
极速PDF编辑器 文字处理129.31 MBv3.0.5.2
详情橙瓜码字软件 文字处理93.55 MB3.0.7
详情quickchm(CHM文件制作工具) 文字处理1.86 MBv3.4
详情diffpdf(PDF文档比较工具) 文字处理19.5 MBv5.6.7.0 绿色
详情文本巨匠 3.0 文字处理3.00 MB
详情Text Editor Pro 文字处理7.26 MBv10.3.0 绿色版
详情OCR文字识别 ABBYY FineReader Pro 14 中文 文字处理400.00 MB
详情超级批量文本替换 V4.0 文字处理1.00 MB
详情abbyy finereader 14中文 文字处理530.89 MB附带安装教程
详情多文档可加密记事本 文字处理2.00 MB
详情捷速OCR文字识别软件 文字处理1.51 MBv5.4 附带安装教程
详情Plagiarism Checker X(文章重复率检测软件) 文字处理10.1 MBv6.0.8
详情Bluebeam Revu eXtreme 2019(PDF制作工具) 文字处理1280 MB附安装教程
详情enfocus PitStop Pro 2018中文 文字处理932.25 MB附带安装教程
详情everedit中文(文本编辑工具) 含32/64位everedit 文字处理10.25 MBv4.2.0.4457免注册版
详情Nuance Power PDF Advanced(PDF编辑软件) 文字处理394.0 MBv3.00.6439
详情QuarkXPress 10.5中文 含Win/Mac 文字处理771.88 MB附带安装教程
详情Foxit PhantomPDF(福昕风腾PDF) 文字处理460 MBv9.7.1 绿色
详情PDF编辑器 Nitro Pro 10.5.2.11 汉化 文字处理52.00 MB
详情Quite Imposing plus(pdf拼版插件) 文字处理0.58 MBv3.0
详情Microsoft visio 2010 文字处理575 MB中文
详情abbyy finereader 14中文 文字处理530.89 MB附带安装教程
详情文件字符串查找工具 File String Finder 1.4 汉化版 文字处理0.87 MB
详情福昕风腾PDF v9.2.0 简体中文企业完整 文字处理282.00 MB
详情捷速OCR文字识别软件 文字处理1.51 MBv5.4 附带安装教程
详情microsoft visio 2013简体中文 文字处理919 MB
详情文本编辑器 UltraEdit 文字处理84.1 MBv26.10.0.38 中文
详情闪艺制作工具 文字处理35.2 MBv2.10.1 官方版
详情PandaOCR(熊猫OCR识别工具) 文字处理8.85 MBv2.72
详情ApowerPDF终身商业授权版(PDF编辑软件) 文字处理25.3 MBv5.3.0
详情微小宝公众号版 文字处理55.2 MBv3.3.4 官方版
详情abbyy Finereader 12中文版 文字处理749.40 MB附带安装教程(附有激活码)
详情enfocus pitstop pro 12中文 文字处理241.1 MB附带安装教程
详情极速PDF编辑器 文字处理129.31 MBv3.0.5.2
详情乱码查看器 CodeView 文字处理0.26 MB
详情秀米微信图文编辑器 文字处理0 MBv1.0.0 免费版
详情窗口文本抓取 Textify 文字处理0.44 MBv1.8.10
详情Quite Imposing plus(pdf拼版插件) 文字处理0.58 MBv3.0
详情大神码字 文字处理9.94 MB10.1 绿色
详情金印客DPS软件 文字处理51.6 MBv1.9.6 免费版
详情福昕高级PDF编辑器企业版 文字处理911.48 MBv11.0.0.49893 绿色企业版
详情typora for windows 文字处理52.76 MBv0.9.78 官方电脑版
详情EditPlus(文本编辑器) 文字处理9.62 MBv5.5.3734
详情135编辑器 文字处理52.75 MBv1.18
详情PandaOCR(熊猫OCR识别工具) 文字处理8.85 MBv2.72
详情文本编辑器 UltraEdit 文字处理84.1 MBv26.10.0.38 中文
详情PSPad Editor v5.0.7.663绿色版 文字处理8.89 MBv5.0.7.663绿色版
详情WinMerge(文件对比工具) 文字处理8.99 MBv2.16.14.0 中文版
详情QOwnNotes(事务笔记管理软件) 文字处理38 MBv22.1.5
详情CudaText(代码文本编辑器) 文字处理26.46 MBv1.137.0.0 汉化版
详情