Emacs入门

Emacs基本概念

  • buffer
    缓冲区。Emacs并不直接对文档进行操作,它是把文件加载进buffer,用户直接操作buffer,只有当用户确定把buffer中所做的修改写入文件时,Emacs才把buffer中的内容写入文件。buffer实际上就是一个内存缓冲区。
  • window
    窗口。Emacs中的窗口是用来显示buffer的一个区域。
  • frame
    Emacs中的frame就是操作系统中的窗口。

buffer是文件的内存表示,windows则是显示buffer的区域,一个frame中可以有多个window,Emacs则可以有多个frame

  • Emacs Lisp
    Emacs最基础的部分是用c写的,其他部分都是用Emacs Lisp语言写的,Emacs Lisp语言是基于lisp语言的。lisp是List Processor的缩写,即链表处理语言,所以lisp语言的操作都是基于链表的,它的语法也是链表结构,链表的第一个元素表示函数名,其他元素是参数,比如通常语言中的a+b,在lisp就是(+ a b)
  • mode
    mode有major mode和minor mode之分,每个缓冲区对应一个major mode,也只有一个major mode,但是可以有多个minor mode。Emacs对每一种文件都有一个mode。
  • 命令
    你对Emacs所有的操作都是对Emacs的命令的调用。比如,你在text-mode里,当你按下任何字母键进行编辑的时候,实际上是调用的Emacs的命令self-insert-command。
  • 快捷键
    Emacs中Control键用C表示,Alt键用M表示,即:C-c表示Control c,M-x表示Alt x.
    除掉以Alt键开头的,比如Alt a,Emacs中的快捷键基本上都有一个前缀,Emacs中最多的快捷键前缀就是C-x,C-c,前缀表示,你不必要一起按下前缀和后缀,可以先按下前缀,Emacs会等待你按下剩余的快捷键,这样Emacs中的快捷键按起来非常的方便。
  • keymap
    键盘映射。Emacs的快捷键是通过keymap来控制的。有全局和局部的keymap。每个mode都会有一个自己的局部的keymap,局部的keymap会覆盖全局的keymap,另外如果对应的major mode有开启的minor mode,而且这个minor mode有keymap的话,这个minor mode的keymap回覆盖major mode的keymap。

Emacs快捷键

C-代表按住Ctrl键
M-代表按住Alt键,也可以用按一下ESC放开代替

最先要记住的
M-x <cmd>      输入指令执行,在输入时用Tab可以自动补全或列出项目
C-g            取消当前操作指令
C-h k <key>    查看当前按键绑定的指令及介绍

移动插入点(光标)
C-n/p/b/f      到 下一行、上一行、前一字符、后一字符
M-b/f          到 前、后一单词
C-a/e          到 行首、末
M-a/e          到 句首、末
M-</>        到 文件首、末
C-v/M-v        下、上翻屏
C-l        循环 将当前光标行显示在窗口下、中、上位置

C-u <num> <xx> 重复执行之后的 xx 命令 num 次,不输入num默认为4
C-u C-v        向下滚动4行

编辑
C-d       删除 前、后字符
M-d     移除 前、后单词
C-k/M-k        移除到 行末、句末

C-/            undo/redo
C-x u          undo/redo

C-w            剪切
C-y        召回(粘贴)(粘贴移除的、复制、剪切的内容)
C-c        复制(emacs一般也默认定制了与OS的剪切复制粘贴相同的快捷键)

查找
C-s 
  C-s 查找下一个
  C-r 查找上一下
  C-g 一次返回,二次结束查找
  回车    停止到当前查找到的内容
替换
M-%

标记
M-@

文件操作
C-x C-c        退出emacs

C-x C-f        打开文件
C-x C-s        保存文件
C-x C-v        在当前缓冲区重新打开一个文件,可以用于清除undo历史!!

C-x 1          最大化当前缓冲,关闭其它
C-x 2/3        垂直、水平创建新缓冲区
C-x o          切换到其它缓冲区

C-x C-b        列出缓冲区
C-x b          提示输入缓冲区名称,切换当前窗口的缓冲区
C-x k          删除当前缓冲区

C-j        换行回车,有些模式下比较直接回车好用,有增加缩进之类的功能

如果只是入门的话,上边的已经够用了

