emacs入门指南

Vim、Emacs配置和使用
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

emacs入门指南

#1

帖子 kardinal » 2006-07-29 6:01

刚想起来。兄弟们说html看起来不方便,其实里面的标题链接,点一下就可以回到目录的。可能兄弟们还不知道,特别说一声。。。。。。开始的时候我也不知道,老是翻啊翻的,愁死了:lol:

---------------------------------------------------------------
看过的兄弟说说感觉咋样,或者提点意见,或者找点错别字,算是支持我了:oops:
----------------------------------------------------------------
9楼有配置文件的模板,如果不想自己费劲,先凑合用一下。
而且里面有没什么多余的东西,适合在其基础上改进
base.el 是基础配置 addon.el 是插件配置 fonts.el 是字体配置
附件
emacs_tutor.tar.gz
(28.7 KiB) 已下载 3846 次
上次由 kardinal 在 2006-07-31 2:35,总共编辑 14 次。
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

#2

帖子 kardinal » 2006-07-29 6:14

兄弟们还是下载Html版本的看吧,有一些表格,我花了很大力气作的。。。因为没有发现有类似的东东
。。。今天有一个表格太变态了,搞了一个小时,最后还是没搞定,抓狂了。。。
在表格这方面,看来还是标记语言比较擅长。。。

痛下决心了,有空学下 Latex ,好像效果不错的说。。。也不太难,我看过。就是配置很可怕,能配置起来,就没有问题了。。。 看看我运气咋样吧 :lol:

上面的那个包里有 rst 的源文件 用 APT 安装一个 python-docutils (?) 反正就是类似的东西,一个命令就可以了

rst2html emacs_tutor.rst emacs_tutor.html

也有 rst2latex rst2newlatex 的工具,没搞明白咋用。。。不过肯定是可以转成PDF的

------------------------------------------------------------------
今天刚看到的。。。下面信息栏里的状态栏,Emacs里叫模式栏(不过比较不贴切哦?)。。。看看回头要不要再改回来。。。

代码: 全选

