11 May 2016

emacs编辑器简介

emacs编辑器是由C语言和LISP语言编写的。可以使用LISP来扩展emacs,从而为emacs添加更多的命令。(补:emacs -nw:以命令行的方式来运行emacs,而不启动GUI界面)

自动保存功能

Emacs 会定期将正在编辑的文件写入一个“自动保存”文件中。自动保存文件的文件名的头尾各有一个 # 字符,比如你正在编辑的文件叫 hello.c,那么它 的自动保存文件就叫#hello.c#。这个文件会在正常存盘之后被 Emacs 删除。

所以,假如不幸真的发生了,你大可以从容地打开原来的文件(注意不是自动保存文件)然后输入 M-x recover file<Return> 来恢复你的自动保存文件。在提示确认的时候,输入 yes<Return>

其他

  1. emacs失去响应时,C-g 命令可用来结束纸条命令的执行。其功能相当于Shell中的Ctrl+C
  2. 有一些 Emacs 命令被“禁用”了,以避免初学者在不了解其确切功能的情况下误用而造成麻烦。如果你用到了一个被禁用的命令,Emacs 会显示一个提示消息,告诉你这个命令到底是干什么的,询问你是否要继续,并在得到你的肯定之后再执行这命令

emacs编辑器的界面

  1. 编辑区:
    • 用来进行文本编辑的区域。
  2. 回显区:
    • 如果 Emacs 发现你输入多字符命令的节奏很慢,它会在窗格的下方称为“回显区”的地方给你提示。回显区位于屏幕的最下面一行。
  3. 状态栏:
    • 位于回显区正上方的一行被称为“状态栏”。状态栏最开头的星号*表示你已经对文字做过改动。刚刚打开的文件肯定没有被改动过,所以状态栏上显示的不是星号而是短线 -
    • 状态栏中的小括号用来指明当前使用的编辑模式,默认是fundamental(主模式),emacs的主模式包括了文本模式以及编辑程序源码的Lisp模式等。

emacs所能提供的工作环境

  1. emacs可以执行Shell命令
  2. emacs可以作为Directory Editor(Dired)
  3. emacs可以编辑、编译以及调试程序
  4. emacs可以编辑其它主机上的文档
  5. emacs可以打印文件
  6. emacs具有年历(Calendar)以及日记功能
  7. emacs可以用来阅读man page和info文档
  8. emacs可以收发电子邮件
  9. emacs可以阅读网络上的电子布告栏(GNUS)
  10. emacs具有版本控制的功能(CVS)
  11. emacs可以提供娱乐环境(游戏功能)

emacs所提供的这些功能,都是先唤起代表此功能的模式(mode)。emacs的模式,分成主要模式(major mode)与次要模式(minor mode)。每一次只能使用一个主模式,而且主模式是必须要的。在一个主模式下,俄可以搭配一个以上的次要模式。使用次要模式相当于启用了该次要模式所对 应的插件。

emacs命令

  1. emacs 中的每一个命令都有一个命令名,命令名就是该命令所对应的LISP函数的函数名。在emacs中,我们可以为这些命令配置快捷键,从而达到快速调用命令的目的。
  2. 使用emacs来执行命令的方法有两种:
    • 使用Ctrl键
    • 使用Meta键。

    所有emacs命令都可以用Meta键表示出来,键盘上如果没有Meta键,则可以用Alt键或ESC键来代替。常用的 emacs命令通常会有一个快捷键与之相连。快捷键通常是以Ctrl来开头(C-x C-c)。如果要使用Meta键来表达与Ctrl-x Ctrl-c相同的效果,则使用M-x save-buffers-kill-emacs。使用Meta键,可以利用emacs的completion功能。使用emacs的 completion功能的方法是将部分字符串键入后,再按下TABSPACE?键即可。 - TAB键:尽可能将其的字填满。 - SPACE键:将分隔符()之前的字填满。 - ?:将所有可能的completion选择都列出来。

  3. 由于emacs中所有的命令都有一个命令名(LISP函数的函数名),因此,我们可以使用 M-x 命令名 来调用emacs中的所有的命令。

