红联Linux门户
Linux帮助

Linux下Erlang+Emacs环境的搭建

发布时间:2015-04-11 16:01:18来源:linux网站作者:linux人

环境:CentOS 5.3 32位
安装包: otp_src_R14A.tar.gz , otp_doc_man_R14A.tar.gz 下载地址( http://www.erlang.org/download.html)
emacs-common-21.4-20.el5
emacs-nox-21.4-20.el5


一:包的安装
直接用yum 安装emacs
# yum install emacs-nox  //这样会将相关联的emacs-coomon包也安装上

# mkdir /usr/src/download
# cd /usr/src/download
将 otp_src_R14A.tar.gz , otp_doc_man_R14A.tar.gz 这二个包放在此目录
# gunzip -c otp_src_R14A.tar.gz | tar xfp -  解压目录
# cd otp_src_R14A
# ./configure --prefix=/usr/local/erlang
# make && make install

// 在configure的过程中可能会提示缺少包 curses 解决方法是安装 ncurses-devel
yum install ncurses-deve
// 安装好测试
# ln -s /usr/local/erlang/bin/erl /usr/local/bin/erl
# erl
Erlang R14A (erts-5.8) [source] [rq:1] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.8  (abort with ^G)
1> io:format("Hello World!\n").
Hello World!
ok
2>


二 配置Emacs与erlang结合
find / -name '.emacs'
// 将.emacs 文件copy 到 ~/ 目录下
cp /etc/skel/.emacs ~/
// 编辑 ~/.emacs 文件
在最后添加
(add-to-list 'load-path "/usr/local/erlang/lib/erlang/lib/tools-2.6.6/emacs")
(require 'erlang-start)

(add-to-list 'auto-mode-alist '("\\.erl?$" . erlang-mode))
(add-to-list 'auto-mode-alist '("\\.hrl?$" . erlang-mode))

(setq erlang-root-dir "/usr/local/erlang")
(add-to-list 'exec-path "/usr/local/erlang/bin")
(setq erlang-man-root-dir "/usr/local/erlang/man")  //解压缩文件 otp_doc_man_R14A.tar.gz 将释放出 的man 文件 对应放到这个目录下
保存
这样emacs 已经支持erlang mode了


三:进入erlang工作环境
// 启动 emacs
# emacs
输入 M-x erlang-mode 切换到erlang模式


四: Emacs 常用命令  ( 原文地址:http://publishblog.blogchina.com/blog/tb.b?diaryID=1960863)

常用的命令如下(注意emacs的习惯,C-x 表示同时按住Ctrl和x,M-x表示先按Esc再按x,C-x v l表示同时按住Ctrl和x后,松开Ctrl再分别按v和l,C-x C-f表示按住Ctrl同是分别按x和f,命令说明是大小写敏感的):
1) Buffer相关。emacs可以同时打开多个文件,每一个文件是一个buffer。
在X下可以用C-mouse1来选择当前活动哪个buffer
C-x C-b  可以得到一个buffer列表并从中选择哪个buffer打开
C-x C-f  打开一个文件
C-x i  在打开的buffer中插入一个文件内容
C-x k  关闭当前buffer中的文件
C-x C-s  保存当前buffer
C-x C-w 另存为
C-x s  保存所有buffer
2) 屏幕分割相关,emacs可以在同一个窗口中看到多个buffer。
C-x 2  垂直分割当前子窗口
C-x 3 水平分割当前子窗口
C-x 1 当前窗口独占窗口空间
C-x o 活动子窗口切换到另外一个子窗口
3)编辑相关
插入/覆盖模式切换
M-x overwrite-mode是用来转换 insert mode 与 overwrite mode

重复操作:数值引数适用於所有 EMACS 的指令。它的用途可分成 以下数类:

对某一指令做重复执行的动作
用法:C-u n command 或 M- n command

如:C-u 4 r 在buffer中输入4个r
C-u 4 C-u 5 在buffer中输入4个5(重复输入数字要注意有两个C-u)


删除-deletion
C-d 向后删除一个字元
删除-killing(剪切)
在 EMACS 中所谓的 killing 是指将文件从目前的缓冲区移到一个称为kill-ring kill-ring为一个变数的地方去。文件在缓冲区中是消失了, 但却储存在 kill-ring ,variable这一个变数中。 EMACS 可以有许多的缓冲区,但却只有一个 kill-ring 的储存变数。 也就是说,多个缓冲区彼此共享一个 kill-ring,而且也只有一个 kill-ring。 EMACS 所设计共享的 killing-ring 的用意是让被遗弃的文件可以找回,而且各缓冲区彼此也可借由killing-ring 来建立一个互通的管道。所谓的互通就是把甲缓冲区的东西给乙,反之,也可把乙缓冲区的东西给甲。此模式在 EMACS 中就是透过 killing-ring 来完成。 因此,想从甲缓冲区中得到某些文件给乙缓冲区,只要将甲缓冲区的文件放入 kill-ring 中,乙缓冲区就可以至此共享的 kill-ring 中将文件取出。如此一来,就可以共享资了。要查看kill-ring中的内容,1. 键入 ``Ctrl-h v'' 後, echo area 处会出现:2. 在Describevariable:後输入变数的名称, EMACS 会另开一个视窗来显示此变数的值。此时所要键入的变数名为 ``kill-ring''
C-k 删除(剪切)一行
C-x C-o 删除(剪切)光标所在位置后面的空白行


拷贝与粘贴
区域标记:设定区块的步骤如下所示:
1. 设定区块的始位置,也就是所谓的标记( mark)。
2. 可使用 `` Ctrl-@'' 或 `` Ctrl-SPC''或M-x set-mark-command任一个指令来设定标记。
3. 设定区块的终结位置,也就是移动游标至区块的尾端。
在标记与 point之间的范围就是所谓的区块。
M-@  开始标记区域用于拷贝
M-w  拷贝当前mark的区域
C-w 将当前mark的区域剪切到内存
C-y  在当前位置粘贴剪贴板的内容
C-y M-y  即如果在粘贴命令后根一个M-y,则切换剪贴板的内容,可以有多个M-y
C-x u undo功能(好象没有redo)
Ctrl-x Ctrl-p(mark-page)
Ctrl-x Ctrl-l(downcase-region)使区域变成小写
Ctrl-x Ctrl-u(upcase-region)使区域变成大写
Meta-x fill-region
Meta-x print-region


替换
M-x replace-string RET 旧字串 RET 新字串 RET(不征询意见)
M-x query-string RET 旧字串 RET 新字串 RET (征询意见)
4)C-g  取消键入的指令
5)在线帮助
Ctrl-h c与 Ctrl-h k'的功能相似, 二者都是在寻求与 Hotkey有关的讯息。二者唯一的差别,就在於对指令的解释详细与否而已。
C-h a 和C-h w可让使用者键入任意的子字串,都可以找到 相对应的指令。使用  Ctrl-h a 所键入的子字串,并不限於指令的第一个字元, 而 Ctrl-h w 则必需以指令的第一个字为起始字。使用  Ctrl-h a,可给予指令中任何位置的子字串。Ctrl-h a 无法使用 completion,而 Ctrl-h w可使用 completion。
C-h i 活着M-x info查看帮助info
d  运行Ctrl-h i 指令,会先进入 info 树状结构的根部。任何情况下, 可键入 ``d'' 回到此根部
m MenuName 直接移动到指定的Menu上
n 将结点移至下一个与此结点相连的结点。
p 将结点移至上一个与此结点相连的结点。
u 将结点移至上一层的结点。


