懒人专用--用好SciTE的缩写功能

2008年8月5日星期二

原文发表于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帮助文档说,如果你定义ringgathering两个缩写名,那么在输 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},这样你只要记 一个forok了。

最后,警告:很容易中毒,现在我在这里回帖的时候经常想着缩写&展开....

0 个评论: