分享
 
 
 

Emacs学习笔记(二)

王朝other·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

在这里我们将会学会如何插入和删除文本,在Emacs中进行移动,剪切和粘贴,装入和保存文件.我们还会谈到一些在我们要读入一个新文件时要用到的有用的函数功能.

插入和删除文本:

在Emacs中插入和删除文本就如我们在打印机上输入文本一样的简单,我们只是简单的输入我们要输入的文本.这样的输入方式是和我们在Vim中所见到的输入方式是不一样的,因为在Vim我们要插入模式下输入文本,而在Emacs中不是这样的.

在Emacs中我们可以有几种不同的方式来删除文本.最简单的方法就是按下Backspace键或者是Delete键.在大多数的Emacs安装中Backspace会删除前一个字符而Delete会删除后一个字符.如果这样的方法不能删除字符,我们可以使用C-d(delete-char)来删除字符.

输入时自动断行:

当我们在Emacs中输入文本直到一行的结束时,Emacs并不会为我们断开这一行,相反他会表明会在下一行继续并且在下一行中我们可以继续来输入.在这个标记继续的符号会出现在一个文本的最后一列.而我们可以通过下面的方式来使得Emacs可以自动断行.我们按下M-x然后输入aotu-fill-mode

在Emacs中进行移动:

在Emacs中我们可以有几种方式来进行移动.我们可以用小方向键来在Emacs中进行移动,我们也可以通过page-up,page-down来在页间进行跳转.

如果我们的小方键不可以进行了工作了,我们还可以用下面的方法来进行移动:

向前一个字符:C-f (forward-char)

向后一个字符:C-b (backward-char)

向上一行:C-p (previous-line)

向下一行:C-n (next-line)

向前滚动一页:C-v (scroll-up)

向后滚动一页:M-v (scroll-down)

在缓冲区的末尾新加一个空行:

当我们已经到了缓冲区的最后一行时我们希望Emacs如何来做呢?这里两个可能的方法:一是加入一个行并移动这一行;二是响铃提示这样是不可以的.我们可以根据我们的个人爱好来选择一个解决方法:

如果我们要选择加入一个新行,我们可以将下面的一行加入我们的.emacs文件中:

(setq next-line-add-newlines t)

如果我们要选择响铃,我们可以将下面的一行加入我们的配置文件中:

(seq next-line-add-newlines nil)

Emacs为我们提供了许多的方法我们可以其中进行移动.我们并不需要马上知道所有的这些方法,重要的我们要知道他们存在.当我们需要他时我们可以用到.

我们可以用C-a (beginning-of-line)移动到一行的开头,用C-e (end-of-line)来移到一行的结尾.这些并不是太容易记住,但是当我们熟练了就不会觉得难了.

我们还可以以单词为单位向前或是向后移动.这要比按字符的方式移动要快得多,我们可以很容易的记住这些按键:Ctrl+右键(forward-word)向右移动,Ctrl+左键(backward-word)向左移动.

我们还可以用下面的一些按键进行移动:

向前一句:M-e (forward-sentence)

向后一句:M-a (backward-sentence)

向前一段:M-} (forward-paragraph)

向后一段:M-{ (backward-paragraph)

向前一页:C-x ] (forward-page)

