跟我学习GNU Emacs - 10

来源:互联网 发布:时代软件 编辑:程序博客网 时间:2024/05/22 01:42

 

3.2.4 只读编辑缓冲区

在工作中,可能需要查阅一些并不想对其进行修改的文件---只想浏览它们的内容。但因误碰键盘而造成意外修改的情况很容易发生。我们介绍过几种恢复原始文件的办法,可要是能够从根本上预防类似事故的发生岂不是更好?该怎么办呢?

可以用“C-x C-q”组合键把编辑缓冲区设置为只读属性。找个编辑缓冲区试试,状态行左边会出现两个百分号(%%),它们就位于在表示编辑缓冲区已被修改的星号(**)位置处。这两个百分号表明这个编辑缓冲区是只读的。如果试图对一个只读的编辑缓冲区进行输入,Emacs将发出蜂鸣并在辅助输入区里显示一条出错信息“Buffer isread-only”(编辑缓冲区是只读的)。如果该变主意,又想对只读编辑缓冲区进行编辑该怎么办呢?好办,再按一次“C-x C-q”组合键即可。这个命令的作用是切换编辑缓冲区的只读状态---也就是说,反复按下“C-xC-q”组合键将使编辑缓冲区交替进入只读和读写状态。

记住:切换只读状态不会改变UNIX文件的权限。如果正在编辑的编辑缓冲区里包含的是别人的文件,“C-xC-q”组合键将无法改变其只读状态。编辑别人文件的方法之一是先用write-file命令给自己复制一份它的副本,然后再对副本进行修改。如果想对属于别人的电话号码簿文档进行修改,应该先读入这个文件,然后用“C-x C-w”组合键把这个文件存盘一次,再用“C-x C-q”组合键把它从只读状态改为读写状态。以上操作不会改变原来的电话号码簿文档中的内容;但会得到一份能够随意修改的副本。如果想把某个只读文件里的一小部分内容复制到另外一个文件里,应该先标记好文本块,然后用“ESC w”组合键复制它,再移动到要插入这些文本的地方,按下“C-y”组合键粘贴它。

 

 

 

 

 

 

 

 

 

 

第四章 计算机语言的支持

许多程序员都知道,程序设计工作通常可以分解为思考-编写-调试等三个环节组成的周期性循环。如果你曾经用UNIX进行过程序设计,那么你可能已经习惯于在程序开发周期的各个阶段,使用一组彼此互不衔接的工具;比如,一个来写代码的文本编辑器、一个用来编译程序的编译器、再用操作系统本身来运行程序。如果有一种能够消除开发周期各阶段以及各阶段所用工具之间界线的开发环境,那么它无疑会提高效率。

Emacs在程序的编写、运行和调试方面为很多种编程语言提供了强有力的支持,而且它把这种支持集成在一个平滑的框架里。既然在开发程序的时候不用退出Emacs,

我们就可以把注意力集中在真正的程序设计任务(即程序开发周期的“思考”部分)上,因为我们的时间将不再会浪费在挑选各种程序开发工具方面。

如果打算用Emacs来编写代码,那么可以利用Emacs针对某种程序设计语言的编辑模式来帮助更有效率地完成任务。针对程序设计语言的编辑模式来帮助更有效地完成任务。针对程序设计语言的编辑模式能够把Emacs从根本上改造成一个“语法指导的”或“语言敏感的”(即能够识别和理解某种程序设计语言的语法的)编辑器,从而帮助用户按自己的风格写出格式整齐、方便阅读的代码。Emacs为很多种程序设计语言准备有相应的编辑模式。

Emacs集成C、C++、Java、Perl、SQL和Lisp支持。

 

 

 

 

 

 

 

 

 

 

4.1 Emacs是一个IDE

Emacs提供的一些功能吸引着开发者。例如你能快速编辑代码,比如在编写函数和变量名时,可以提供字体支持和自动完成。无论何时都能编译和调试程序,无需离开你的“编辑模式”。虽然你没有一些商业集成开发环境(IDE)中常见的图形工具,但是几乎所有这些IDE中其他功能,都可以在Emacs支持的每一种语言上工作。

当然,总会有的场合你需要查看稀奇古怪的一些语言,这个你可以切换到纯文本(M-x 文本模式)以及更差劲的基本模式(M-x 基本模式)

 

 