索引

    * 基础知识
          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)

    ;;页宽
    (setq default-fill-column 60)

    ;;缺省模式 text-mode
    (setq default-major-mode 'text-mode)

    ;;设置删除纪录
    (setq kill-ring-max 200)

    ;;以空行结束
    (setq require-final-newline t)


    ;;语法加亮
    (global-font-lock-mode t)

    ;;高亮显示区域选择
    (transient-mark-mode t)

    ;;页面平滑滚动, scroll-margin 3 靠近屏幕边沿3行时开始滚动,可以很好的看到上下文。
    (setq scroll-margin 3
    scroll-conservatively 10000)

    ;;高亮显示成对括号,但不来回弹跳
    (show-paren-mode t)
    (setq show-paren-style 'parentheses)

    ;;鼠标指针规避光标
    (mouse-avoidance-mode 'animate)

    ;;粘贴于光标处,而不是鼠标指针处
    (setq mouse-yank-at-point t)

    ;;========================================
    ;; 回显区
    ;;========================================

    ;;闪屏报警
    (setq visible-bell t)

    ;;使用 y or n 提问
    (fset 'yes-or-no-p 'y-or-n-p)

    ;;锁定行高
    (setq resize-mini-windows nil)

    ;;递归minibuffer
    (setq enable-recursive-minibuffers t)

    ;;========================================
    ;; 状态栏
    ;;========================================

    ;;显示时间
    (display-time)
    ;;时间格式
    (setq display-time-24hr-format t)
    (setq display-time-day-and-date t)
    (setq display-time-interval 10)

    ;;显示列号
    (setq column-number-mode t)

    ;;标题栏显示 %f 缓冲区完整路径 %p 页面百分数 %l 行号
    (setq frame-title-format "%f")


    ;;========================================
    ;; 编辑器设定
    ;;========================================

    ;;不生成临时文件
    ;;(setq-default make-backup-files nil)

    ;;只渲染当前屏幕语法高亮,加快显示速度
    (setq lazy-lock-defer-on-scrolling t)
    (setq font-lock-support-mode 'lazy-lock-mode)
    (setq font-lock-maximum-decoration t)

    ;;将错误信息显示在回显区
    (condition-case err
        (progn
        (require 'xxx) )
      (error
       (message "Can't load xxx-mode %s" (cdr err))))

    ;;使用X剪贴板
    (setq x-select-enable-clipboard t)
    ;;设定剪贴板内容格式    适应Firefox
    (set-clipboard-coding-system 'ctext)

帮助系统

    使用Emacs的过程中,您随时可以获取帮助

    M-x help-with-tutorial
        C-h t Emacs快捷指南
    M-x info-emacs-manual
        C-h r Emacs使用手册
    M-x info
        C-h i 在线帮助

    其它
    C-h a 	M-x apropos-command 	搜索命令
    C-h f 	M-x describe-function 	函数说明
    C-h v 	M-x describe-variable 	变量说明
    C-h k 	M-x describe-key 	键绑定说明
    C-h c 	M-x describe-key-briefly 	键绑定说明
    C-h w 	M-x where-is 	查找键绑定

        * 使用帮助时,可能会分割出其它窗格。 C-x 1 关闭其它窗格 详见 窗格和缓冲区管理

基本操作

    针对文件及编辑器的一些操作,绝大多数软件中,这类操作都安排在 文件 菜单里面。
    C-x C-c 	M-x save-buffers-kill-emacs 	保存退出
    C-x C-z 	M-x iconify-or-deiconify-frame 	挂起(最小化)
    C-x C-f 	M-x find-file 	打开文件、目录
    C-x C-r 	M-x find-file-read-only 	以只读模式打开
    C-x i 	M-x insert-file 	插入文件
    C-x C-s 	M-x save-buffer 	保存
    C-x s 	M-x save-some-buffers 	询问,保存所有未保存的缓冲区
    C-x C-w 	M-x write-file 	另存为文件
    	M-x revert-buffer 	恢复到原始状态

数字参数

    Emacs中可以使用 Ctrl+u 向命令传递参数。
        例如用数字作为参数,指定命令运行的次数
    C-u <#> <command>
        M-x universal-argument (通用参数)

    例如:

    C-u 10 C-f               向前10个字符
    C-u 10 M-x forward-char

    M-<#> <command>
        negative-argument (负参数)
    M-[1-9] 快速参数
        digit-argument (数字参数)

基础编辑

    几乎所有编辑器都具有的基础功能。
        这里只是一个列表,更详细的介绍,请参阅《Emacs 快捷指南》 C-h t
    使用Readline控件的程序,例如 bash ;以及其它使用Emacs风格键绑定的程序,也使用基本相同的功能键。
        如果熟悉 bash 的快捷键,这些绑定您一定驾轻就熟:)

浏览

    	向前 	向后 	向下 	向上
    字符 	C-f 	C-b 	C-n 	C-p
    单词 	M-f 	M-b 	  	 
    行 	C-a 	C-e 	移动到行首或行尾,不能跨行
    句 	M-a 	M-e 	  	 
    段落 	M-{ 	M-} 	  	 
    缓冲区 	M-< 	M-> 	移动到缓冲区起始或结束
    卷屏 	  	  	C-v 	M-v
    行号 	M-g g 	M-g M-g 	M-x goto-line 	按行号跳转
    字符位置 	  	  	M-x goto-char 	按字符跳转


    其它:

    C-M-l (M-x reposition-window)
        将当前行卷至页面中部
    C-l (M-x recenter)
        刷新页面,将将当前行卷至页面中部 (尝试使用数字参数)

编辑

    删除
    	向前 	向后
    字符 	C-d 	M-x delete-char 	DEL 	M-x delete-backward-char
    单词 	M-d 	M-x kill-word 	C-Delete / M-DEL 	M-x backward-kill-word
    行 	光标至行末 	C-k M-x kill-line
    	整行 	C-S-backspace M-x kill-whole-line
    	按表达式删除 	C-M-k M-x kill-sexp
    区块 	C-w 	M-x kill-region
    空白 	删除连续空格 	M-x delete-horizontal-space

    Note

    上表中 DEL 实际按键为 Backspace ,PC中只有 Delete 键,而没有 DEL 键,Emacs把 Backspace 映射为 DEL

    backspace 实际按键也为 Backspace

    类似的,Emacs把PC的 Enter 键映射为 RET ; 而 RET 实际为 C-m

    可能您注意到了,Emacs进行删除时有两种处理方法, delete 和 kill

    kill
        比较类似于 剪切 ,剪切掉的内容被依次放入 剪切轮环 kill-ring ,可以召回。
    delete
        就是 删除 了,删除掉的内容并不能召回。但是可以通过 M-x undo 撤消删除。


    复制

    M-w (M-x kill-ring-save)
        将内容放入 剪切轮环 kill-ring


    粘贴

    C-y (M-x yank)
        从 剪切轮环 kill-ring 中召回最后一次放入的内容
    M-y (M-x yank-pop)

        从 剪切轮环 kill-ring 中按后进先出的顺序,依次召回

            * 这个命令只能在 M-x yank 或者 M-x yank-pop 之后使用。也就是说,只能 C-y 后 M-y , M-y 可以连续多次。


    撤消

    C-/ (M-x undo)
        撤消之前的修改(浏览部分的操作不可撤消)。

    C-_ (M-x undo)

    C-x u (M-x advertised-undo)
        advertised-unde 是 undo 命令的一个别名

        * 为了减少 undo 的次数,每插入20个字符,视为一个 undo 的单位。


    重做

    C-g M-x undo
        例如 C-g C-/ ,撤消上一次的 M-x undo 。

        *

          如果需要更多的 redo ,需要安装 redo.el 扩展

          并在配置文件中添加如下内容

              ;;---------- redo
              ;; 读取扩展
              (require 'redo)
              ;; 设置Redo的键绑定
              (global-set-key ( kbd "C-.") 'redo)

区块编辑

    关于区块的选择,可以参考 区块选择

    需要补充的是,完成区块选择时,实际定义了两种区块 :

        下面用 - 表示普通字符,用 X 表示被选中的字符。下面两个例子中,标记和光标点的位置相同。

        连续区块为标记和光标点之间连续的区块:

        ---XXXXXXXX
        XXXXXXXXXXX
        XXXXXXXXXXX
        XXXXXXXX---

        矩形区块为标记和光标点之间矩形的区块:

        ---XXXXX---
        ---XXXXX---
        ---XXXXX---
        ---XXXXX---

            *

              连续区块能够高亮显示,而矩形区块则是隐含的。

              下面例子,选中的矩形区块,与第一个例子相同。前面为 左上-右下 选择,现在为 左下-右上 选择

              --------XXX
              XXXXXXXXXXX
              XXXXXXXXXXX
              XXX--------

    连续区块
    C-SPC 	M-x set-mark-command 	在光标点处设置标记
    C-@ 	同上 	建议使用 C-z
    M-@ 	M-x mark-word 	在单词结尾处设置标记
    M-h 	M-x mark-paragraph 	选中段落
    	M-x mark-end-of-sentence 	在句末设置标记
    C-x h 	M-x mark-whole-buffer 	整个缓冲区
    C-x C-x 	M-x exchange-point-and-mark 	交换标记和光标点
    C-w 	M-x kill-region 	剪切区块
    M-w 	M-x kill-ring-save 	复制区块
    C-y 	M-x yank 	粘贴区块
    M-y 	M-x yank-pop 	轮环粘贴
    矩形区块
    C-x r k 	M-x kill-rectangle 	删除矩形区块
    C-x r y 	M-x yank-rectangle 	粘贴上一次删除的矩形区块
    C-x r t 	M-x string-rectangle 	用指定字符填充
    C-x r o 	M-x open-rectangle 	用空格插入
    C-x r c 	M-x clear-rectangle 	用空格填充
    C-x r r 	M-x copy-rectangle-to-register 	拷贝到寄存器中

        * C-x r y 粘贴时,召回的矩形区块,左上角对齐光标点

        *

          矩形区块的标记和光标点,水平位置相同时,矩形区块是一条垂线。
                  o 插入时,可直接使用 C-x r t 填充这条垂线,后两条命令根本用不到

        * 矩形区块经过的行,如果行尾在区块左侧,则行尾和区块之间的部分将强制填充。

搜索和替换

    Emacs中,默认使用 增量搜索 :在搜索对话模式中输入关键词的同时,Emacs就开始进行搜索,随着关键字的输入,不断的缩小搜索范围

    而传统的非增量搜索,则是关键词输入后,再进行搜索。
    增量搜索
    C-s 	M-x isearch-forward 	向前增量搜索
    C-r 	M-x isearch-backward 	向后增量搜索
    C-M-S 	M-x isearch-forward-regexp 	正则表达式向前增量搜索
    C-M-r 	M-x isearch-backward-regexp 	正则表达式向后增量搜索
    询问替换
    M-% 	M-x query-replace 	询问替换
    C-M-% 	M-x query-replace-regexp 	正则表达式询问替换
    搜索
    	M-x search-forward 	向前搜索
    	M-x search-backward 	向后搜索
    	M-x search-forward-regexp 	正则表达式向前搜索
    	M-x search-backward-regexp 	正则表达式向后搜索
    替换
    	M-x replace-string 	替换
    	M-x replace-regexp 	正则表达式替换

        * 增量搜索时,关键词会被一直保留。可以直接进行下一次搜索
        * 下一次增量搜索,如果之前进行了其它操作,则需要连续两次命令(快捷键),才能召回关键词。
              o 因为这种情况下,您很有可能是希望以其它关键词进行搜索
              o 同样的,没有搜索到关键词时,第一次取消,您可以重新输入关键词,连续取消两次才能取消这次搜索

        * C-g 取消搜索,回到搜索前的位置
        * RET 结束搜索,停在当前位置
              o 我倾向于使用方向键 C-b 结束搜索。拼音文字中,使用 M-b 或者 M-DEL 最好

        * 可以选中区块后,在区块内进行替换

其它

    插入控制字符

    使用 C-q ,可以在缓冲区插入一个控制字符。例如 C-q C-m = ^M


    文本换位
    字符 	C-t 	M-x transpose-chars
    单词 	M-t 	M-x transpose-words
    行 	C-x C-t 	M-x transpose-lines


    将TAB字符转换为空格

    选中需要转换的区域, M-x untabify


    对齐文本块

    选中需要对齐的区域, M-x indent-region

窗格和缓冲区管理

    多窗格
    C-x 2 	M-x split-window-vertically 	分隔出两个垂直窗格,水平分隔线
    C-x 3 	M-x split-window-horizontally 	分隔出两个水平窗格,垂直分隔线
    C-x 1 	M-x delete-other-window 	只保留当前窗格
    ESC ESC ESC 	M-x keyboard-escape-quit 	同上
    C-x 0 	M-x delete-window 	关闭当前窗格
    C-x o 	M-x other-window 	在下一个窗格中激活光标
    C-M-v 	M-x scroll-other-window 	向下卷动下一个窗格,使用负参数可以向上卷动

        * 下一个窗格 垂直分隔,则先左后右;水平分隔,则先上后下。如果窗格还有子窗格,则先遍历其子窗格后,再遍历其它窗格,以此递归。


    多缓冲区
        Emacs中,打开新的缓冲区,原有缓冲区并不会关闭

    C-x C-b 	M-x list-buffers 	查看缓冲区列表
    C-x b 	M-x switch-to-buffer 	切换到其它缓冲区
    C-x k 	M-x kill-buffer 	关闭当前缓冲区

        *

          切换到其它缓冲区时,默认上一次使用的缓冲区。尽量用 TAB 补全
        *

          使用多窗格时,缓冲区操作只对当前窗格有效
        *

          建议使用 ibuffer.el 这个扩展。 Emacs自带,在配置文件中添加如下语句

          ;;========== ibuffer
          (require 'ibuffer)
          (global-set-key ( kbd "C-x C-b ")' ibuffer)

        *

          这一个缓冲区列表的扩展效果稍差,不过还不错。Emacs自带

          ;;CRM bufer list
          (global-set-key "\C-x\C-b" 'electric-buffer-list)

寄存器管理

    寄存器用于存贮内容,在需要时取出,插入缓冲区。

    Emacs的寄存器使用单个字符命名,可以存贮两种内容 :

    光标位置和窗口状态
    C-x r SPC <寄存器名> 	M-x point-to-register 	存贮光标位置
    C-x r w <寄存器名> 	M-x window-configuration-to-register 	保存当前窗口状态
    C-x r f <寄存器名> 	M-x frame-configuration-to-register 	保存所有窗口状态
    C-x r j <寄存器名> 	M-x jump-to-register 	光标跳转
    C-x j <寄存器名> 	略…… 	同上

    文本和数字
    C-x r s <寄存器名> 	M-x copy-to-register 	将连续区块拷贝到寄存器中
    C-x r r <寄存器名> 	M-x copy-rectangle-to-register 	将矩形区块拷贝到寄存器中
    C-u <数字> C-x r n <寄存器名> 	M-x number-to-register 	将数字拷贝到寄存器中
    C-x r i <寄存器名> 	M-x insert-register 	在缓冲区中插入寄存器内容

        *

          M-x view-register 查看寄存器内容
        *

          M-x list-registers 查看寄存器列表
        *

          寄存器中的矩形区块,以矩形区块的方式插入到缓冲区中。 见 区块编辑
        *

          也可以将文件插入到寄存器中 (set-register ?<寄存器名称> '(file . <文件名>)) ,示例

          M-x lisp-interaction-mode 进入交互模式,输入如下Lisp代码:
          (set-register ?e '(file . "~/.emacs"))<光标>移动此外, C-j 求值。
          M-x list-registers 查看寄存器列表,多了寄存器 e : Register e contains the file "~/.emacs".

书签管理

    Emacs可以在当前位置创建一个书签,以便能够快速的返回。

    与存储光标位置的寄存器略有不同

            * 书签可以使用单词来命名,而不限于一个字符。起一个容易记住的名字
            * 退出Emacs后,书签不会消失,下次还可以使用

    C-x r m <name> 	M-x bookmark-set 	设置书签
    C-x r b <name> 	M-x bookmark-jump 	跳转到书签
    C-x r l 	M-x bookmark-bmenu-list 	书签列表
    	M-x bookmark-delete 	删除书签
    	M-x bookmark-load 	读取存储书签文件

            *

              书签默认存储在 ~/.emacs.bmk 文件中
            *

              在配置文件中,可以设置书签存储的文件

              ;; 书签文件的路径及文件名
              (setq bookmark-default-file "~/.emacs.d/.emacs.bmk")

              ;; 同步更新书签文件 ;; 或者退出时保存
              (setq bookmark-save-flag 1)

Shell模式

    M-x shell 进入Shell模式,可以完成一些简单的工作。不过有些情况下,输出会有一些问题

    事实上,这是Emacs自带的终端。它与 bash 和 sh 的兼容比较好,而 fish 之类比较现代的Shell,在Emacs终端里的效果则很差

    需要注意的是, readline-bash 的绑定 C-p C-n ,在Emacs终端需要使用 M-p M-n 。其它的键绑定,也以Emacs为准

宏

    记录一系列的操作,在需要的时候,运行一遍


    例如给一个单词加 " ,可以分解为以下操作:
        M-b 移动到词首
        "
        M-f 移动到词尾
        "

    如果要给一个词加上 " ,只要定位到这个词,运行上面的宏就可以了。

    当然,这只是最简单的宏。结合正则表达式进行匹配,以宏进行操作,可以完成许多复杂的操作

定义与运行

    C-x ( M-x kmacro-start-macro F3 M-x kmacro-start-macro-or-insert-counter
        开始录制宏
    C-x ) M-x kmacro-end-macro
        结束录制
    F4 M-x kmacro-end-or-call-macro
        播放刚录制的宏; 如果正在录制宏, F4 为结束录制。
    C-x e M-x kmacro-end-and-call-macro
        播放宏

宏轮环

    与 剪切轮环 类似,Emacs中也有 宏轮环 的概念: 当一个新的宏被定义,原有的宏并不消失,只是在宏轮环中的位置被挤到后面。

    C-x C-k

        进入宏轮环,以下的操作可以在宏轮环中连续进行,例如:

        C-x C-k C-p C-p C-k C-k C-k C-n C-n C-k C-p C-k C-d
    C-x C-k C-n M-x kmacro-cycle-ring-next
        在宏轮环中下翻一个宏
    C-x C-k C-p M-x kmacro-cycle-ring-previous
        在宏轮环中上翻一个宏
    C-x C-k C-d M-x kmacro-delete-ring-head
        在宏轮环中删除一个宏
    C-x C-k C-k M-x kmacro-end-or-call-macro-repeat
        直接运行宏轮环中当前的宏

命名与保存

    C-x C-k n <name> M-x kmacro-name-last-macro
        命名最后一个宏
    C-x C-k b M-x kmacro-bind-to-key
        绑定最近的一个宏。 (执行时需要 C-x C-k 作为按键序列的前缀)
    M-x insert-kbd-macro

        使用Lisp代码在缓冲区中插入宏定义

            * 保存为文件,使用 M-x load-file 加载
            * 保存到配置文件中,启动时加载

宏编辑器

    C-x C-k C-e M-x kmacro-edit-macro
        使用宏编辑器打开最后一个宏
    C-x C-k e M-x edit-kbd-macro
        编辑指定名称的宏
    C-x C-k l M-x kmacro-edit-lossage
        编辑将最后100步键盘操作(不能包含鼠标操作)

询问执行

    C-x q M-x kbd-macro-query
        在播放宏时,将进行询问确认

计数器

    记录宏的执行次数

    C-x C-k C-i M-x kmacro-insert-counter
        将宏计数器的数值插入缓冲区
    C-x C-k C-c M-x kmacro-set-counter
        为宏计数器设置一个数值
    C-x C-k C-a M-x kmacro-add-counter
        给宏计数器添加一个前缀参数
    C-x C-k C-f M-x kmacro-set-format
        给宏计数器指定一个将要插入的特殊值

文件管理

    Emacs提供了 Dired 模式来管理文件系统,并且允许使用多个缓冲开启多个 Dired 。您可以使用以下命令进入:

    C-x d M-x dired
        进入Dired列表模式
    C-x C-d M-x list-directory
        获取文件列表(简洁)
    C-x C-f M-x find-file
        打开文件,没有文件名则打开目录

使用帮助

    ? M-x dired-summary
        简单帮助 (回显区)
    h M-x describe-mode
        模式帮助

查看

    	向下 	向上
    文件 	n 	p
    	C-n 	C-p
    	SPC 	 
    目录 	> 	<
    已标记 	M-} 	M-{
    刷新 	M-G 	M-x revert-buffer

标记

暂时就到这里了
上次由 kardinal 在 2006-07-30 3:46,总共编辑 3 次。
头像
zhuqin_83
帖子: 10606
注册时间: 2006-05-13 4:02
联系:

#3

帖子 zhuqin_83 » 2006-07-29 10:09

非常感谢!
头像
drivel
帖子: 1918
注册时间: 2006-07-08 9:21
来自: University of Science and Technology Beijing
联系:

#4

帖子 drivel » 2006-07-29 12:06

期待完整版本。。
不过搂住写成一个HTML的确不利于观看,最好做成PDF,带上图片。。
网上直接浏览地址
http://drivelsun.googlepages.com/emacs_tutor.html
上次由 drivel 在 2006-07-30 20:55,总共编辑 1 次。
wukw
帖子: 107
注册时间: 2006-07-13 16:51

#5

帖子 wukw » 2006-07-29 12:52

还没看,不过鼓励一下啊。
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

#6

帖子 kardinal » 2006-07-29 13:11

可以自己转啊。。。

python-docutils 工具包里面有 rst2tex , 转成 tex格式,再输出pdf就是了。。。不过tex我不会弄


等差不多的时候,把源文件一起放上来 :lol:


图片好像不需要的吧? 偶尔用点简单的图形,可以用字符画出来,这样虽然麻烦了点,但是大家使用方便了
头像
drivel
帖子: 1918
注册时间: 2006-07-08 9:21
来自: University of Science and Technology Beijing
联系:

#7

帖子 drivel » 2006-07-29 14:43

kardinal 写了:可以自己转啊。。。

python-docutils 工具包里面有 rst2tex , 转成 tex格式,再输出pdf就是了。。。不过tex我不会弄


等差不多的时候,把源文件一起放上来 :lol:


图片好像不需要的吧? 偶尔用点简单的图形,可以用字符画出来,这样虽然麻烦了点,但是大家使用方便了
图片比较直观。。HOHO
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

#8

帖子 kardinal » 2006-07-30 4:02

忘了咋截图了。。。 :oops: 真的需要么???

要是截图的话,得试N个配色,还得选一个好看又亲和的界面。。。这没一天功夫也搞不定啊

截了图还得剪剪裁裁的。。。。万一要是截带有文字的图,还得想想把什么样的文字放进去。。。

像状态栏显示的时间,怎么也得挑个比较酷的时辰吧??但是又不想改系统时间。。。非得到点才能截。。。要是万一忘了就糗了。。。


截图太可怕了。。。 :cry: :cry:
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

#9

帖子 kardinal » 2006-07-30 14:11

发个配置文件包,包含一些最基本的扩展,比如说 redo color-theme setnu tabbar 这些,里面有一个rst 不用的兄弟可以删掉

直接在 $HOME 目录解压就可以了

如果自己已经配置的差不多了,就不需要下载了
附件
emacs_conf.tar.gz
(171.61 KiB) 已下载 992 次
头像
karron
帖子: 6226
注册时间: 2005-06-11 14:03
来自: 不明真相的群众
联系:

#10

帖子 karron » 2006-07-30 16:49

vim对于中文支持很好的。
我的blog,关于技术,软件,linux,vim <---- 所有博客均被河蟹.
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

#11

帖子 kardinal » 2006-07-30 17:09

还行吧。。。但是和输入法切换是很麻烦的。。。俺英语不好,只能用中文。。。这就很烦。。。。

而且我在终端中用Vim打开稍大的中文文档,偶尔在编辑过程中突然变成乱码。。。Gvim应该没有这种情况,没怎么用,不知道。。。

建议老兄学下Emacs吧,真的很方便的。。。以前我也觉得Emacs没什么好的,现在觉得真还不错。而且键绑定和Bash的也兼容。。。 用Vim的时候,死也不会用Bash的那么多快捷键 :lol:

和系统结合的也比较好,比如在 Emacs 里把 rst 转成 html 。 会在rst源文件下新开一个窗口,显示转换过程。如果出错,直接点击定位到出错的行。。。太方便了。。。。要是没这功能,写个文档还不得吐血。。。。

不过 rst 的表格已经开始让我吐血了。。。正考虑要不要学 latex -_-#
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

#12

帖子 kardinal » 2006-07-30 17:14

似乎兄弟们对Emacs不太感兴趣啊。。。。

算了。。。我决定先试试latex 要是能配置成的话就学一下,要是学会了,以后就用 latex 了

Emacs编辑模式介绍的也差不多了。。。当一个编辑器用就成了。。。先到这儿吧。。。。
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
联系:

#13

帖子 millenniumdark » 2006-10-04 18:57

kardinal 写了:
要是截图的话,得试N个配色,还得选一个好看又亲和的界面。。。这没一天功夫也搞不定啊

截了图还得剪剪裁裁的。。。。万一要是截带有文字的图,还得想想把什么样的文字放进去。。。

像状态栏显示的时间,怎么也得挑个比较酷的时辰吧??但是又不想改系统时间。。。非得到点才能截。。。要是万一忘了就糗了。。。


截图太可怕了。。。 :cry: :cry:
:D
lgfang
帖子: 16
注册时间: 2006-08-19 11:44
联系:

#14

帖子 lgfang » 2006-10-09 19:01

emacs自带的tutorial,manual和reference card 已经很好了呀:内容很好,文笔不错,使用也很方便呀
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

#15

帖子 kardinal » 2006-10-10 13:49

这几个文本之间的差别是非常的大的——如果楼上都看过了的话。。。
尤其是在下的这个教程,风格上的差别就更大了——最起码的,语言都不一样 :lol:
回复