向后一页:C-x [ (backward-page)

要了解更多的这样的功能以及句,段或是页结束的描述,我们可以输入C-h f (describe-function)然后输入功能名.

我们还要两个功能可以回到匹配的括号处,这个分别叫做forward-sexp,backward-sexp.这在编程的时候显得更为有用.我们可以将他们绑定到Meta-左键和Meta-右键.为了做到这一点我们可以将下面的两句加入我们的.emacs文件中:

(global-set-key [(meta left)] 'backward-sexp)

(global-set-key [(meta right)] 'forward-sexp)

有时我们可以通过指定的数字回到指定的行.这个可以使用goto-line命令,在XEmacs中我们可以通过M-g来做到,而在Emacs中我们也想要这样的做就要将下面的一句加入到我们的.emacs文件中:

(global-set-key [(meta g)] 'goto-line)

如果我们的窗口比较的乱或者是我们要将光标入在窗口的中央,我们可以按下C-l (recenter).这样就会重绘我们的窗口并将光标放在窗口的中部而不改变他在缓冲区中的位置.

剪切,复制,粘贴:

为标记我们要剪切或是复制的区域,我们可以使用鼠标或是键盘.

通过下面的例子我们可以学会如何使用用鼠标标记区域并将这个区域复制到剪粘板(在Emacs中称为kill-ring):

1将鼠标放在我们要标记的文本的开头

2按下鼠标左键同时拉动鼠标直到我们要复制的文本的结尾

3松开鼠标

4如果我们要将这些文本复制到剪刀粘板,也就是说并不从缓冲区中删除,选择编辑菜单并选择复制.如果我们要将这些剪切到剪切板中,也就是从缓冲区中删除,可以到编辑菜单中选择剪切.

当然如果我们在Emacs中操作,Linux中的复制方式也是同样适用的.

下面的例子可以使我们学会如何标记并复制区域文本:

1 将光标放在我们要选择的文本的开头.

2 按下Ctrl+Spacebar,在缓冲下部就会显示出文本标记

3 到我们要选择的文本的结尾处.

4

如果我们要复制到剪切板,我们可以按下M-w(kill-ring-save),如果我们要剪切,我们可以按下C-w(kill-region)

而我们最经常的做法却是使用鼠标来标记文本区域然后使用键盘来来进行剪切或是复制的操作.虽然在一开始看来这些键盘绑定比较难于记忆,但是我们还要是试着来这样做,因为这样的方法会使得我们和Emacs的交互更加的方便和快速.

我们可以使用鼠标或是键盘来进行文本的粘贴.如果要使用鼠标我们只是简单的在我们要粘贴文本的地方按下鼠标中键.要使用键盘,我们要将光标放在我们要粘贴文本的地方然后按下C-y

Emacs不仅会保存最后一次的选择而且会保存以前的一些文本的选择.这就使得我们将一些旧的选择放入我们的缓冲区中.要粘贴一个旧的文本选择,我们可以按下C-y,这就会将最一次的文本选择粘贴到缓冲区中.然后我们按下M-y(yank-pop),这就会用将倒数第二次的文本选择插入我们的缓冲区中.接下来的M-y可以用更旧的文本选择来替换.

如果我们在C-y和M-y之间按下其他的键,我们就不可能得到一些更旧的文本选择了.

如果我们正在使用GNU

,位于选择和粘贴之后.然而在XEmacs中却是不可以的.

除了命令C-w(kill-region),还有其他的一些命令可以删除缓冲区中的文本并将其放在剪切板中.最常用一个命令就是C-k(kill-line),他会将从当前光标处直到本行结束的文本移除并放入剪切板中.我们可以多次按下这个键,这样就可以移除多行文本并将其加入剪切板中.这样如果我们粘贴文本,所有的行就会做为一个整体进行操作.

我们在以前还谈到C-d命令可以删除下一个字符.这样另两个比较有用的命令就是M-d(kill-word)删除后一个单词,而M-DEL可以删除前一个单词(backward-kill-word).这两个命令都可以将删除的文本放入剪切板中.

另一个比较简单的插入方法就是插入一个文件夹.我们可以通过C-x i来做到.

编辑文件:

在Emacs中编辑一个文件最简单的方法就是我们在启动Emacs时用我们要编辑的文件名作为参数.当我们的Emacs正在运行时,我们可以通过C-x C-f来装入一个文件.

Emacs会将当前缓冲区的路径作为我们的开始路径.这个原因就是在大部的时间里我们要打开的文件与我们的当前编辑的文件处在同一个文件夹中.如果我们要查找的文件位于另一个文件夹中,我们可以编辑这个给定的路径.

双斜线(//)表明Emacs会忽略到当前点的内容并将剩余行的内容理解为从文件系统的根目录开始的路径.与其相同的/~/表明会忽略到当前点的内容并将此行剩余的内容理解为我们当前主目录下的目录路径.有时我们要打开一个位于其他文件夹中的文件,这样的方式就显得更为有用了.

如果我们所指定的文件并不在我们的硬盘上,Emacs就会将其理解为我们要编辑的新文件的名字.所以新建一个文件与打开一个并不存在的文件是相同的.当我们打开了一个并不存在的文件,Emacs会通过在minibuffer显示信息来提示我们这是一个新的文件.

下面也许是我们会打开一个并不存在的文件的原因:

1 我们要编辑一个新的文件.

2 我们输入了错误的文件名,也就是我们实际要编辑的是另一个文件.

在后一种情况下,我们要通过命令C-x k(kill-buffer)来杀掉为新文件所打开的缓冲区,然后再打开我们要编辑的文件.一个更好的办法就是我们可以按下C-x C-v (find-alternate-file),这个方法会同时完成上面的两步操作.

在这里我们要注意的就是在Emacs装入或是打开一个文件被称为finding a file.这是由于历史的原因.所以装入文件的命令是find-file而不是load-file.

要保存缓冲区,我们可以简单的使用C-x C-s (save-buffer).这样Emacs就会将当前缓冲区中的内容保存到我们原始装入的文件中.如果当前的缓冲区并没有与一个装入的文件相匹配,也就是说如果我们要将我们的启动Emacs时看到的初始缓冲区的内容写入一个文件,Emacs就会询问文件名.

也许有的时候我们会需要读入一个文件而希望将其以另一个文件名进行保存,这时C-x

就不能满足我们的要求了,因为这个命令会将我们的缓冲区保存到我们读入的文件中而不会询问另一个文件名.在这样的情况下我们可以使用C-x C-w (write-file),这样Emacs就会询问一个文件名并将缓冲区中的内容存入另一个文件中.如果我们正在编辑一个我们并没有从某一个文件读入的缓冲区时,我们也可以使用这样的方法来保存我们的工作.也就是说我们的打开我们的Emacs,然后输入了一些内容,我们就可以用这样的方法来保存我们所输入的内容.当我们完成我们的编辑工作,我们可以通过C-x C-c (save-buffers-kill-emacs).如果在我们的缓冲区中存在一些我们的并没有保存的内容,Emacs就会询问我们的是否要先保存这些内容.

多种多样的文件命令:

在这一部分我们将会学习如何来编辑一个位于远程机器人上的文件和如何来编辑一个压缩文件.如果我们确实是很匆忙的,我们可以先跳过这一部分,但是我们的一定要回过头看一下这一部的内容,因为在这里有一些非常有用的信息.

Emacs允许我们编辑位于远程机器上的文件,也许我们会想到下面的两点:

1 我们要使用一些特殊的语法来告诉Emacs文件的位置.

2 当我们要装入或是保存文件时,我们要使Emacs联接到远程的主机.

要从另一个主机上装入文件,我们要完成下面的两件事:

1 文件所在的主机名.

2 我们在这个主机上的用户名.

然后Emacs就会使用FTP联接来下载我们要编辑的文件.

在这里我们要注意的是如果我们要使用这个特征我们必须允许FTP联接到远程的主机.

要使Emacs装入位于其他主机上的文件,我们可以简单的使用这些我们已经知道的在我们的本地打开文件的命令.我们已经了解了C-x C-f (find-file)和C-x C-v (find-alternate-file).作为文件名,我们要指定我们在远程主机上的用户名,我们可以用下面的语法:

/usr@host:filename

这个语句的构成为:斜线,用户名,标记@,主机名,冒号,文件名.

例如如果我们要以root的身分装入linux.homenet主机上的/etc/passwd文件我们可以输入:

/root@linux.homenet:/etc/passwd

如果我们在远程主机上的用户名与我们当前机器上的用户名相同,我们可以省略usrnme@部分.例如我们要编辑linux.homenet主机用户目录下的.tcshrc文件,我们可以这样来做:

/linux.homenet:~/.tcshrc

在这里我们要注意的就是~代表我们在远程主机上的用户主目录.

当Emacs联接到远程的主机上以后,minibuffer就会显示要我们的输入密码.

Emacs还可以编辑压缩的文件或是文档,也就说以.gz,.Z,.tar,.zip,.arc,.lzh,.zoo文件扩展名的文件.这就可以在我们的磁盘空间相对较低的情况下避免解压文件.

一个名为jka-compr的库可以在Emacs中加入编辑压缩文件的功能,这个功能可以做到透明(Transparent)的读取和写入由gzip或是compress压缩的文件.在这里透明意味着事实上我们并没有注意到这是一个压缩的文件.

Emacs可以识别的压缩文件必须是以.gz,.Z,.tgz为扩展名的文件.最后一个扩展名的文件是用tar归档,用gzip压缩的文件.

当我们装入一个压缩文件时,Emacs在向我们显示文件之前进行简单的解压.当我们保存文件时,他会在将这个文件写入硬盘时进行压缩.所以对我们来说是透明的.要加入这个特性,我们要在我们的.emacs文件中加入下面的几句:

(require 'jka-compr)

(jka-compr-install)

如果我们并没有使用XEmacs,那么我们可以不加入第二行.

当我们装入一个归档文件时,Emacs会向我们显示出这个归档文件中的文件列表.Tar归档文件是由一个叫做tar-mode的库来处理的,而Zip,Arc,Lzf,Zoo归档文件是由名为arc-mode的库来处理的.这就意味着这两个归档文件的设置接口是有一些不同的.

当光标位于某一个文件上时我们敲入回车,这个文件就会被装入缓冲区,这时我们就可以编辑这个文件.当我们进行保存时,归档文件会自动进行更新.

然而对tar归档文件来说这并不是完全正确的,要更新tar文件,我们需要保存包含有tar归档文件的缓冲区.

在菜单中有许多不同的函数功能可以处理这些归档文件:我们从这个归档文件中复制文件或是向这个归档文件中是复制文件,重命名文件或是更改文件的权限等等.

文档模板:

Emacs的一个主要的哲学就是我们应将我们的时间花在有意义地方,而不是去那些琐碎无变化的任务(One of the main philosophies of Emacs is that you should spend your time being a genius instead of doing trivial monotonous tasks!).如果我们在使用Emacs时可以记住这一点,我们就会发现我们所要做的事情Emacs可以会较少的敲击键盘或是根本不用敲击键盘就可以完成这些工作.

这其中的一个例子就是新建一个文件.当我们创建一个新文件时,大多数的情况下我们的最初的几分钟会花费在插入一些文本,而这些文本是我们在上一次创建一个类似的文件时插入过的,例如,我们上一次创建的是一个HTML文档.

对这个问题的一个解决办法就是使Emacs插入一个模板.这个模板会根据我们是否写C程序,HTML文档或是写给奶奶的信而有所不同.更进一步说,HTML文件的设置模板是与其他的文件模板不同的.我们个人主页的HTML文件也许会不同于我们为我们的公司设计的文件.或者说是一个程序的模板会不同于另一个.

当我们创建一个新文件时,Emacs会根据文件的扩展名来查找相应的模板.也就是说当我们的创建了一个名为test.html的文件,Emacs就会查找一个名为TEMPLATE.html.tpl的模板.而如果我们创建是一个名为letter.txt的文件,Emacs就会查找名为TEMPLATE.txt.tpl的模板.

当要找一个模板时,Emacs首先会在新文件所在的目录下进行查找,如果Emacs没有找到,Emacs就会在名为Templates的子目录下进行查找.如果仍然没有找到,Emacs就会在父目录和名为Templates的子目录下进行查找.Emacs以这样的方式进行查找直到我们的用户主目录的顶部.如果Emacs仍然没有找到,Emacs就会在我们有可能已经定了模板的地方进行查找.

例如,如果我们的创建了一个名为~/work/Emacs-project/note.txt的文件而我们所有的标准模板位于目录~/lib/template目录下.Emacs就会以下面的方式进行查找:

1.~/work/Emacs-project/TEMPLATE.txt.tpl

2.~/work/Emacs-project/Templates/TEMPLATE.txt.tpl

3.~/work/TEMPLATE.txt.tpl

4.~/work/Templates/TEMPLATE.txt.tpl

5.~/TEMPLATE.txt.tpl

6.~/Templates/TEMPLATE.txt.tpl

7.~/lib/templates/TEMPLATE.txt.tpl

也许我们会很奇怪这样的查找方式,然而这样的方式由于下面的原因是相当的重要的:

1.通过在当前目录和Templates子目录中进行查找,我们就有时会在一个子目录中隐藏我们的模板,因为我们不希望这些模板与其他的文件混在一起.换句说我们并不必须这样的来做.

2通过这样的路径进行查找,我们也许会在子目录或是上一级目录中找到特殊的模板.例如也许我们有一个名为Letters的目录,在这个目录中存放着我们所有的信件.在这个目录下也许我们会放一个普通的模板,这个模板会插入一些类似Dear...的话以及当前的日期.而在一个Letter的子目录中我们也许会存放一些写给我们的男朋友或是女朋友的信.这个模板会插入一些类似Yours forever的话.

3通过最后在标准的模板目录中进行查找,我们就会查找到所有的通用模板.

模板可以包含一些由标准行(stand-ins)所组成的文本.这些行可能被其他的文本替换或是当基于这个模板创建一个新文件时在缓冲区中进行标记.标准行的格式为(>>>letter<<<),例如>>>P<<<设置当我们的新建一个文档时位于缓冲区中的这一点,>>>A<<<可以插入我们的邮件地址.

下面列出一些不需用户定义的代码:

代码 例子 描述

文件和目录类:

(>>>DIR<<<) ~/Letters/ 文件名部分目录

(>>>FILE<<<) Gretchen.txt 没有目录的文件名

(>>>RILE_RAW<<<) Gretchen 没有扩展名的文件名

(>>>EILE_EXT<<<) txt 文件名的扩展名(没有逗点)

时间日期类:

(>>>DATE<<<) 07 Jan 1999

20:17:29 日期和时间

(>>>ISO_DATE<<<) 1999-01-07 ISO 8601 日期

系统信息类:

(>>>AUTHOR<<<) blackie@ifad.dk 完整Email地址

(>>>LOGIN_NAME<<<) blackie 登陆名

(>>>HOST_ADDRE<<<) ifad.dk 主机名

(>>>USER_NAMEE<<<) Jesper 用户真名

位置类:

(>>>POINT<<<) 这个设置点,当然只有这个点可以进行设置

(>>>MARKT<<<) 设置标记,只有标记可以进行设置

(>>>1<<<) (>>>9<<<)

十个可能的位置.要到达这些位置中的任何一个,我们可以按下C-x j(jump-to-register)

一个例子模板如下:

Odense (I<<<)

Dear (>P<<<)

Our record number: (>1<<<)

Cheers (>U<<<)

在我们的模板中,我们也可以插入询问问题的答案.所以在我们的前面的例子中,我们也许希望提示我们要在插在Dear后的名字.如下面的模板:

Odense (>>>I<<<)

Dear (>>>name<<<)

(>>>P<<<)

Our record number: (>>>number<<<)

Cheers (>>>U<<<)

>TEMPLATE-DEFINITION-SECTION<<

("name" "What is the name of the customer? ")

("number" "What is the record number? ")

要使Emacs询问我们问题,我们需要插入一行来表明开始了定义的部分.在这行后的文本是用来定义问题的,所以我们要小心不要插入没有语法的文本.

每一个问题都是与一个单词相联系的.这个单词是作为标准的输入文本.

这样当我们打开一个新的文件时,Emacs会向我们询问问题,而我们的答案也就会插入相应的地方.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有