原文发表于CTeX中文论坛(bbs.ctex.org)
版面上用SciTE的人应该不少吧,这个编辑器一个相当强大的功能是他的缩写(Abbreviation)展开功能。简单说,就是把常用的代码段、单词甚 至句子和环境都定义成几个字母的缩写,打入这几个字母后ctrl+B就自动展开。开始的时候也觉得是挺平常的功能,但后来才知道简直就是Life saver。
1. 使用abbrev.properties文件
首先我想说当时为了用成这个功能就花了不少周折。我在SciTE的菜单中选择open abbreviations file,里面是空的,写了几个保存。发现没有写到SciTE目录下的abbrev.properties文件中去,满电脑找才知道写到 documents and settings里面去了。这个问题很多人碰到,作者在邮件列表中给出一个命令行的解决方法,也可以写成批处理。
set SCITE_HOME=D:/Program Files/Scintilla 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 (|) {/n/t/n}
表示展开后光标在小括号里,下面自动把大括号排版并且加入了一个tab。这在写多重循环的时候非常有用,你会发现只要用缩写功能,下面的右大括号都会自动地找到缩进位置。
这几个功能结合着用,可以写出相当复杂的环境,例如我的subfigure环境:
sbf=//begin{figure}[!htb]/n/t//centering/n/t//subfigure[|]{/t % Caption of subfigure in []/n/t//label{}/t % Label of subfigure in {}/n/t//includegraphics[width=0.45//textwidth ]{}}/n/t//subfigure[]{/n/t//label{}/n/t//includegraphics[width=0.45//textwidth ]{}}/n/t//caption{}/t % Caption of figure/n/t//label{}/t % Label of figure/n//end{figure}
展开后的效果是:
/begin{figure}[!htb]
/centering
/subfigure[]{ % Caption of subfigure in []
/label{} % Label of subfigure in {}
/includegraphics[width=0.45/textwidth ]{}}
/subfigure[]{
/label{}
/includegraphics[width=0.45/textwidth ]{}}
/caption{} % Caption of figure
/label{} % Label of figure
/end{figure}
不但自动插入代码,还把注释原汁原味地加上,因为我老是要去查subfigure里面的中括号写什么,大括号写什么。
只要花时间,甚至可以把你常用的导言区全部定义成一个展开式,连文档模板都可以写出来,省得学写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]/n/t//centering/n/t//includegraphics[width=//textwidth ]{|}/t % e.g.,[scale=0.75], [width=0.75//textwidth ]/n/t//caption{}/n/t//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. 根据文件类型定义单独的缩写文件
当你开始“滥用”缩写后,你会发现冲突得厉害,但又不想把缩写名复杂成诸如for@c, for@matlab这样怎么办?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=|/n/t/nend,在abbrev_cpp.properties里面写for=for(i=0;i<|;i++){/n},这样你只要记 一个for就ok了。
原帖:
http://hi.baidu.com/fcl06/blog/item/d563416615a8a523aa184c00.html