更多快捷键

  • 帮助

    C-h r 打开emacs 手册。[2]
    C-h f 查找一个函数的用法。[2]
    C-h k 查找快捷键的用途。[2]
    C-h a 查找匹配的命令。[2]
    C-h ? 显示帮助的帮助,说明帮助的用法。[2]

  • 文件操作

    C-x C-f 打开文件,出现提示时输入/username@host:filepath可编辑FTP文件
    C-x C-v 打开一个文件,取代当前缓冲区
    C-x C-s 保存文件
    C-x C-w 存为新文件
    C-x i 插入文件
    C-x C-q 切换为只读或者读写模式
    C-x C-c 退出Emacs

  • 编辑操作

    C-f 前进一个字符
    C-b 后退一个字符
    M-f 前进一个单词
    M-b 后退一个单词
    C-a 移到行首
    C-e 移到行尾
    M-a 移到句首
    M-e 移到句尾
    C-p 后退一行
    C-n 前进一行
    M-x goto-line 跳到指定行
    C-v 向下翻页
    M-v 向上翻页
    M-< 缓冲区头部
    M-> 缓冲区尾部
    C-M-f 向前匹配括号
    C-M-b 向后匹配括号
    C-l 当前行居中
    M-n or C-u n 重复操作随后的命令n次
    C-u 重复操作随后的命令4次
    C-u C-u 重复操作随后的命令8次
    C-x ESC ESC 执行历史命令记录,M-p选择上一条命令,M-n选择下一条命令
    C-d 删除一个字符
    M-d 删除一个单词
    C-k 删除一行
    M-k 删除一句
    C-w 删除标记区域
    C-y 粘贴删除的内容
    注意:C-y可以粘贴连续C-k删除的内容;先按C-y,然后按M-y可以选择粘贴被删除的内容
    C-@ 标记开始区域
    C-x h 标记所有文字
    C-x C-x 交换光标位置和区域标记区开头
    M-w 复制标记区域
    C-_ or C-x u 撤消操作

  • 执行命令

    M-x shell 打开SHELL
    M-x ansi-term 运行term
    M-! 执行SHELL命令 (shell-command)
    M-1 M-! 执行SHELL命令,命令输出插入光标位置,不打开新输出窗口
    M-| 针对某一特定区域执行命令(shell-command-on-region), 比如 C-x h M-|uuencode

  • 窗口操作

    C-x 0 关闭本窗口
    C-x 1 只留下一个窗口
    C-x 2 垂直均分窗口
    C-x 3 水平均分窗口
    C-x o 切换到别的窗口
    C-x s 保存所有窗口的缓冲
    C-x b 选择当前窗口的缓冲区
    C-x ^ 纵向扩大窗口
    C-x } 横向扩大窗口
    C-x { 横向缩小窗口[2]

  • 缓冲操作

    C-x C-b 打开缓冲区列表
    d or k 标记为删除
    ~ 标记为未修改状态
    % 标记为只读
    s 保存缓冲
    u 取消标记
    x 执行标记的操作
    f 在当前窗口打开该缓冲区
    o 在其他窗口打开该缓冲区

  • 目录操作

    C-x d 打开目录模式
    s 按日期/文件名排序显示
    v 阅读光标所在的文件
    q 退出阅读的文件
    d 标记为删除
    x 执行标记
    D 马上删除当前文件
    C 拷贝当前文件
    R重命名当前文件
    +新建文件夹
    Z压缩文件
    ! 对光标所在的文件执行SHELL命令
    g 刷新显示
    i 在当前缓冲区的末尾插入子目录的内容
    [n]m 标记光标所在的文件,如果指定n,则从光标所在的文件起后n个文件被标记
    [n]u 取消当前光标标记的文件,n的含义同上
    t 反向标记文件
    %-m 正则标记
    q 退出目录模式
    说明:在目录模式中,如果输入!,在命令行中包含或者?,有特殊的含义。匹配当前光标所在的文件和所有标记的文件,?分别在每一个标记的文件上执行该命令。

  • 程序编译

    M-x compile 执行编译操作
    M-x gdb GDB排错
    M-x dbx DBX排错
    M-x xdb XDB排错
    M-x sdb SDB排错

  • 搜索模式

    C-s key 向前搜索
    C-s 查找下一个
    ENTER 停止搜索
    C-r key 反向搜索
    C-s C-w 以光标所在位置的字为关键字搜索
    C-s C-s 重复上次搜索
    C-r C-r 重复上次反向搜索
    C-s ENTER C-w 进入单词搜索模式
    C-r ENTER C-w 进入反向单词搜索模式
    M-x replace-string ENTER search-string ENTER 替换
    M-% search-string ENTER replace-string ENTER 交互替换
    C-r 在进入查找/替换模式后,该命令进入迭代编辑模式
    C-M-x 退出迭代编辑模式,返回到查找/替换模式
    C-M-s 向前正则搜索
    C-M-r 向后正则搜索
    C-M-% 正则交互替换

  • SHELL模式

    C-c C-c 相当于Bash下的C-c
    C-c C-z 相当于Bash下的C-z
    C-c C-d 相当于Bash下的C-d
    M-p 执行前一条命令
    M-n 执行下一条命令
    C-c C-o 删除最后一条命令产生的输出
    C-c C-r 屏幕滚动到最后一条命令输出的开头
    C-c C-e 屏幕滚动到最后一套命令输出的结尾
    C-c C-p 查看前一条命令的输出
    C-c C-n 查看后一条命令的输出

  • 打印资料

    M-x print-buffer 先使用pr,然后使用lpr
    M-x lpr-buffer 直接使用lpr
    M-x print-region
    M-x lpr-region

  • 收发邮件

    M-x mail 发送邮件, C-c C-s 发送,C-c C-c 发送并退出
    M-x rmail 接受邮件
    用 gnus 收发邮件,阅读新闻组
    M-x gnus 可以通过强大的 gnus 来收发邮件,阅读新闻组。或者阅读 gnus 自带的 manual 来获得详细信息。
    C-x m 撰写新邮件[2]

简单配置

  • 执行Elisp代码

    1. 在某条语句后面按C-x C-e (eval-last-sexp)可以执行那条语句
    2. M-x eval-buffer 可以执行当前buffer内的Elisp代码
    3. 选中一个region后, M-x eval-region可以执行这个region内的代码
  • 安装插件

;Emacs的插件一般都是一个以el为后缀名的文件, 把这个文件下载下来后放到一个目录, 比如~/emacs/lisps, 然后执行下面这两条语句:

(add-to-list 'load-path "~/emacs/lisps")
(require 'pluginname)
  • 快捷键定制
;全局绑定global-set-key, 绑定某个mode的快捷键用define-key. global-set-key的定义为:

(global-set-key key command)
;比如想把C-j绑定到”到达指定行上”(goto-line), 这样就可以了:

(global-set-key (kbd "C-j") 'goto-line)

;kbd是Emacs的宏, 把快捷键转换为Emacs的内部按键表示. 然后执行上面那条语句, 就会使你的配置生效. 然后你可以用C-h k检查一下你的定制是否成功了.
;如果对于比较复杂的快捷键, 比如Control x F3, 改怎么写呢? 按C-h k(describe-key), 然后再按下Control x F3, Emacs会出现一个”C-x “, 这个就是你要写到kbd宏里面的内容.
;如果你想对某个特定模式比如c++-mode进行快捷键定制, 用define-key即可, 对于上面的例子这样写:

(define-key c++-mode-map (kbd "C-j") 'goto-line)

;define-key第一个参数map一般为mode后面直接加”-map”
  • 颜色定制
(set-background-color "black") ;; 使用黑色背景
(set-foreground-color "white") ;; 使用白色前景

(set-face-foreground 'region "red")  ;; 区域前景颜色设为红色
(set-face-background 'region "blue") ;; 区域背景色设为蓝色

学会看文档

Emacs的文档非常丰富, 有Elisp自己的自文档, 还有更详细的info. Elisp中的变量, 函数都有文档. 对于大多数情况都够用了.

  • 查看变量的值和文档
    C-h v (describe-variable)

  • 查看函数的文档
    C-h f (describe-function)

  • 查看face的文档
    M-x describe-face

  • 查看某个mode的文档
    C-h m (describe-mode)
    刚开始学习某个mode的时候, 可以用C-h m看看当前buffer对应的主mode和副mode的文档, 这个文档一般都会包括mode中的命令和快捷键列表.

  • 查看某个快捷键对应的命令
    C-h k (describe-key)

  • 查看某个命令对应的快捷键
    C-h w (where-is)

  • 查看当前buffer所有的快捷键列表
    C-h b (describe-bindings)

  • 查看当前buffer中以某个快捷键序列开头的快捷键列表
    <待查看的快捷键序列> C-h,比如你想查看当前buffer中所有以C-c开头的快捷键列表,按C-c C-h就可以了。

  • 查看函数的代码
    find-function

  • 查看变量的代码
    find-variable

  • 查看face的代码
    find-face-definition

  • 查看包含某个关键词的函数,变量,face
    M-x apropos

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值