Emacs笔记
Emacs快捷键
M 表示 Alt 键
M-p 是向上翻历史命令
M-n 是向下翻历史命令
C 表示 Ctrl 键
C-a 光标移动到行首
C-e 光标移动到行尾
拷贝 Command c 键同时按下
粘贴 C-y Ctrl 键 和 y 键 同时按下
可以自己修改配置文件,或者修改 slime.el 重定义
创建文件:
C-x C-f
Emacs 屏幕底部会显示如下:
Find file: ~/
输入的文件路径和名称如下:
Find file: ~/ECode/Markdown-doc/hi.lisp
默认保存在当前用户目录下,Mac系统是 /Usrs/admin/
回车,Emacs 就会创建一个名为 hi.lisp 的 Lisp 源程序文件,放在 ~/usrs/admin/Ecode/Markdown-doc/ 目录下。
Emacs 基础操作
基本文件操作
包括打开,新建,保存,另存为以及退出等比较常用的命令
C-x C-f 打开/新建一个文件
C-x C-s 保存文件
C-x C-w 另存为文件
C-x C-v 关闭当前缓冲区文件并打开新文件
C-x i 在当前光标处插入文件
C-x b 新建/切换缓冲区
C-x C-b 显示缓冲区列表
C-x k 关闭当前缓冲区
C-x C-c 关闭emacs
2.2 光标移动
这里边最方便的就是句首句尾和行首行尾,因为我的是笔记本键盘,上下左右主 要是用方向键,如果要是标准键盘的话,最好常用绑定键。
C-f 后一个字符 C-b 前一个字符 C-p 上一行 C-n 下一行 M-f 后一个单词 M-b 前一个单词 C-a 行首 C-e 行尾 C-v 向下翻一页 M-v 向上翻一页 M-< 到文件开头 M-> 到文件末尾
2.3 文本编辑
这里面包括了复制粘贴剪切删除等常用的操作命令。注意,在这里,移除包括了 剪切和删除两个概念,要区分清楚。
M-n/C-u n 重复执行后一个命令n次
C-d 删除后一个字符
M-d 删除后一个单词
Del 删除前一个字符
M-Del 删除前一个单词
C-k 移除一行
C-@ 设定标志位(主要是为了粘贴剪切以及删除使用)
C-w 移除标记区域的内容(剪切)
M-w 复制标记区域的内容(复制)
C-y 召回(yank)复制/移除的区域/行(粘贴)
M-y 召回更早的内容 (在kill缓冲区内循环)
C-t 交换两个字符的位置
M-t 交换两个单词的位置
C-x C-t 交换两行的位置
M-u 使从光标位置到单词结尾处的字母变成大写
M-l 与M-u相反
M-c 使从光标位置开始的单词的首字母变为大写
2.4 一些重要的命令
C-g 停止当前运行/输入的命令
C-x u/C-_ 撤销前一个命令(undo)
2.5 搜索
C-s 向后搜索
C-r 向前搜索
2.6 窗口命令
窗口命令比较常用,尤其是编辑多个文件的时候,你可以打开多个窗口,可以提 高编辑效率。
C-x 2 水平分割窗格 C-x 3 垂直分割窗格 C-x o 切换至其他窗格 C-x 0 关闭窗格 C-x 1 关闭除了光标所在窗格外所有窗格
2.7 帮助
C-h m 查看当前模式
C-h c 显示快捷键绑定的命令
C-h k 显示快捷键绑定的命令和它的作用
C-h f 显示函数的功能
C-h b 显示当前缓冲区所有可用的快捷键
C-h t 打开emacs教程
打开emacs开始一个程序最基本操作:
1.打开Emacs,执行
$ emacs
2.建立一个新的程序文件. 按C-x C-f 然后在屏幕的底部出现minibuffer,光标提示你输入文件名称, 文件名称要带上后缀名,如hello.cpp。回车,然后开始编辑源代码。
3.编译代码。按Esc-x
输入:compile,出现minibuffer,提示你输入编译命令。
默认情况下,有个make -k出现在minibuffer中,删除即可
用命令g++ -o hello hello.cpp,回车后,出现一个编译结果窗口。
4.执行生成的结果文件。按Esc-x 输入:shell,回车后出现一个命令行窗口。 在其中执行命令 $ ./hello。
5.回到源码窗口。按 C-x 输入:b,出现minibuffer,提示你输入要换到哪个缓冲。 输入缓冲名称即可。若她提示的却生缓冲就是你要去的窗口,直接回车即可。
6.不想在minibuffer中输入任何东西,执行C-g,就离开了这个minibuffer。
7.杀死某个缓冲。按 C-x 输入:k,出现minibuffer,提示你输入是哪个缓冲。 输入名称,回车即可。
8.只保留当前光标所在的窗口,其他窗口关闭。按 C-x
输入1 (注意是数字1),相反,Ctrl+x 2,将打开两个窗口。
9.屏幕上出现多个窗口时,从一个窗口跳到另一个窗口,按 C-x o(字母O)。
快捷键:
emacs 的键盘命令通常包括control键(C)和shift键(M)
退出emacs :①使用组合键 C-x C-c ②使用快捷键 M-x 后 输入kill-emacs
C-g 退出一个正在运行的命令 或者 取消数字参数和值输入到一半的命令
C-z 最小化
C-v 移动到下一屏
M-v 退回至上一屏
C-l 重绘屏幕,并将光标所在行置于屏幕中央 (第二次使用该键 光标所在行移置屏幕顶端,第三次移置底端)
PS: Pageup Pagedown 也用来滚屏
C-f 向右移动一个字符
C-b 向左移动一个字符
C-n 移动到下一行
C-p 移动到上一行
M-f 一个词一个词的向前移动光标
M-b 一个词一个词的向后移动光标
C-a 将光标移至一行的首部
C-e 将光标移至一行的尾部
M-a 将光标移至一句话的首部
M-e 将光标移至一句话的尾部
M-< 将光标移至所有文字最开头
M-> 将光标移至所有文字最末尾、
C-u 先输入该快捷键再输入一个数字 再输入一个命令 执行该命令这个数字次
被禁用的命令 执行这些命令时,emacs会告诉你这个命令的功能,再询问你是否确定执行,确定按 “n”
—————————————————————————————————————————————
插入与删除
C-u 8 * 插入8个字符“*”
C-d 删除光标后的一个字符
M-backspace 删除光标前的一个词
M-d 删除光标后的一个词
C-k 移除光标到“行尾”间的字符
M-k 移除光标到“句尾”间的字符
C-y 将删除的文字重新召回(最近一次删除的文字)
M-y 找回再前一次删除的文字,再按再前
C-/ 撤销
C-x u 撤销
—————————————————————————————————————————————
文件
C-x C-f 寻找一个文件
C-x C-s 储存这个文件
缓冲区
C-x C-f 找到并打开第二个文件,但第一个文件仍然在 Emacs 中。要切回第一个文件,一种办法是再用一次 C-x C-f。这样,你就可以在 Emacs 中同时打开多个文件
C-x C-b 列出所有缓冲区
C-x s 保存多个缓冲区
—————————————————————————————————————————————
主模式
输入 M-x text-mode Text 模式
lisp 编辑程序代码模式
C-h m 可以查看当前主模式的文档
用 C-l C-l 将本行带到屏幕的最上方
M-x auto-fill-mode 启动自动折行模式,打字超界时自动换行
输入 C-x f 并传递参数 20: C-u 20 C-x f 设定行边界
M-q 自动折行
——————————————————————————————————————————————
搜索
C-s 输入字符 向前搜索
C-r 输入字符 向后搜索
——————————————————————————————————————————————
多窗格
C-x 2 将屏幕划分为两个窗格,都显示同一文档
C-M-v 滚动下方的窗格
输入 C-x o(“o”指的是“其它(other)”)将光标转移到下方的窗格
(在上方窗格里)输入 C-x 1 关掉下方窗格。
C-x 1 只保留一个窗格
C-h k C-f 新建一个窗格
用下面的方法可以在一个新开窗格里打开文件:
--输入 C-x 4 C-f,紧跟着输入一个文件名,再用 <Return> 结束
可以看到你指定的文件出现在下方的窗格中,同时光标也跳到了那里
--输入 C-x o 回到上方的窗格,然后再用 C-x 1 关掉下方窗格
窗口管理
C-x 2 split-window-vertically 水平分割
C-x 3 split-window-horizontally 竖直分割
C-x 1 delete-other-window 只保留当前窗格
C-x 0 delete-window 关闭当前窗格
C-x o other-window 切换窗格
C-M-v scroll-other-window 滚动下一个窗格
—————————————————————————————————————————————
多窗口
M-x make-frame 新建窗口
M-x delete-frame 关闭选中的窗口
—————————————————————————————————————————————
帮助
C-h c 再输入一个快捷键 就会给出这个快捷键的说明
C-h f 解释一个函数。需要输入函数名
显示行号
m-x global-linum-mode
3 Emacs 基础定制
每一次emacs启动的时候,它将加载一个名为~/.emacs的Lisp代码文件,对该文件 进行编辑是一种常用的定制emacs的方式。
下面是一个典型的Lisp语句:
(setq column-number-mode t)
(setqline-number-mode t)
它的意思是在minibuffer上栏显示行列号。其中,括号表示这是一个lisp函数调 用,圆括号内第一个符号setq为emacs配置文件中常用的的函数,它为某个全局变 量赋值。该函数第一个参数为要设置的变量名,第二个数则是该变量的值。
下面讲到的每一行代码,你都可以直接拿到~/.emacs中使用。当你想要了解某一 行代码的作用时,可以把它复制粘贴到~/.emacs中,保存然后重启emacs就可以看 到效果了。
小技巧 当你编辑~/.emacs配置文件的时候,每一次要看到效果都必须重新 启动emacs,非常麻烦。你可以用emacs打开.emacs文件并加入你想 要的lisp代码后,使用C-x C-s保存,接着在minibuffer输入:M-x eval-buffer,它会立即生效。你可以试验一下,非常方便和简单。
emacs配置文件的基础
~/.emacs
(setq transient-mark-mode t)
前面的setq,是系统的关键字,表示给后面的变量赋值。t表示true,nil表示false
变量transient-mark-mode,表示是否开启一个辅模式。这个辅模式可以高亮显示被选中的文本。
(setq load-path (cons (expand-file-name "~/.emacs.d")
load-path))
这一行,表示设置load-path。这个load-path就是emacs的自定义库的加载路径。load-path (cons (expand-file-name "~/.emacs.d") load-path)是一句lisp语言,意思就是说,在原有的load-path的前面,追加路径~/.emacs.d。以后,我们只要把要加载的库(即.el文件)放到.emacs.d目录下面,emacs就会自动加载它了。
(require 'template)
(template-initialize)
这个是加载模版的时候做的。
(require 'template)表示调用template,
(template-initialize)表示调用了一个名称为template-initialize的方法。通过这两行,emacs就能加载模版了
3 Emacs 基础定制
每一次emacs启动的时候,它将加载一个名为~/.emacs的Lisp代码文件,对该文件 进行编辑是一种常用的定制emacs的方式。
下面是一个典型的Lisp语句:
(setq column-number-mode t)
(setqline-number-mode t)
它的意思是在minibuffer上栏显示行列号。其中,括号表示这是一个lisp函数调 用,圆括号内第一个符号setq为emacs配置文件中常用的的函数,它为某个全局变 量赋值。该函数第一个参数为要设置的变量名,第二个数则是该变量的值。
下面讲到的每一行代码,你都可以直接拿到~/.emacs中使用。当你想要了解某一 行代码的作用时,可以把它复制粘贴到~/.emacs中,保存然后重启emacs就可以看 到效果了。
技巧
C-c C-f打开.emacs文件
编辑完C-x C-s保存≈
接着在minibuffer输入:M-x eval-buffer,它会立即生效。你可以试验一下,非常方便和简单。
3.1 设置启动界面
每一条上面都有注释,我就不多说了。
;; 设置标题栏,我的设置为Welcome to Emacs world!
(setq frame-title-format "Welcome to Emacs world! ")
;; 禁用菜单栏,F10 开启关闭菜单
(menu-bar-mode nil)
;; 取消工具栏
(tool-bar-mode nil)
;; 取消滚动栏
(set-scroll-bar-mode nil)
;; 显示行列号,它显示在minibuffer上面那个杠上
(setq column-number-mode t)
(setq line-number-mode t)
;;关闭emacs启动时的画面
(setq inhibit-startup-message t)
;;关闭gnus启动时的画面
(setq gnus-inhibit-startup-message t)
;; 设置启动时窗口的长宽,下面为80*40
(setq initial-frame-alist '((width . 80) (height . 40)))
;;关闭出错时的提示声
(setq visible-bell t)
3.2 操作习惯
;;设置打开文件的缺省路径,这里为桌面,默认的路径为“~/”
(setq default-directory "~/桌面")
;;让 Emacs 可以直接打开和显示图片。
(setq auto-image-file-mode t)
;;防止页面滚动时跳动,
;;scroll-margin 3 可以在靠近屏幕边沿3行时就开始滚动
;;scroll-step 1 设置为每次翻滚一行,可以使页面更连续
(setq scroll-step 1 scroll-margin 3 scroll-conservatively 10000)
;; 当光标在行尾上下移动的时候,始终保持在行尾。
(setq track-eol t)
3.3 时间设置
;; 启用时间显示设置,在minibuffer上面的那个杠上
(display-time-mode t)
;; 使用24小时制
(setq display-time-24hr-format t)
3.4 绑定键设置
;; 把C-j绑定到到达指定行上
(global-set-key (kbd "C-j") 'goto-line)
;; 设置C->键作为窗口之间的切换,默认的是C-x-o,比较麻烦
(global-set-key (kbd "C->") 'other-window)
;; 改变Emacs要你回答yes的行为,按y或空格键表示yes,n表示no。
(fset 'yes-or-no-p 'y-or-n-p)
;;设置C-/为undo,M-/为set-mark
(global-set-key (kbd "C-/") 'undo)
;;设置M-/作为标志位,默认C-@来setmark,C-@不太好用
;;M-/本来对应zap-to-char,这里占用了 (global-set-key (kbd "M-/") 'set-mark-command)
;; 扩大或者缩小窗口(上下),Ctrl+{}
(global-set-key (kbd "C-}") 'enlarge-window)
(global-set-key (kbd "C-{") 'shrink-window)
3.5 全屏或最大化
3.5.1 全屏设置
(global-set-key [f11] 'my-fullscreen)
(defun my-fullscreen ()
(interactive)
(x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_FULLSCREEN" 0))
)
3.5.2 最大化设置
(global-set-key [f12] 'my-maximized)
(defun my-maximized ()
(interactive)
(x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0)) (x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0))
)
4 Emacs 高级定制
这里所说的高级定制,基本上都属于比较重要的日常应用,比如说主题,w3m浏览 器,Irc,日程管理Org,版本控制Git,代码浏览Cscope。而像那些查看pdf,听 音乐以及煮咖啡的玩意,基本上是华而不实的东西,你要有兴趣,完全可以自己 去做,记住,Emacs提供无限可能。
4.1 开始前的一点说明
Emacs的插件一般都是一个以el为后缀名的文件, 把这个文件下载下来后放到一个 目录, 比如~/.emacs.d/, 然后执行下面这两条语句:
(add-to-list 'load-path "~/.emacs.d/")
(require 'pluginname)
这样该插件就安装好了。
4.2 Emacs Theme
其实主题非常重要,因为字体的颜色,背景光标等等都是你天天必须面对的,设 定一个合适的主题,就像一个舒服的狗窝,让你不愿意离开。
下面是我的Emacs主题截图:
4.2.1 下载emacs theme压缩包
4.2.2 解压
4.2.3 复制相应文件到.emacs.d/下
cp -r themes color-theme.el ~/.emacs.d/
4.2.4 在~/.emacs加上如下代码
;;将~/.emacs.d/添加到加载路径
(add-to-list 'load-path "~/.emacs.d/")
(require 'color-theme)
(color-theme-initialize)
;; 这个是你选择的主题,后面的calm forest就是它的名字,注意使用小写。
(color-theme-calm-forest)
技巧
打开Emacs后可以 M+X color-theme-select 选择你喜欢的主题,然后 将相应的名称写入.emacs中。