Mac上使用Emacs
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:
brew install emacs --HEAD --use-git-head --with-cocoa --with-gnutls --with-rsvg --with-imagemagick
- 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:
C-h v load-path RET
- 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文件,写入 :
(add-to-list 'load-path "~/.emacs.d/themes/")
(require 'color-theme)
- 1
- 2
然后保存,保存。
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.
- 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文件
(require 'window-numbering)
(window-numbering-mode 1)
- 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清屏
(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)))
- 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一下
此时就可以将内容拷贝到其他地方了
Mac上使用Emacs相关推荐
- emacs python plugin_Windows上配置Emacs来开发Python及用Python扩展Emacs
Windows下配置Emacs来开发Python去年在网上偶然的一个机会知道了Emacs的存在,在周围前辈们都在夸赞Sublime好用的时候,喜欢跟大众唱反调的我,突然觉得如果能用Emacs来编代码, ...
- Mac上android emulator模拟器使用(三十一)
Mac上android emulator模拟器使用 0.首先在eclipse或者android studio创建android模拟器注意:选择armv7或armv8都可以,模拟器版本建议选择比较新的1 ...
- 在Mac上设置环境变量并永久生效的方法
原由 我使用Go来开发程序,安装govendor之后发现命令行中执行govendor无效,需要将govendor所在的路径添加到PATH环境变量中.我的软件环境是iTerm2+zsh. Mac中的环境 ...
- 在Mac上控制Alt Delete-如何在Macbook上打开任务管理器
It happens to the best of us: we're working away on some important project, and our trusty computer ...
- 适用于Mac上的SQL Server
适用于Mac上的SQL Server? 众所周知,很多人都在电脑上安装了SQL Server软件,普通用户直接去官网下载安装即可,Mac用户则该如何在Mac电脑上安装SQL Server呢?想要一款适 ...
- mac上使用crontab周期性执行python脚本
这个月买了本书<Linux系统命令及Shell脚本实践指南>, 看到了一个周期性执行任务cron.顿时产生一个想法: mac上有这种机制么? 加上自己也在15年下半年也学了点python脚 ...
- 在Mac上使用Nginx和FastCGI部署Flask应用
最近在学习Flask,本文介绍一下如何部署Flask开发的应用,同时也学习一下Nginx的使用,这只是在Mac上的一个实验. 应用 这里使用的应用就是官方的文档中给出的Flaskr. 安装Nginx ...
- swt能单独在linux运行么,java – 在Mac上运行基于SWT的跨平台jar
我一直在开发一个基于SWT的项目,该项目旨在部署为Java Web Start,从而在多个平台上使用. 到目前为止,我已经设法解决了SWT所依赖的特定于系统的图书馆出现的出口问题(见相关的thread ...
- 推荐7款Mac上能极大提高效率的软件,建议收藏!
给大家分享7款Mac端鲜为人知但是能极大提高效率的软件,个个都非常强大,直接上干货!喜欢的话记得点赞支持哦~ 1.simplemind simplemind是一款跨平台思维导图工具,可以帮助思考.收集 ...
最新文章
- SQL存储过程解密研究
- MYSQL中TIMESTAMP类型的默认值
- Linux进程间通信分类 以及 pipe的原理实现
- 泽西岛2.9及更高版本中的声明式链接
- ftp 传输速度_ftp上传工具下载,8款优秀的ftp上传工具下载软件
- 2008Beta 版AJAX的一个奇怪的问题
- 【POJ - 1275】Cashier Employment(差分约束,建图)
- nodejs对文件进行分页
- vscode 插件导出_VScode插件推荐
- 使用计算机传真,使用计算机发送和接收传真
- ant design table样式修改合集
- ROS NOETIC 思岚激光雷达A2M8启动历程
- 电脑自动关机后文件丢失,如何恢复
- Android拍照失败以及成功后拿不到照片(照片裁剪加载失败)原因之一
- Android:高德定位及搜索周边地址
- bootrom的构成
- 《C语言程序设计(第五版)》习题答案
- 2022 大一大二基础hive考试题
- sql盲注二分法注入脚本
- Redis Geohash指令与位置服务应用