启动Emacs

安装完Emacs之后,只需在命令行键入“emacs [文件名]”(若缺省文件名,也可在emacs编辑文件后另存时指定),也可从“编程”→“emacs”打开,如3.5图中所示的就是从“编程”→“emacs”打开的Emacs欢迎界面。

接着可单击任意键进入Emacs的工作窗口

Emacs的工作窗口分为上下两个部分,上部为编辑窗口,底部为命令显示窗口,用户执行功能键的功能都会在底部有相应的显示,有时也需要用户在底部窗口输入相应的命令,如查找字符串等。


3.进入Emacs

在进入Emacs后,即可进行文件的编辑。由于Emacs只有一种编辑模式,因此用户无需进行模式间的切换。下面介绍Emacs中基本编辑功能键。

(1)移动光标

虽然在Emacs中可以使用“上”、“下”、“左”、“右”方向键来移动单个字符,但笔者还是建议读者学习其对应功能键,因为它们不仅能在所有类型的终端上工作,而且读者将会发现在熟练使用之后,输入这些Ctrl加字符会比按方向键快很多。下表3.3列举了Emacs中光标移动的常见功能键。

表3.3.Emacs光标移动功能键
 

   

   

C-f

向前移动一个字符

M-b

向后移动一个单词

C-b

向后移动一个字符

C-a

移动到行首

C-p

移动到上一行

C-e

移动到行尾

C-n

移动到下一行

M-<M
“小于号”)

移动光标到整个文本的开头

M-f

向前移动一个单词

M->M
“大于号”)

移动光标到整个文本的末尾


(2)剪切和粘贴

在Emacs中可以使用“Delete”和“BackSpace”删除光标前后的字符,这和用户之前的习惯一致,在此就不赘述。下表3.4列出了以词和行为单位的剪切和粘贴功能键:

表3.4.Emacs剪切和粘贴

 

   

   

M-Delete

剪切光标前面的单词

M-k

剪切从光标位置到句尾的内容

M-d

剪切光标前面的单词

C-y

将缓冲区中的内容粘贴到光标所在的位置

C-k

剪切从光标位置到行尾的内容

C-x u

撤销操作(先操作C-x,接着再单击u



注意

Emacs中对单个字符的操作是“删除”,而对词和句的操作是“剪切”,即保存在缓冲区中,以备后面的“粘贴”所用。

(3)复制文本

在Emacs中的复制文本包括两步:选择复制区域和粘贴文本。

选择复制区域的方法是:首先在复制起始点(A)按下“C-Spase”或“C-@(C-Shift-2)”使它成为一个表示点,再将光标移至复制结束电(B),再按下“M-w”,就可将A与B之间的文本复制到系统的缓冲区中。在使用功能键C-y将其粘贴到指定位置。

(4)查找文本

查找文本的功能键如表3.5所示:

表3.5.Emacs查找文本功能键
 

   

C-s

查找光标以后的内容,并在对话框的“I-search:”后输入查找字符串

C-r

查找光标以前的内容,并在对话框的“I-search backward:”后输入查找字符串

(5)保存文档

在Emacs中保存文档的功能键为“C-x C-s”(即先操作C-x,接着再操作C-s),这时,屏幕底下的对话框会出现如“Wrote /root/workplace/editor/why”字样,
另外,Emacs在编辑时会为每个文件提供“自动保存(auto save)”的机制,而且自动保存的文件的文件名前后都有一个“#”,例如,编辑名为“hello.c”的文件,其自动保存的文件的文件名就叫“#hello.c#”。当用户正常的保存了文件后,Emacs就会删除这个自动保存的文件。这个机制当系统发生异常时非常有用。

(6)退出文档

在Emacs中退出文档的功能键为“C-x C-c”。