zoukankan      html  css  js  c++  java
  • emacs 缩写词功能

    原文地址:http://lifegoo.pluskid.org/wiki/EmacsAbbrev.html

    缩写词功能

    Emacs 有非常方便的缩写词功能,例如,经常要输入“the National Institute of Standards and Technology”让你非常厌烦,你可以定义一个缩写词“nist”, 这样,每当你输入“nist”然后接着输入空格或者标点符号等的时候就会被 Emacs 自动扩展为“the National Institute of Standards and Technology”。

    尝试 Emacs 自带的缩写词功能

    打开 minor-mode abbrev-mode 之后,就可以使用缩写词功能了。可以定义全局 的缩写词,也可以定义只针对某一个 mode 的缩写词,这会覆盖掉同名的全局缩 写词。

    定义缩写词

    可以分别使用 C-x a g 和 C-x a l 来定义全局和针对某个 mode 的缩写词,他 们会从 minibuffer 读取缩写形式,并把当前光标以前的一个或者几个词作为缩 写词的扩展形式,可以通过 C-u 来传递一个数值参数告诉他需要使用几个词。例 如,要定义“find outer otter”的缩写为“foo”,先输入“find outer otter”,然 后键入 C-u 3 C-x a g f o o <RET> 即可。当用 C-u 传入参数零的时候表示使 用选中的区域作为要扩展的形式。反过来,你可以先输入“foo”,然后再键入 C-x a i g 或者 C-x a i l ,通过在 minibuffer 输入扩展后的形式的方法来定 义缩写词,这样的方法不用费心用 C-u 去传递参数,相比之下要方便一些。

    要删除一个缩写词,只需要给 C-x a g 或者 C-x a l 传递一个负参数即可,它 会让你输入要删除的缩写词。另外,还可以通过 M-x kill-all-abbrevs 来删除 所有的(包括全局和局部的)缩写词。

    使用缩写词

    缩写词会在你键入一个不能作为单词的内容的字符的时候得到扩展,换句话说, 任何可以作为单词内容的字符都可以作为缩写词的内容。

    缩写词扩展的时候会保留大小写状态,例如:“foo”会扩展为“find outer otter”,“Foo”会扩展为“Find outer otter”,而根据 abbrev-all-caps 变量的 设定,“FOO”会扩展为“FIND OUTER OTTER”或者“Find Outer Otter”。

    在没有打开 abbrev-mode 的时候,也可以通过 C-x a e 来手动扩展光标所在出 的缩写词。另外,还可以用 M-x expand-region-abbrevs 来在一个区域进行手工 扩展。

    假如你定义了一个缩写词“cnst”扩展为“construction”,现在你希望输入 “recnst”并让他扩展为“reconstruction”。直接输入“recnst”是不行的,这个时 候 M-'(abbrev-prefix-mark) 就起作用了。输入“re”,然后键入 M-' (这个时候 会出现一个连字符)接着再输入“cnst”,之后再输入空格之类的,就可以成功扩展 为“reconstruction”了。

    有时候不希望缩写词被扩展,这个时候只需要使用 C-q 来输入缩写词后面的那 个空格或者标点符号即可。

    保存缩写词定义

    可以分别用 M-x write-abbrev-file 和 M-x read-abbrev-file 来保存和加载 缩写词定义。如果没有提供文件名,他们会使用变量 abbrev-file-name 所提供 的文件名,默认是 ~/.abbrev_defs 。另外,如果save-abbrevs 不为 nil 的 话,Emacs 在保存所有文件的时候(例如 C-x s 或者 C-x C-c 的时候)也会把缩 写词保存到 abbrev-file-name 所指定的文件中去。

    msf-abbrev.el

    简介

    msf-abbrev 最初是设计来管理 mode 相关的缩写词的,现在功能已经相当完善, 可以说远远超过了缩写词的功能,在它的主页上有一个动画的 demo ,生动地展 示了他的强大功能。

    msf-abbrev 使用目录结构来管理各个 mode 特定的缩写词。例如,把缩写词定 义在 ~/emacs/mode-abbrevs 目录下:

    ~/emacs/mode-abbrevs
     |
     +---- muse-mode
     |      |
     |      +---- emacs
     |      |
     |      `---- debian
     `---- c-mode
            |
            +---- ifndefx
            |
            `---- fopenx
    

    其中每一个文件就是一个单独的缩写词定义。这样的布局让缩写词管理变得非常 方便。并且缩写词的定义也是使用了一种简单的语法,而不需要指定 Elisp 的 相关细节。

    定义缩写词的语法

    文件的内容就是缩写词扩展后的内容,不过,下面一些特殊形式会被解释:

    <cursor>
    表示扩展结束后光标所在的位置。
    <varlookup "user-mail-address">
    插入 Elisp 变量 user-mail-address 的 值。
    <elisp "(insert (current-time-string))">
    在当前位置执行引号内的 Elisp 表达式。
    <query "what color? ">
    在 minibuffer 里面显示引号内的内容,并把用户的 输入作为替换内容。如果有几个相同的 query ,那么只会提问一次,并在后面 的 query 中使用前一次获得的值。
    <field "foo">
    生成一个叫做 foo 的域,可以使用 TAB 或者 Shift+Tab 在各 个域之间切换。
    <choose><choice "foo"><choice "bar"></choose>
    生成一个可以选择内容的 域,按 Enter 键并使用方向键即可选择某个选项。
    <endpoint>
    标记一系列域的结束位置,即 TAB 键最后会到达的位置。
    <comment "blah blah">
    作为注释,最后会被空内容替换掉。

    例如,我定义的 c-mode 的 ifndefx 内容为:

    在 foo.h 中输入 ifndefx 并按下空格键就会扩展为:

    安装和配置

    可以从主页下载,也可以在这里得到 msf-abbrev.el 的 1.0beta1 版。把他放 到自己的 load-path 所包含的路径里面。并根据自己的需要在 ~/.emacs 里面 加入下面类似的初始化语句:

    之后可以手工在相应的目录下面添加缩写词,或者使用 C-c a 动态地给某个 mode 添加缩写词了。另外,在主页上还可以找到通过解析 glibc 的 info 文档 而得到的针对 c-mode 的缩写词包,这也算是一个非常不错的自动完成以及在线 文档功能了。

  • 相关阅读:
    古典问题rabbit
    输入两个正整数m和n,求其最大公约数和最小公倍数
    水仙花数
    输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。
    mybatis中的#和$的区别
    SpringMVC 中整合JSON、XML视图
    Gson简要使用笔记
    Spring Framework Artifacts
    Quartz的cron表达式
    清除svn文件目录的bat脚本
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2137491.html
Copyright © 2011-2022 走看看