Mac上的Emac版本有:
- Emacs for Mac OS X
- Emacs for Mac OS X Modified
- Emacs Mac Port
- Aquatics
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上
brew install emacs --HEAD --use-git-head --with-cocoa --with-gnutls --with-rsvg --with-imagemagick
默认安装目录为/usr/local/Cellar/emacs, 若想在Applications中启动,可以使用软连接的方式:
ln -s /usr/local/Cellar/emacs/HEAD/Emacs.app /Applications/Emacs.app
Emacs的配置文件为~/.emacs, 而~/.emacs.d/目录则存放一些资源,如颜色脚本(姑且这么叫吧)。感觉像是~/.vimrc和~/.vim的关系
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:
C-h v load-path RET
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 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的搜索路径的信息。
(add-to-list 'load-path "~/.emacs.d/themes/")
(require 'color-theme)
然后保存,保存。
3. M-x eval-buffer使配置生效后,可以执行插件提供的命令:M-x color-theme-select RET进入配色方案选择界面。选好之后,你可能希望将配色方案设成默认,还是修改配置文件。在配色方案选择界面中选择主题后按d,会出现该配置的提示信息,比如:
color-theme-classic is an interactive Lisp function in
'color-theme-library.el'.
(color-theme-classic)
Color theme by Frederic Giroud, created 2001-01-18.
AntiqueWhite on darkslategrey scheme. Based on Gnome 2, with my favorit
color foreground-color and fontlock color.
将类似(color-theme-classic)的内容添加到.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的调用。
p-previous, n-nextline, b-backword, f-forward
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. 打开更多的窗口以参考其他信息,如帮助文档等
安装window-numbering.el, 然后编辑~/.emacs文件
(require 'window-numbering)
(window-numbering-mode 1)
在编辑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 水平切分窗口
…
(defun eshell-clear-screen ()
"clear screen"
(interactive)
(let ((inhibit-read-only t))
(erase-buffer)
(eshell-send-input)))
(add-hook 'eshell-mode-hook
'(lambda ()
(local-set-key (kbd "C-l") 'eshell-clear-screen)))
在eshell下直接调用erase-buffer命令会得到read-only的提示,所以通过inhibit-read-only设置为t来更改read-only的属性
1.首先是标记要拷贝的区域(region)
1. C-x h全选,即mark-whole-buffer
2. 标记指定区域,这个涉及的内容还挺多的
- 任意区域标记:C-@设置标记的开始,然后光标所走过的区域都将被标记
- 快速标记:
- C-x h标记全部,相当于Ctrl-a
- M-@选择一个单词
- 按住shift之后,C-n和C-p标记整行