如果想深入学习Emacs Lisp 可以阅读GNU提供的 An Introduction to Programming in Emacs Lisp .(也可以M-x info
然后选择Emacs Lisp Intro)
setq
设置当前缓冲区中的变量值,setq-default
设置全局变量的值。举个例子子:
;; 这个根据意思就能看出来 光标类型 设置为bar的样式
(setq-default cursor-type 'bar)
;; 创建备份文件为空,也就是不创建备份文件
(setq make-backup-files nil)
关于Emacs分屏.
C-x 1
仅保留当前窗口C-x 2
在当前窗口下边创建一个窗口C-x 3
在当前窗口右边创建一个窗口
使用下边配置可以加入最打开过的文件选项
(require 'recentf)
(recentf-mode 1)
(setq recentf-max-menu-item 10)
;; 这个快捷键绑定可以用之后的插件 counsel 代替
;; (global-set-key (kbd "C-x C-r" 'recentf-open-files)
require
的意思为从文件中加载特性.
替换选中文字
``(delete-selection-mode 1)
下面这些函数可以让你找到不同的函数,变量以及快捷键所定义文件位置。
find-function
(C-h C-f
)find-variable
(C-h C-v
)find-function-on-key
(C-h C-k
)
准备定制Emacs
配置插件源
在进行美化之前我们需要配置插件源(默认的源太少了),经常用的源是MELPA(Milkypostman’s Emacs Lisp Package Archive).这个大概有3000多个插件.M-x package-list-packages
来查看所有的MELPA插件了。I
标记安装,D
标记删除,U
更新 ,X
确认
(when (>= emacs-major-version 24)
(require 'package)
(package-initialize)
(setq package-archives '(("gnu" . "http://elpa.emacs-china.org/gnu/")
("melpa" . "http://elpa.emacs-china.org/melpa/"))))
;; 注意 elpa.emacs-china.org 是 Emacs China 中文社区在国内搭建的一个 ELPA 镜像
;; cl - Common Lisp Extension
(require 'cl)
;; Add Packages
(defvar my/packages '(
;; --- Auto-completion ---
company
;; --- Better Editor ---
hungry-delete
swiper
counsel
smartparens
;; --- Major Mode ---
js2-mode
;; --- Minor Mode ---
nodejs-repl
exec-path-from-shell
;; --- Themes ---
monokai-theme
;; solarized-theme
) "Default packages")
(setq package-selected-packages my/packages)
(defun my/packages-installed-p ()
(loop for pkg in my/packages
when (not (package-installed-p pkg)) do (return nil)
finally (return t)))
(unless (my/packages-installed-p)
(message "%s" "Refreshing package database...")
(package-refresh-contents)
(dolist (pkg my/packages)
(when (not (package-installed-p pkg))
(package-install pkg))))
;; Find Executable Path on OS X
(when (memq window-system '(mac ns))
(exec-path-from-shell-initialize))
;; 第一种
(setq package-selected-packages my/packages)
;; 第二种
(setq package-selected-packages `my/packages)
;; 第三种
(setq package-selected-packages (quote my/packages))
第一种设置是在缓冲区中设置一个名为package-selected-packages
的变量将值赋给my/packages
,第二种和第三种相同只是写法不同,将一个名为packages-selected-packages
的变量设置为my/packages
,相当于赋值和重命名的意思
默认窗口全屏,后边 maximized 最大化
(setq initial-frame-alist (quote ((fullscreen . maximized))))
;;这两个相同
(setq initial-frame-alist '((fullscreen . maximized)))
当前行高亮,更容易找到光标
(global-hl-line-mode 1)
安装主题
(add-to-list 'my/packages 'monokai-theme)
;;每次打开编辑器就加载主题
(load-theme 'monokai 1)
推荐插件
- company 自动补全
- hungry-delete 空白字符删除
- Smex(如果使用Ccounsel就不用再装Smex了)
- swiper缓冲区加强这个不错
- smartparens
JavaScript IDE Emacs 提供的默认 JavaScript Major Mode 并不是非常好用。所以我们可以将默认的模式 替换成 js2-mode 一个比默认模式好用的 Major Mode。我们可以通过 MELPA 来下载它,然 后用下面的代码将其启用。
(setq auto-mode-alist
(append
'(("\\.js\\'" . js2-mode))
auto-mode-alist))
你可以在这里(How Emacs Chooses a Major Mode)找到 Emacs 是如何选择何时该选用何 种 Major Mode 的方法。
在这里我们需要知道 auto-mode-alist 的作用,这个变量是一个 AssociationList,它 使用正则表达式(REGEXP)的规则来匹配不同类型文件应使用的 Major Mode。 下面是几个 正则表达式匹配的例子,
(("\\`/tmp/fol/" . text-mode)
("\\.texinfo\\'" . texinfo-mode)
("\\.texi\\'" . texinfo-mode)
("\\.el\\'" . emacs-lisp-mode)
("\\.c\\'" . c-mode)
("\\.h\\'" . c-mode)
…)
下面是如何添加新的模式与对应文件类型的例子(与我们配置 js2-mode 时相似的例子),
(setq auto-mode-alist
(append
;; File name (within directory) starts with a dot.
'(("/\\.[^/]*\\'" . fundamental-mode)
;; File name has no dot.
("/[^\\./]*\\'" . fundamental-mode)
;; File name ends in ‘.C’.
("\\.C\\'" . c++-mode))
auto-mode-alist))
在 js2-mode 模式中会提供
- 语法高亮
- 语法检查器(Linter)
执行缓冲区的代码可以使用 nodejs-repl 插件,它需要你的机器上已经安装了 NodeJS。 然而在 Mac OS X 上可能会出现找不到 NodeJS 可执行文件的问题,要解决这个问题你需要 安装另外一个 exec-path-from-shell 的插件并将其启用。
(when (memq window-system '(mac ns))
(exec-path-from-shell-initialize))
有了 nodejs-repl 我们就可以方便的测试和开发我们的 JavaScript 代码了(你可以在 这里找到更多关于它的使用方法)。
Org-mdoe 进阶
在 Org-mode 中你可以直接开启新的缓冲区(Buffer)直接用相应的 Major Mode 来编辑代 码块内的内容。在代码块中使用 C-c ‘ 会直接打开对应模式的缓冲区(不仅限于 Lisp)。 这样就使在 Org-mode 中编辑代码变的十分方便快捷。
使用 <s 然后 Tab 可以直接插入代码块的代码片段(Snippet),更多类似的代码片段 (Org-mode Easy Templates)可以在这里找到。
#+BEGIN_SRC emacs-lisp
;; Your code goes here
;; 你的代码写在这里
#+END_SRC
添加 Org-mode 文本内语法高亮
(require 'org)
(setq org-src-fontify-natively t)
在 Org-mode 中重置有序列表序号可以直接使用 M-<RET>
。
Agenda 的使用
;; 设置默认 Org Agenda 文件目录
(setq org-agenda-files '("~/org"))
;; 设置 org-agenda 打开快捷键
(global-set-key (kbd "C-c a") 'org-agenda)
你只需将你的 *.org 文件放入上面所指定的文件夹中就可以开始使用 Agenda 模式了。
- C-c C-s 选择想要开始的时间
- C-c C-d 选择想要结束的时间
- C-c a 可以打开 Agenda 模式菜单并选择不同的可视方式( r )