基本光标控制

  • C-v向下翻屏,与PageDown效果相同(v-> vertical
  • M-v向上翻屏,与PageUp效果相同
  • C-l重绘屏幕,并将光标所在行置于屏幕的中央
  • C-b:光标向前移动一格b->backward
  • C-f:光标向后移动一格f->forward
  • C-p:光标向前移动一行p->previous
  • C-n:光标向后移动一行n->next
  • M-b:光标向前移动一个单词
  • M-f:光标向后移动一个单词
  • C-a:光标移动到行首
  • C-e:光标移动到行尾
  • M-<:光标移动到文章开头(注意:< 的输入要shift键,实际为Alt+Shift+<
  • M->:光标移动到文章结尾
  • C-u:给命令传递参数。例如:C-u 2 C-d表示删除两个字符
  • M-x goto-line n RET:调到第n行

编辑命令


  • C-d删除光标后的一个字符 (d -> delete)
  • C-k删除到行尾的字符(k->kill)
  • C-x uUndo(想要redo,随便输入一个字符,在Undo)
  • C-SPCC-@M-x set-mark-command:设置mark
  • C-x h:将整个缓冲区设置为区域
  • C-w:将区域的文本删除,并放入yanking ring中。区域指的是从markpoint(光标所处的位置称为point)之间的文本
  • M-w复制区域yanking ring
  • C-y:将yanking ring中最后一个区域插入当前缓冲区,粘贴
  • M-j:回车并且到下一行产生适当的缩进
  • M-m:将光标移动到行首第一个非空白字符上
  • M-;:产生通用注释
  • M-x comment-region:区域注释
  • M-x kill-comment:消除注释

    其他

    复制到剪切板

    默认情况使用工具栏菜单栏进行剪切复制都会把相关内容发送到系统剪切板,在WindowsMac OS X中使用C-wM-w也会复制内容到剪切板.在Linux中想要发送到系统剪切板除了使用鼠标点工具栏还可以利用几个剪切板命令,比如clipboard-kill-region 剪切区域并发送到系统剪切板和Kill 环中,clipboard-kill-ring-save 复制区域内容到系统剪切板和Kill 环中。当然这两个命令Windows 和Mac里面也可以用。本质上这两个命令就是菜单栏中对应的剪切和复制

    从剪切板中提取

  Linux Windows Max OS X
C-y 粘贴 yes yes yes
工具栏粘贴按钮 yes yes no
菜单栏粘贴菜单项 yes yes no
鼠标中键 yes yes yes
M-x clipboard-yank yes yes yes

查找与替换


  • C-s:向后搜索,光标将停在第一个匹配的字符串处。再按一次C-s将继续搜索下一个匹配的字符串。如果要停止搜索,则使用C-g,此时 光标将会回到搜索开始的位置
  • C-r:向前搜索
  • M-x replace-string:替换

文件操作


  • C-x c-f打开文件,如果文件不存在则创建
  • C-x C-s保存文件。第一次存盘时,emacs会将文件重命名来备份。重命令的规则通常是在原文件名后加上一个 字符。如果要关闭emacs的自动备份 功能,使用 M-x customize-variable make-backup-files
  • C-x C-w:将文件另存为
  • C-x C-v:打开一个新文件,并关闭当前缓冲区
  • C-x C-r:以只读的方式打开文件
  • C-x i插入文件到光标当前位置

缓冲区

Emacs 把每个编辑中的文件都放在一个称为“缓冲区(buffer)”的地方。每打开一个文件,Emacs 就在其内部开辟一个缓冲区用来保存打开的文件的数据。ESC ESC ESC命令可以用来退出打开的小缓冲区,比如:命令提示窗格等

  • C-x C-b 列出当前所有的缓冲区(b->buffer
  • C-x b 缓冲区名:切换到指定的缓冲区(例如:C-x b M<tab>:切换到以M开头的缓冲区)
  • C-x s:保存emacs中所有的缓冲区(s->save
  • C-x right:切换到下一个缓冲区
  • C-x left:切换到前一个缓冲区
  • C-x C-c:退出emacs,并询问用户是否保存
  • C-x k:关闭缓冲区
  • C-z:将emacs挂起,然后回到Shell中,并不退出emacs。之后,我们可以使用%emacs或fg命令来回到emacs

窗口

  • C-x 0:关闭光标所在的窗口
  • C-x 1:保留光标所在的窗格,并将其扩大到整个屏幕,同时关掉所有其它的窗格
  • C-x 2:水平分割当前窗口
  • C-x 3:垂直分割当前窗口
  • C-x o:在emacs的窗格中进行切换(o->other
  • C-M-v:滚动下方的窗格。一般在我们使用下方的窗格进行参考,而又不想将光标切换到下一个窗格时使用

使用帮助

  • C-h c 快捷键:显示快捷键的简要说明
  • C-h k 快捷键:显示快捷键所对应的命令名及其详细说明
  • C-h a 关键字:显示包含有指定关键字的命令
  • C-h i:查看Info文档

在emacs中运行shell命令

  • M-! cmd RET:打开一个名为“Shell Command Output“的窗口,并把该命令的执行结果显示在其中。按下 C-x 1 组合键可以关闭这个窗口。由于Shell命令的输出是在一个编辑缓冲区里,因此我们可以对它进行编辑、保存等操作。
  • M-| cmd RET:运行Shell命令,并使用编辑窗口中选定的区域作为该Shell命令的输入,然后可以选择是否用该Shell命令的输出来替换编辑窗口中选中的 区域。
  • C-u M-! cmd RET:执行一条Shell命令,并将其输出放到编辑区中光标所在的位置处,而不将其输出到”Shell Command Output“窗口。
  • M-x shell:运行一个子Shell,该子Shell对应于emacs中的一个名为”Shell“的缓冲区,此后,我们就可以交互式的运行Shell命 令了。
  • M-x term:运行一个子Shell,该子Shell对应于emacs中的一个名为“*Terminal*”的缓冲区。使用该命令获得的子Shell是一个完 整的Shell的模拟,与我们直接在Shell中操作没有什么差别。
  • M-x eshell:运行emacs shell。该Shell为emacs自己实现的一个shell,而前面运行的shell都为系统中的shell程序(例如:/bin/csh等)。我们 可以通过设置变量shell-file-name来设置emacs所使用的默认shell

Dired功能

emacs的Dired(Directory Editor)功能使emacs缓冲区能够用来显示目录列表,并可以用来进入目录的子目录。Dired缓冲区是只读的,不能够被修改。

  • C-x d:进入Dired

emacs配置文件

emacs配置文件通常位于计算机的 $HOME 目录,如果是 MS Windows (Windows 2000, Windows XP以上),默认是 c:\Documents and Settings\username\Application Data\,这个适用于 Emacs22 以上的版本。Emacs21 默认的 $HOME 目录在 C:\ 。当然也可以通过环境变量 $HOME 重新设置,总之在比较大众化的操作系统中,你都可以通过C-x C-f ~/.emacs 来编辑您的个性化配置文件。

;;显示时间

(display-time)

;;显示行号

(column-number-mode t)

(show-paren-mode t)

;;设置TAB宽度为4

(setq default-tab-width 4)

;;以下设置缩进

(setq c-indent-level 4)

(setq c-continued-statement-offset 4)

(setq c-brace-offset -4)

(setq c-argdecl-indent 4)

(setq c-label-offset -4)

(setq c-basic-offset 4)

(global-set-key "\C-m" 'reindent-then-newline-and-indent)

(setq indent-tabs-mode nil)

(setq standard-indent 4)

;;开启语法高亮。

(global-font-lock-mode 1)

;;设置默认工作目录

(setq default-directory "/home/test/source/")

;; 去掉滚动条

(set-scroll-bar-mode nil)

;;关闭开启画面

(setq inhibit-startup-message t)

(setq indent-tabs-mode t)

;;不产生备份文件

(setq make-backup-files nil)

;;设置自定义变量

(custom-set-variables

'(column-number-mode t)

'(current-language-environment "UTF-8")

'(display-time-mode t)

'(ecb-options-version "2.32")

'(mouse-1-click-in-non-selected-windows t)

'(mouse-drag-copy-region t)

'(mouse-yank-at-point t)

'(save-place t nil (saveplace))

'(show-paren-mode t)

'(transient-mark-mode t))

(custom-set-faces

;;选择小工具栏图标

(tool-bar-mode -1)


blog comments powered by Disqus