4.1.1 编译和调试

正如本章开头提到的,当你编写完代码,Emacs对程序员的支持并没有结束。一个典型的策略是使用Emacs工作在一个大型的编程项目时Emacs保存工程文件到所在目录并且调用它(如果是C程序员他们的Makefile文件就是myproj*.[ch])。当你在编写你的代码时,你可以使用命令编译后,你会看到,甚至不必担心保存被更改。你也可以在shell模式下进行你编译出来代码的测试。如果要离开整个会话,那么你就应该少进行上述操作。

Emacs完美支持Unix的make工具,你可以在shell模式下直接使用。快捷键为M-x回车。这个命令将激活一系列的事件;首先,他提示进入编译命令。这个默认命令是make –k, 但是,如果你定义了另外的命令,那么新命令必须在此命令之后执行。在.emacs文件中,你能改变这个默认的编译命令设置。例如,就像使用Java编译工具ant 中增加一行:

(setq ‘compile-command“ant -emacs”)

 

然后,Emacs保存所有未保存的缓冲区,因此能响应你对代码的更改。这时他建立一个新的缓冲区名字叫“*compilation*”。他运行编译命令(在shell模式下的一个子进程),输出到新建的缓冲区。编译过程中,在状态栏显示“Compiling: run”,完成时,显示“exit”.

这只是开始,如果编译返回一个错误,你能按“C-x”(next-error)。Emacs从第一个错误信息读起,显示错误的行号,并且停留在所在行。更正这个错误之后,按“C-x”停留在下一个错误上。任何时候你按“C-x”时, Emacs将自动滚动窗口把错误显示在顶部。

如果想从第一条出错信息处重新开始,就需要给“C-x”加上一个前缀(即按下“C-u C-x”),还有这样一个好处:可以在看到出错信息之后立刻按下它,用不着等到整个编译工作都结束之后再使用它。

在*compilation*缓冲支持一些有用的命令,如下表所示:

 

Table 4-1. Compilation mode commands

Keystrokes

Command name

Action

C-x `

next-error

Move to the next error message and visit the corresponding source code.

M-n

compilation-next-error

Move to the next error message.

M-p

compilation-previous-error

Move to the previous error message.

C-c C-c

compilation-goto-error

Visit the source code for the current error message.

Space

scroll-down

Scroll down one screen.

Del

scroll-up

Scroll up one screen.

 

SPACE键和DEL键是各种Emacs的“只读”模式,所使用的卷屏命令,他们用起来很方便。

 

请注意,“M-n”和“M-p”并不是用来访问对应于出错信息的源代码的:他们的操作对象是出错信息本身。如果出错信息的内容多于一行,用他们来移动会比较方便些。如果想访问对应于某条出错信息的源代码,就需要使用“C-c C-c”组合键。

 

那么,Emacs又是如何对出错信息进行分析的呢?它使用变量compilation-error-regexp-alist对出错信息进行分析;这个变量是一个由正则表达式构成的列表,他的作用是对很多种C/C++编译器以及C代码检查程序lint所给出的出错信息进行匹配。这个变量与Emacs其他语言编辑模式所对应的程序设计语言(比如Java、FORTRAN、Ada和Modula-2)的编译器也能配合工作。Emacs会用该列表里的每一条正则表达式对一条出错信息进行尝试性分析,直到他找到那条能够用来准确地提取出错误发生地点的文件名和行号的正则表达式为止。

如果Emacs的出错信息分析器不能与编译器配合使用,则可以采取下面这种方法来解决这一问题:给变量compilation-error-regexp-alist增加一条符合编译器的出错信息格式的正则表达式。

Compile程序包还包括为UNIX的grep(查找文件)命令提供的类似支持,这就使Emacs具备了在多个文件里进行查找的能力。如果输入“M-x grep”命令,Emacs就会提示输入一些准备传递给grep的参数—即一个查找模板(search pattern)和一组文件名。然后,Emacs会调用执行带“-n”选项的grep命令,这个选项的作用是告诉grep把匹配到的代码行的文件名和行号显示出来。以后的事情就和“M-x compile”命令的后续操作情况一样了;可以用按下“C-x”组合键的方法让Emacs访问grep所查找的文件里的下一个匹配行。

 

 

原创粉丝点击