
我搜索了半天,死活找不到一个可以下载的链接
还有就是Emacs里,如果使用空格作为缩进,像这样:按一下Tab,插入4个空格。最好不要扩展的,系统应该有自带
代码: 全选
| asfsdafsadf
asdfsdfasdfsdfasd
| | | asdfsadf
| | asdfsdfsdfsadf
| | asdfsdafsdafsdaf
上面的是Tab字符的显示,似乎可以设定格式,我看到的好像是用淡红色的虚线显示的。。。
asdfsadf
asdfsdfsdfsadf
asdfsdafsdafsdaf
这样的前面就不是用TAB缩进的,而是用空格缩进的了
代码: 全选
* 基础知识
o 缓冲区
o 信息栏
o 按键描述
o 回显区
o 内部命令
o 命令模式
o Emacs终端
o 区域选择
o 中止执行
o 基本配置
基础知识
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 键
*
C-M-
同时按住Ctrl键和Alt键
*
s-
WIN键
*
RET
回车键
*
TAB
Tab键
*
ESC
Esc键
*
SPC
空格键
*
Backspace
退格键
*
DEL
删除键
在后面的部分中,将统一使用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太过强大,内部命令恒河沙数,根本不可能有同样数量的快捷键位来绑定它们!
对于没有绑定的命令,可以使用 命令模式 执行!
M-x (Alt+x) 开启命令模式,回显区显示为 M-x ,然后输入 newline
这个命令默认绑定在回车键,所以它和回车键的作用一样为 换行
C-h w newline 结果是: newline is on RET
Tip
命令模式中,可以使用 TAB 补全,使用 M-p 上翻, M-n 下翻
Emacs终端
使用命令 shell (M-x shell)激活Emacs终端。可以在Emacs终端中使用外部命令。
需要注意的是,Emacs终端是哑终端,一些类型的输出不能够正确显示。
在Emacs终端中使用 exit 命令退出。
M-! (Alt+Shift+1)临时执行一条外部命令,并输出在名为 *Shell Command Output* 的缓冲区中 (命令 shell-command)
C-u M-! (Ctrl+u Alt+Shift+1)临时执行一条外部命令,并输出到光标位置。
区域选择
很多时候,我们需要选中缓冲区中的某一部分内容。和大多数程序一样,您可以在被选择区域的起始点按下左键,移动鼠标,在结束点释放左键,这部分区域便被选中。
这种方式效率并不高,而且一些场合并没有鼠标支持,例如控制台或者远程登录。
事实上,Emacs进行区域选择的方法,是设置一个标记,标记到光标点之间的部分将被选中。
标记的位置为使用命令 set-mark-command 时,光标点所处的位置。
set-mark-command 命令默认绑定在 C-SPC 键上。
如果使用输入法,这个键位多半是切换输入法的快捷键。键盘指令会先被输入法拦截下来,而无法发送到Emacs。
当然也可以使用 M-@ 来设定标记。不过 M-@ 绑定的命令为 mark-word ,虽然差不太多,但有时并不好用;况且对于一个常用的命令来讲, M-@ 键位的难度太高了……
Emacs的键位中,几乎没有默认绑定在 WIN 键上的命令,不妨利用一下:)
在Emacs的用户配置文件 ~/.emacs 中添加如下内容:
;; WIN+Space 设置标记
(global-set-key (kbd "s-SPC") 'set-mark-command)
重启Emacs,或者在 ~/.emacs 文件的缓冲区中执行命令 eval-buffer (M-x eval-buffer),便可以使配置文件立即生效:)
中止执行
如果想放弃一个命令,可以使用 C-g (keyboard-quit)打断。
当然了,建议您使用快捷键 C-g ,因为这时 M-x 通常是没有效果的
基本配置
您已经知道了,Emacs的配置文件为 ~/.emacs 。配置文件中,以 ; 起始到行末的部分为注释。
让我们些简单配置一下:
;;========== 外观设置 ==========;;
;;去掉工具栏
(tool-bar-mode nil)
;;去掉菜单栏,F10 开启关闭菜单
(menu-bar-mode nil)
;;去掉滚动栏,使用鼠标滚轮代替
;;(scroll-bar-mode nil)
;;关闭启动画面
(setq inhibit-startup-message t)
;;========== 键绑定 ==========;;
;;F10显示/隐藏菜单栏 原命令 menu-bar-open
;;(global-set-key (kbd "F10") 'menu-bar-mode)
;;WIN+s进入Shell
(global-set-key (kbd "s-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)
;;语法加亮
(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)
;;========== 状态栏 ==========;;
;;显示时间
(display-time)
;;显示列号
(setq column-number-mode t)
;;标题栏显示 %f 缓冲区完整路径 %p 页面百分数 %l 行号
(setq frame-title-format "%f")
;;========== 编辑器设定 ==========;;
;;不生成临时文件
;;(setq-default make-backup-files nil)
;;设定剪贴板内容格式 适应Firefox等程序
(set-clipboard-coding-system 'ctext)
;;加快语法高亮显示速度
(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))))