版面上用SciTE的人应该不少吧,这个编辑器一个相当强大的功能是他的缩写(Abbreviation)展开功能。简单说,就是把常用的代码段、单词甚至句子和环境都定义成几个字母的缩写,打入这几个字母后ctrl+B就自动展开。开始的时候也觉得是挺平常的功能,但后来才知道简直就是Life saver。
1. 使用abbrev.properties文件
首先我想说当时为了用成这个功能就花了不少周折。我在SciTE的菜单中选择open abbreviations file,里面是空的,写了几个保存。发现没有写到SciTE目录下的abbrev.properties文件中去,满电脑找才知道写到 documents and settings里面去了。这个问题很多人碰到,作者在邮件列表中给出一个命令行的解决方法,也可以写成批处理。
set SCITE_HOME=D:Program FilesScintilla Text Editor
start Scite.exe %1
存成start_SciTE.bat即可。用Total Commander的朋友可以把这个图标放在工具栏上,然后把文件往上拖就能用SciTE打开。SciTE关联.tex文件后,如果用双击启动tex文件,则要在双击tex前保证SciTE是用批处理开着的,否则SciTE还是会用doc&settings目录下的设置,包括还原上次打开的文件(session restore)。我干脆就把这个批处理加入到启动菜单,开机就开着SciTE。
然后,用SciTE打开abbrev.properties,输入你想要的缩写,规则很简单: abbreviation=expansion,例如
ltx=LaTeX
2. 定义缩写名
关于缩写名(abbreviation):喜欢在等号边上加空格的朋友注意了,等号的左边最好不要有空格,否则要输入ltx加上相应的空格才能展开。等号的右边也是一样,有空格就会展开出空格。缩写名中不能用#开始,否则注释掉了,但后面可以;不能用空格和tab开始,缩写名不能有=号,因为只接受第一个=号,后面都会认为是展开式中的=号。如果缩写名重名,后面出现的优先。
3. 定义展开式
关于展开式(expansion):展开式的书写方式支持标准的转义符--反斜杠'',比如
up=/usepackage{}
即:两个连续的反杠输入一个反杠。展开式的书写方式支持一个光标定位符--竖线'|',这样展开后光标会留在这个位置,比如
up=/usepackage{|}
这样你可以很方便地马上输入宏包名称。要输入一个真正的竖线,连续输入两个竖线'||'即可,例如c语言中的或逻辑
or=||||
展开式不允许回车换行,但转义符中的n, t都是有效的,所以换行和制表位都能轻松输入。例如c语言的if语句:
i=if (|) {ntn}
表示展开后光标在小括号里,下面自动把大括号排版并且加入了一个tab。这在写多重循环的时候非常有用,你会发现只要用缩写功能,下面的右大括号都会自动地找到缩进位置。
这几个功能结合着用,可以写出相当复杂的环境,例如我的subfigure环境:
sbf=/begin{figure}[!htb]nt/centeringnt/subfigure[|]{t % Caption of subfigure in []nt/label{}t % Label of subfigure in {}nt/includegraphics[width=0.45/textwidth ]{}}nt/subfigure[]{nt/label{}nt/includegraphics[width=0.45/textwidth ]{}}nt/caption{}t % Caption of figurent/label{}t % Label of figuren/end{figure}
展开后的效果是:
begin{figure}[!htb]
centering
subfigure[]{ % Caption of subfigure in []
label{} % Label of subfigure in {}
includegraphics[width=0.45textwidth ]{}}
subfigure[]{
label{}
includegraphics[width=0.45textwidth ]{}}
caption{} % Caption of figure
label{} % Label of figure
end{figure}
复制代码
不但自动插入代码,还把注释原汁原味地加上,因为我老是要去查subfigure里面的中括号写什么,大括号写什么。
(我没尝试展开式最长能多长,但如果你想试试把你常用的导言区全部定义成一个展开式,go for it !!) -- 经过测试,真的可以!只要花时间,连文档模板都可以写出来,省得学写cls文件。
4. 多重展开
还有更有趣的,缩写功能支持多重展开!比如,LaTeX的手动输入要按三次shift,十分麻烦,定义一个ltx=LaTeX就省事了,而LaTeX logo的代码是LaTeX,并且为了保证不吞掉后面的空格,最保险的写法是LaTeX{},真不是一般的麻烦,这时可以再定义一条LaTeX= /LaTeX{},那么,在平时需要LaTeX这五个字母的时候,ltx后按一次ctrl+B,在需要输入logo的时候,ltx按两次ctrl+B就OK了!像有一些关键字一般要切换字体来输入,也可以这样:
mt=MATLAB
MATLAB=/textsf{MATLAB}
再举个例子,section, subsection, subsubsection这三兄弟可以用多重展开这样写
sec=/section{|}
section{=subsection{
subsection{=subsubsection{
然后输入sec,按一下ctrl+B出来section,两下出subsection,三下出subsubsection,挺俏皮的……
5. 追加展开
下面的追加展开功能也让人倾倒。比方说经常要给一段文字/代码什么的两边加括号,SciTE的括号补齐功能本来是好功能,这时反而成了累赘:在左边补开括号后要按del键删掉自动补上的那个闭括号,然后光标移到最后去加闭括号。SciTE支持选定这部分文字后按ctrl+shift+R打开缩写输入框,例如我的一对中括号是这样的:
ac={|}
那么,我选定文字后ctrl+shift+R再输入ac回车,括号就加上了。也就是说,选定的文字会替换竖线.
6. 合理定义缩写名
根据熵编码原理(笑),建议最常用的编最短的码,所以我figure环境就一个f:
f=/begin{figure}[!htb]nt/centeringnt/includegraphics[width=/textwidth ]{|}//t % e.g.,[scale=0.75], [width=0.75/textwidth ]nt/caption{}nt/label{}n/end{figure}
因为只要你不按ctrl+B就不会展开,就算不小心按出来了,ctrl+z马上会把展开式还原成缩写名。而且我还发现,在出现一个缩写名包括在另一个缩写名中的情况时,SciTE用的是贪婪匹配(SciTE说明文档中的说法不对)。SciTE帮助文档说,如果你定义ring和gathering两个缩写名,那么在输入gathering后按ctrl+B,只会按ring来展开,事实上是按gatherring来展开的,也就是说,在按下ctrl+B的时候,SciTE从光标处往前查找,一直匹配到abbrev文件中最长的那个缩写名并展开,并且这与缩写名的顺序无关,这个设置是相当好的(估计是后来改了,但帮助文档没改)。不过,也可以养成让缩写名完全不互相包含的习惯,例如,section, subsection, subsubsection,我原来是定义成sec, ssec, sssec,这样一个包含一个如果你不放心的话(其实没问题),不如就改成s0, s1, s2(数字表示有几个sub)。
7. 根据文件类型定义单独的缩写文件
当你开始“滥用”缩写后,你会发现冲突得厉害,[email protected], [email protected]?SciTE支持每个文件类型单独一个缩写文件。例如,在matlab.properties最后加上
abbreviations.$(file.patterns.matlab)=$(SciteUserHome)/abbrev_matlab.properties
再新建一个abbrev_matlab.properties文件放在根目录下,就可以在打开matlab文件后,用菜单'options - open abbreviations file'来打开独立的缩写文件进行编辑。保存后不用重启SciTE立即生效。那么,在abbrev_matlab.properties里面写 for=for i=|ntnend,在abbrev_cpp.properties里面写for=for(i=0;i<|;i++){n},这样你只要记一个for就ok了。
最后,警告:很容易中毒,现在我在这里回帖的时候经常想着缩写&展开....