Emacs中那些简化输入的方法--Autotyping

                             Autotyping
                             ==========

Author: lujun9972
Date: 2014-01-29 19:56:51 中国标准时间


Table of Contents
=================
1 使用Skeleton
2 skeleton语言
   2.1 skeleton的结构
       2.1.1 INTERACTOR可能为:
       2.1.2 ELEMENT可能为:
   2.2 使用
3 自动插入匹配的字符
4 自动插入预定义文本到空文件中
   4.1 auto-insert命令
   4.2 auto-insert-alist变量说明
   4.3 define-auto-insert命令
   4.4 auto-insert变量
   4.5 auto-insert-query变量
5 插入/更新版权信息
   5.1 copyright命令
   5.2 copyright-update命令
   5.3 copyright-limit变量
   5.4 copyright-current-year变量
   5.5 copyright-query变量
6 自动更新文件时间戳
   6.1 time-stamp命令
   6.2 time-stamp-active变量
   6.3 time-stamp-toggle-active命令
   6.4 time-stamp-format变量
   6.5 time-stamp-line-limit变量
   6.6 time-stamp-start / time-stamp-end变量
   6.7 time-stamp-count变量
7 根据光标处文本快速插入URL
   7.1 quickurl命令
   7.2 quickurl-url-file变量
   7.3 quickurl-add-url命令
   7.4 quickurl-list命令
8 Tempo
   8.1 tempo-backward-mark命令
   8.2 tempo-forward-mark命令
   8.3 tempo-define-template命令
9 Hippie扩展
   9.1 hippie-expand命令
   9.2 hippie-expand-try-functions-list变量


1 使用Skeleton
===============
 * 专门定义的命令--一般以C-c开头
 * 使用Abbrev实现Skeleton
 * skeleton语言

2 skeleton语言
===============
 skeleton是专为Lisp语言定义的扩展,skeletons由函数`skeleton-insert`进行解析

2.1 skeleton的结构
-------------------
  skeleton的结构为(INTERACTOR ELEMENT...),

2.1.1 INTERACTOR可能为:
~~~~~~~~~~~~~~~~~~~~~~~~
       * prompt-string
       * nil
       * Lisp expression
         可以在lisp中可以进行复杂的读取操作并返回计算的结果

2.1.2 ELEMENT可能为:
~~~~~~~~~~~~~~~~~~~~~
       * 字符串`"string"` / 字符 `?C` `?\C`
         该字符串/字符会被传递給`skeleton-transformation-function`表示的函数,并插入返回值,默认该函数为identity
       * 回车符`?\n`
         回车并重排
       * _
         标识interregion的插入点
       * -
         标识插入点,但不会插入interregion
       * >
         重排该行
       * >_
         重排_所代表的interregion
       * &
         逻辑与,表示如果前一个ELEMENT操作时移动了光标,则进行下一个ELEMENT操作
       * |
         逻辑或,表示如果后一个ELEMENT操作时没有移动光标,则进行下一个ELEMENT操作
       * -NUMBER
         表示删除前NUMBER个字符
       * ()或nil
         无意义,直接略过.
       * @
         增加一个position到变量`skeleton-positions`中
       * resume:(注意后面的冒号)
         如果前面的ELEMENT操作抛出quit操作,则在这里继续往下操作
       * quit
         这是一个常量,当由于用户退出操作而进入resume:部分时,该值为非nil
       * 另一个SKELETON
         ELEMENT也可以是一个SKELETON,被称为subskeleton.
       * LISP表达式
         执行该LISP表达式,并以其返回值作为要操作的ELEMENT说明,在该LISP表达式中可以使用一下这些变量
         * str
               这是一个特殊的变量,第一次执行时,会要求用户输入一串字符串,并根据INTERACTOR进行解析,并返回解析结果. 之后再遇到该变量则直接使用该解析结果.
               对于每个subskeleton来说,都有自己的str变量
         * input
               设置读取str变量时的初始值.
         * v1 v2
               提供给用户自定义的本地变量
       * 'LISP表达式'(被引用起来的LISP表达式)
         执行LISP表达式,但忽略它的返回值
       * 其他
         有些mode可以自定义其他的skeleton元素. 这些自定义的元素定义在变量`skeleton-further-elements`中

2.2 使用
---------
  * 使用宏`define-skeleton`来为定义的skeleton分配命令


 (define-skeleton COMMAND DOCUMENTATION &rest SKELETON)
 ;; Define a user-configurable COMMAND that enters a statement skeleton.
 ;; DOCUMENTATION is that of the command.

3 自动插入匹配的字符
=====================
 * 可以通过绑定第一个匹配字符到命令`skeleton-pair-insert-maybe`(默认是绑定到self-insert-command)来实现.
 * 命令中maybe的意思是,默认情况下,自动插入匹配功能是关闭的,要启用该功能需要设置`skeleton-pair`为非nil,这时若想临时取消自动插入匹配功能,则在输入前先C-u
 * 通过定义变量`skeleton-pair-alist`,可以自定义匹配关系

4 自动插入预定义文本到空文件中
===============================

