Emacs的安装:
Mac上的Emac版本有:
- Emacs for Mac OS X
- Emacs for Mac OS X Modified
- Emacs Mac Port
- Aquatics
方法1:使用dmg安装
Download OS X emacs,拷贝到/Applications目录
注意在终端运行emacs时很可能会运行OS X默认安装的emacs程序,/usr/bin/emacs,在~/.bash_profile中添加
alias emacs="/Applications/Emacs.app/Contents/MacOS/Emacs"
然后 source ~/.bash_profile
来定位emacs命令到自己安装的emacs上
方法2:使用homebrew安装GNU Emacs:
- 1
默认安装目录为/usr/local/Cellar/emacs, 若想在Applications中启动,可以使用软连接的方式:
ln -s /usr/local/Cellar/emacs/HEAD/Emacs.app /Applications/Emacs.app
Emacs的配置
Emacs的配置文件为~/.emacs, 而~/.emacs.d/目录则存放一些资源,如颜色脚本(姑且这么叫吧)。感觉像是~/.vimrc和~/.vim的关系
Emacs如何加载配置文件
Emacs的核心部分是一个emacs lisp解释器,emacs lisp是lisp的一种方言版本。对emacs进行配置,其实就是lisp解释器对emacs lisp配置文件进行解释。而我们对emacs进行配置其实就是书写emacs lisp配置文件。所有的emacs配置文件都以.el为后缀(emacs lisp简写).emacs在“/home/你的用户名/”下有一个统一的配置文件.emacs,一般用于放置一些基本的配置内容和对其他配置文件的路径引用。
那么Emacs会从哪些路径加载.el配置文件呢?
默认搜索路径:~/.emacs, ~/.emacs.el, ~/.emacs.d/init.el
另一个比较重要的就是load-path
指定的搜索目录。可以通过如下两种方式查看load-path
的当前值
方式1:
- 1
C-h
是Emacs的帮助选项
方式2:
在Emacs的*scratch*缓冲区中输入(print load-path)
, 然后将光标移动到右括号处,使用快捷键C-j (M-x eval-print-last-seep)来执行这条语句。
Emacs从load-path
指定的目录加载default.el配置文件。
通过load可以从load-path
指定的目录中加载指定.el文件,例如:
(load 'auctex.el' nil t t)
注意’auctex.el’必须在load-path
所指定的目录中。
那么如何将目录添加到load-path搜索路径中呢
?
(add-to-list 'load-path "your_path")
添加搜索路径后需要包含文件才能在emacs启动时加载
例如包含xxx.el文件,可以(require 'xxx)
或者(load "xxx.el")
emacs配置文件的书写和组织
编写emacs配置文件就是编写emacs lisp文件,语法遵循lisp语法
而通常大多数配置选项为
(emacs变量 emacs样式)
如这种形式 (emacs variable emacs face)
常见的emacs variable有set-background-color,set-foreground-color,column-number-mode 等等,他们都代表特定的emacs属性样式,后面的是设定的值。例如:
s
(global-linum-mode ‘linux-mode) ;;auto show row-num
(partial-completion-mode 1) ;;use partial-completion
(icomplete-mode 1) ;;use complete-completion
(display-time-mode 1);;
其中;;为注释符号,也可以用’来注释。
所有的emacs配置文件中,只有.emacs不以.el为后缀,但它也是被以emacs lisp文件来解释的。可以把各种功能的配置写成独立的el文件,然后在其他文件中相互包含,最后在.emacs配置文件中包含这些el文件。即若在a.el中包含b.el,只需在.emacs中包含a.el即可,与c语言中include一样
按照一般的习惯,.emacs文件中一般不会放太多的设置信息,一般放一些emacs的搜索路径的信息。
Emac配色方案
- 下载color-theme.el并拷贝到~/.emacs.d/themes/目录下,如果该目录不存在手动创建。
- 打开~/.emacs文件,写入 :
- 1
- 2
然后保存,保存。
3. M-x eval-buffer使配置生效后,可以执行插件提供的命令:M-x color-theme-select RET进入配色方案选择界面。选好之后,你可能希望将配色方案设成默认,还是修改配置文件。在配色方案选择界面中选择主题后按d,会出现该配置的提示信息,比如:
- 1
- 2
- 3
- 4
- 5
- 6
将类似(color-theme-classic)的内容添加到.emacs中,就可以每次启动Emacs时自动选择配色方案了。
Emacs的使用
Emacs并没有独立的控制模式和编辑模式(vim 两个模式是独立的),通过控制键来区分控制模式和编辑模式,常见的控制键为Ctrl(C), Shift(S)和Meta(M),Meta键一般是Alt。
Emacs中的组合键其实都对应了Emacs的函数,可以通过M-x来调用函数,例如C-n就是对next-line的调用。C-x C-c就是对kill-emacs的调用。
Emac的光标移动
导航
p-previous, n-nextline, b-backword, f-forward
中级导航:
- M-f:向前移动一个单词,相当于vim中的e或者w
- M-b:向后移动一个单词,相当于vim中的b
- C-a:移到行首,相当于vim中的^
- C-e:移到行尾,相当于vim中的$
- M-<:移动到文档首,相当于vim中的gg。注意这里要按Alt+Shift+<
- M->:移动到文档尾,相当于vim中的Shift+g
高级导航
M-g M-g [n]:按两次M-g然后输入行号,相当于vim中的[n]gg。 那么如何显示全部的行号呢?M-x 然后输入linum-mode命令,相当于vim中的:set nu
总结:
按键 | 命令 | 作用 |
---|---|---|
C-f | foward-char | 向前移动一个字符 |
C-b | backward-char | 向后移动一个字符 |
C-p | previous-line | 向上移动一行 |
C-n | next-line | 向下移动一行 |
M-f | foward-word | 向前移动一个单词 |
M-b | backward-wor | 向后移动一个单词 |
C-a | beginning-of-line | 移到行首 |
C-e | end-of-line | 移到行尾 |
M-a | forward-sentence | 移到句首 |
M-e | backward-sentence | 移到句尾 |
C-v | scroll-up | 上移一屏 |
M-v | scroll-down | 下移一屏 |
M-< | beginning-of-buffer | 移到文档头 |
M-> | end-of-buffer | 移到文档尾 |
M-g g n | goto-line | 移到第几行 |
C-l | recenter | 找到光标,同时将光标置于屏中 |
文本编辑
文件操作
多窗口操作
emacs的一个强大之处体现在它的多窗口操作,多窗口有如下典型的用处:
1. 在两个子窗口中对比文件的内容
2. 对某个窗口感兴趣,最大化该窗口
3. 打开更多的窗口以参考其他信息,如帮助文档等
将子窗口按照0..9编号,然后通过M-0..9访问(常用)
安装window-numbering.el, 然后编辑~/.emacs文件
- 1
- 2
在编辑emacs配置文件时,经常很难区分变量和函数,这正是lisp code as data的体现
焦点移动到下一个窗口(常用)
M-x other-window, 快捷键为C-x o注意不要三个同时按,(按完C-x之后再按o)
水平垂直切分窗口
C-x 2/3
将当前子窗口最大化
C-x 1(也就是删除其他窗口 delete-other-windows)
上下左右切换窗口
使用C-x o切换窗口当窗口多了的时候比较麻烦,有没有想vim的C-h h/j/k/l的快捷键呢?
使用emacs预安装的windmove.el
在~/.emacs中加入
(windmove-default-keybindings)
默认绑定是S left/right/up/down(其中S是shift)
绑定快捷键
以之前多窗口配置的例子作为示例
(global-set-key (kbd "C-x 4 u") 'winner-do)
lisp中通过'
引用el中定义的函数或者变量
(kbd KEYS) convert KEYS to the internal Emacs key representation. KEYS should be a string constant in the format used for saving keyboard macros 这是C-h ? f kbd打印出的帮助信息
(global-set-key KEYS COMMAND) 设置KEYS到函数
帮助信息
授之以渔不如授之以鱼,最重要的不是记住了多少快捷键,多少函数,多少变量,重要的是如何去查看帮助。
Emacs的帮助通过C-h来调出。C-h之后会输入?选择想要查看的具体项,比如v查看variables, f查看functions, k查看快捷键等
也可以先输入某个组合键,然后输入C-h查看它的帮助信息,比如
C-x C-h可以查看所有与C-x相关的快捷键
比如C-x o切换窗口
C-x 0关闭当前窗口
C-x 1关闭其他窗口等
C-x 2 垂直切分窗口
C-x 3 水平切分窗口
…
常用emacs技巧
在eshell模式下使用C-l清屏
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
在eshell下直接调用erase-buffer命令会得到read-only的提示,所以通过inhibit-read-only设置为t来更改read-only的属性
Emacs中如何将文本拷贝到外部
1.首先是标记要拷贝的区域(region)
1. C-x h全选,即mark-whole-buffer
2. 标记指定区域,这个涉及的内容还挺多的
- 任意区域标记:C-@设置标记的开始,然后光标所走过的区域都将被标记
- 快速标记:
- C-x h标记全部,相当于Ctrl-a
- M-@选择一个单词
- 按住shift之后,C-n和C-p标记整行
- C-w, 即kill-region, kill所选中的buffer,即剪切的意思
别忘了C-y一下
此时就可以将内容拷贝到其他地方了