现在的位置: 首页 > 综合 > 正文

emacs 使用汇总

2013年04月27日 ⁄ 综合 ⁄ 共 5110字 ⁄ 字号 评论关闭

http://www.chinaunix.net/jh/23/546293.html

索引


    * 基础知识

          o 缓冲区

          o 信息栏

          o 按键描述

          o 回显区

          o 内部命令

          o Emacs命令行

          o Emacs终端

          o Emacs文件管理器

          o 区块选择

          o 中止执行

          o 基本配置

    * 帮助系统

    * 基本操作

    * 数字参数

    * 基础编辑

          o 浏览

          o 编辑

          o 区块编辑

          o 搜索和替换

          o 其它

    * 窗格和缓冲区管理

    * 寄存器管理

    * 书签管理

    * Shell模式

    * 宏

          o 定义与运行

          o 宏轮环

          o 命名与保存

          o 宏编辑器

          o 询问执行

          o 计数器

    * 文件管理

          o 使用帮助

          o 查看

          o 标记

    * 扩展管理

    * Guns

    * web

    * ftp


基础知识


    Emacs是一个架构在编辑器上的集成环境,除了最基本的编辑功能,还可以完成文件管理、终端模拟、浏览网页、收发邮件、编译程序等工作。


    Emacs使用Elisp语言进行配置和扩展,它本身也可以作为Elisp解释器使用。



    Emacs的界面主要由三部分构成:信息栏、回显区(echo)、缓冲区(buffer)


缓冲区


    缓冲区(buffer) 类似于常规编辑器的文字编辑区。Emacs并不直接对文件进行修改,而是读取文件的内容并显示在缓冲区中,在收到保存的指令后才将修改写入文件。


    缓冲区名称通常为它所读取文件的文件名。


信息栏


    在缓冲区之下为状态栏,类似于这种形式


    -U:**  emacs_tutor.rst   (24,0)   (reST)----7:55下午---------------


    显示当前缓冲区的状态,例如是否已保存、缓冲区名称、光标位置、主模式名称……



    标题栏也可以显示一部分信息,并且可以自由定义。


按键描述


    Emacs的功能键,通常为组合键。例如


        Emacs    实际按键    功能

        C-f    Ctrl+f    光标前进一格

        C-b    Ctrl+b    光标后退一格

        C-d    Ctrl+d    删除一个字符

        C-a    Ctrl+a    回到行首


    Emacs对按键的描述方式中, - 之前的一个字符为修饰键,表示按住该键,再按 - 后面的键。


    例如: C-a 表示按住 Ctrl 再按 a 键。 Emacs对其它一些特殊按键的描述


        *


          C-


              按住Ctrl键


        *


          M-


              按住Meta键。在PC上,Meta键通常对应 Alt 键。也可以按一次 ESC 键(Windows下对应 WIN 键)


        *


          C-M-


              同时按住Ctrl键和Meta键


        *


          S-


              Shift键


        *


          s-


              Linux下对应 WIN* 键


        *


          RET


              回车键


        *


          TAB


              Tab键


        *


          ESC


              Esc键


        *


          SPC


              空格键


        *


          DEL Backspace


              退格键


        *


          Delete


              删除键


    在后面的部分中,将统一使用Emacs对按键的描述方式。




    Emacs十分强大,上面的组合键,远不能涵盖Emacs的功能于万一。除基本的编辑功能键外,其它功能多使用 按键序列: 连续的按下多组快捷键


    例如: C-x C-c 表示先按下 C-x ,再按下 C-c 。也就是 Ctrl+x 后,再 Ctrl+c (退出Emacs)


    接下来 C-h t ,进入 《Emacs 快捷指南》


回显区


    C-x h (先按Ctrl+x 再按h)后,您会发现状态栏和编辑器底部之间的区域出现 Mark set 字样。同时,整个缓冲区的内容都被选中。


    它是一个迷你缓冲区(minibuffer),叫作回显区(echo area),提示您正在进行的操作,比如 Mark set(设定标记)


    如果一个按键序列没有完成,却停止了输入。大约两秒后,回显区会显示已输入部分,以免您忘记。千万不要以为是Emacs反应迟钝:)