4.1 auto-insert命令
--------------------
  M-x auto-insert会自动插入一段预定义的文本到buffer头部. 该命令根据变量`auto-insert-alist`寻找预定义的文本.

4.2 auto-insert-alist变量说明
------------------------------
  该变量是一个列表,元素格式为 (CONDITION . ACTION)或((CONDITION . DESCRIPTION) . ACTION)
  * CONDITION
        CONDITION可以是个正则表达式的字符串,用来匹配新文件的名称.
    也可以是一个表示mode的符号,用来匹配处于该mode下的buffer.
  * DESCRIPTION
        描述字符
  * ACTION
        ACTION可能是一个文件的绝对路径,则该文件的内容被插入buffer中.
        也可以是一段skeleton语言,则被扩展后插入buffer中.
        也可能是一段Lisp代码,则执行该段代码.
        甚至可以是一个vector,包含了多个上述的内容.      

4.3 define-auto-insert命令
---------------------------
  使用define-auto-insert可以增加或者修改变量`auto-insert-alist`的值.

4.4 auto-insert变量
--------------------
  该变量决定了当采用非交互方式调用`auto-insert`命令时,会发生什么操作
  * nil
        什么都不做
  * t
        作插入动作
  * 其他
        作插入动作,但是标记为没有buffer未被修改

4.5 auto-insert-query变量
--------------------------
  该变量决定了在作auto-insert时,是否发出询问給用户确定
  * nil
        不询问
  * 'function
        只有当非交互式地调用auto-insert时才询问
  * 其他
        一直都询问

5 插入/更新版权信息
====================

5.1 copyright命令
------------------
  M-x copyright插入版权信息,其中by的部分取至环境变量`ORGANIZATION`. 若没有设置该变量则提示输入该信息.

5.2 copyright-update命令
-------------------------
  M-x copyright-update搜索buffer中的版权信息(仅搜索前`copyright-limit`个字符),并更新版本信息.

5.3 copyright-limit变量
------------------------
  copyright-update命令在搜索buffer中版权信息时,仅搜索前`copyright-limit`个字符

5.4 copyright-current-year变量
-------------------------------
  该变量决定了版权信息中的时间.

5.5 copyright-query变量
------------------------
  该变量控制了是否在更新版本信息时询问用户是否确定. 该变量值的意义类似`auto-insert-query`

6 自动更新文件时间戳
=====================

6.1 time-stamp命令
-------------------
  M-x time-stamp自动更新文件中的时间戳信息. 该时间戳信息必须符合一定的模板.
  默认情况下,该模板必须在文件的前8行出现,且格式为:


 Time-stamp: <>
 Time-stamp: " "

6.2 time-stamp-active变量
--------------------------
  该变量决定了time-stamp命令是否有效

6.3 time-stamp-toggle-active命令
---------------------------------
  该命令切换`time-stamp-active`变量的值.

6.4 time-stamp-format变量
--------------------------
  该变量决定了时间戳的格式

6.5 time-stamp-line-limit变量
------------------------------
  该变量决定了从文件前多少行内查找时间戳模板

6.6 time-stamp-start / time-stamp-end变量
------------------------------------------
  这两个变量决定了时间戳模板的格式

6.7 time-stamp-count变量
-------------------------
  决定了一个buffer中有多少个时间戳信息.

7 根据光标处文本快速插入URL
============================

7.1 quickurl命令
-----------------
  该命令根据光标所在文本插入URL. 插入的URL存储在外部文件(由变量`quickurl-url-file`决定)中,文件内容为一个list,其元素格式为(KEY . URL)或者(KEY URL COMMENT). 例如:


 (("FSF"      "http://www.fsf.org/" "The Free Software Foundation")
      ("emacs"  . "http://www.emacs.org/")
      ("hagbard"  "http://www.hagbard.demon.co.uk" "Hagbard's World"))

7.2 quickurl-url-file变量
--------------------------
  该变量决定了外部URL存储在那个文件中

7.3 quickurl-add-url命令
-------------------------
  用来增加新的KEY/URL对

7.4 quickurl-list命令
----------------------
  交互编辑URL列表

8 Tempo
========
 Tempo包提供了一种简单的方法来定义强大的模板和宏. 详见tempo.el中的commentary部分

8.1 tempo-backward-mark命令
----------------------------

8.2 tempo-forward-mark命令
---------------------------

8.3 tempo-define-template命令
------------------------------

9 Hippie扩展
=============
 详细请见hippie-exp.el中的commentary部分

9.1 hippie-expand命令
----------------------
  该命令使用多种方法来补全/扩展光标前的文本. 重复调用该函数,则会列出所有可能的补全.
  该命令依次调用变量`hippie-expand-try-functions-list`中的补全函数去补全.
  若在命令前加了正数的参数,则直接调用`hippie-expand-try-functions-list`中第N个函数进行补全.
  若命令前加了负数的参数或C-u,则表示取消补全.

9.2 hippie-expand-try-functions-list变量
-----------------------------------------
  该变量定义了`hippie-expand`命令的补全函数和次序.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值