内部命令


    C-h k 后,回显区提示


    Describe key (or click or menu item):


    接着 C-x h ,您会发现,缓冲区被水平分割为两个。另一个名为 *help* 缓冲区中显示的内容为


    C-x h runs the command mark-whole-buffer

       which is an interactive compiled Lisp function in `simple.el'.

    It is bound to C-x h, <menu-bar> <edit> <mark-whole-buffer>.

    (mark-whole-buffer)


    Put point at beginning and mark at end of buffer.

    You probably should not use this function in Lisp programs;

    it is usually a mistake for a Lisp function to use any subroutine

    that uses or sets the mark.


    [back]


    第一行说明了 C-x h 运行的命令为 mark-whole-buffer

    第二行说明了该命令由 simple.el 这个扩展提供,绑定到 C-x h 、 菜单栏-编辑-标记全部缓冲区 、 和命令 mark-whole-buffer

    第三行介绍了这个命令的行为: 在文档末尾设置一个标记,并把光标点移动到文档起始。


    Note


    光标点假定光标为插入式(竖线),位置在覆盖式光标(方块)的左侧。


    事实上,Emacs中的相关判定以光标点为准!方块形光标只是为了减少视觉疲劳:)



    Emacs使用命令进行处理,快捷键只是一种发送命令的方法!



    一般情况下,我们用不到这么详细的说明,而且英文看起来也比较吃力。您可以使用 C-h c 以简洁模式查看说明。 只在回显区显示键位和它执行的命令:


    C-x h runs the command mark-whole-buffer


    通常这就足够了。



    如果您知道一个命令,而不知道它绑定到什么键上,您可以使用 C-h w ,也就是命令 Where-is


Emacs命令行


    由于Emacs太过强大,内部命令恒河沙数,根本不可能有同样数量的快捷键位来绑定它们!


    对于没有绑定的命令,可以使用 命令行 执行!



    M-x (Alt+x) 开启命令行,回显区显示为 M-x ,然后输入 newline


    这个命令默认绑定在回车键,所以它和回车键的作用一样为 换行


    C-h w newline 结果是: newline is on RET


    Tip


    命令行中,可以使用 TAB 补全,使用 M-p 上翻, M-n 下翻



    在后面的部分中,统一使用 M-x command 来表示 内部命令 command ;内部命令以 (command) 的形式写到配置文件中,当然配置文件稍稍复杂一点,很少直接这么写:)


Emacs终端


    M-x shell 激活Emacs终端。可以在Emacs终端中使用外部命令。


    需要注意的是,Emacs终端是哑终端,一些类型的输出不能够正确显示。


    在Emacs终端中使用 exit 命令退出。



    M-! (Alt+Shift+1)临时执行一条外部命令,并输出在名为 *Shell Command Output* 的缓冲区中 (M-x shell-command)


    C-u M-! (Ctrl+u Alt+Shift+1)临时执行一条外部命令,并输出到光标位置。


Emacs文件管理器


    C-x d 进入Dired列表模式


    C-x C-d 获取文件列表(简洁)


    C-x C-f 打开文件,输入路径为打开目录


    详细介绍见 文件管理


区块选择


    很多时候,我们需要选中缓冲区中的某一部分内容。和大多数程序一样,您可以在被选择区块的起始点按下左键,移动鼠标,在结束点释放左键,这部分区块便被选中。


    这种方式效率并不高,而且一些场合并没有鼠标支持,例如控制台或者远程登录。


    事实上,Emacs进行区块选择的方法,是设置一个标记,标记到光标点之间的部分将被选中。


    标记的位置为 M-x set-mark-command 时,光标点所处的位置。



    M-x set-mark-command 是设置标记的内部命令,默认绑定在 C-SPC 键上。


    如果使用输入法,这个键位多半是切换输入法的快捷键。键盘指令会先被输入法拦截下来,而无法发送到Emacs。


    当然也可以使用 M-@ 来设定标记。不过 M-@ 原绑定为 M-x mark-word ,虽然差不太多,但有时并不好用;况且对于一个常用的命令来讲, M-@ 键位的难度太高了……



    Emacs的键位中,几乎没有默认绑定在 WIN 键上的命令,不妨利用一下:)


    在Emacs的用户配置文件 ~/.emacs 中添加如下内容:


    ;; WIN+Space 设置标记

    (global-set-key (kbd "s-SPC") 'set-mark-command)


    重启Emacs,或者在 ~/.emacs 文件的缓冲区中执行命令 M-x eval-buffer ,便可以使配置文件立即生效:)



    在某些类型的终端中,WIN键不起作用,建议使用命令。或者绑定到 C-z (Ctrl+z)


    ;; (在注释里说明原命令和绑定,是一个良好的习惯)

    ;; C-z 设置标记 ;;  C-z:M-x iconify-or-deiconify-frame:C-z,C-x C-z

    (global-set-key (kbd "C-z") 'set-mark-command)


    C-z ,原为 M-x iconify-or-deiconify-frame 键为: C-z, C-x C-z 。绑定后,仍可以使用 C-x C-z 挂起Emacs。


中止执行


    如果想放弃一个命令,可以使用 C-g (M-x keyboard-quit)打断。


    当然了,建议您使用快捷键 C-g ,因为这时 M-x 通常是没有效果的



    ESC ESC ESC (M-x keyboard-escape-quit)可以从一些交互命令中退出。


    例如从 询问替换 M-x query-replace 中退出。


    如果 C-g 不能搞定,这时多半需要连按三次 ESC


基本配置


    您已经知道了,Emacs的配置文件为 ~/.emacs 。配置文件中,以 ; 起始到行末的部分为注释。


    让我们些简单配置一下:


    ;;========================================

    ;; 外观设置

    ;;========================================


    ;;禁用工具栏

    (tool-bar-mode nil)


    ;;禁用菜单栏,F10 开启关闭菜单

    (menu-bar-mode nil)


    ;;禁用滚动栏,用鼠标滚轮代替

    ;;(scroll-bar-mode nil)


    ;;禁用启动画面

    (setq inhibit-startup-message t)


    ;;========================================

    ;; 键绑定

    ;;========================================


    ;; C-z 设置标记 ;;  C-z:M-x iconify-or-deiconify-frame:C-z,C-x C-z

    (global-set-key (kbd "C-z") 'set-mark-command)


    ;;F10显示/隐藏菜单栏 ;; M-x menu-bar-open

    ;;(global-set-key (kbd "F10") 'menu-bar-mode)


    ;;WIN+s进入Shell ;; M-x shell

    (global-set-key (kbd "s-s") 'shell)

    ;;(define-key ctl-x-map "\M-s" 'shell)


    ;;WIN+space 设置标记

    (global-set-key (kbd "s-SPC") 'set-mark-command)


    ;;========================================

    ;; 缓冲区

    ;;========================================


    ;;设定行距

    (setq default-line-spacing 4)

抱歉!评论已关闭.