免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 836 | 回复: 0
打印 上一主题 下一主题

在 Emacs 中编辑文本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-03 22:41 |只看该作者 |倒序浏览

在缓冲区中输入和更改文本,以及在文本中进行导航,是您在 Emacs 中最重要的操作,无论您是在编辑文件,创建新文件,还是仅仅想研读某个文件,都要用到它们。
               
在此部分,您将学习用来完成下述工作的基本按键序列和命令:如何在缓冲区中输入文本,如何在文本中导航,以及如何对文本进行基本的编辑,如删除字符和单词。
               
键入文本和在缓冲区中移动
               
正如您在
从头创建一个新文件
这一部分看到的,在 Emacs 缓冲区中输入文本是很容易的,您只要动手打字就行。您可以键入字母字符,将其输入某个缓冲区中。
               
Emacs 有时会被称为无模式编辑器
常被拿来与模式编辑器如 vi 等作比较。这意味着编辑器的行为以及您可以键入的键盘输入和命令在您的会话中是保持不变的,与 vi
等编辑器不同,后者的击键会根据您是在命令模式还是在输入模式而有不同的含义。Emacs
没有这类模式;不过,它确实有一种不同的模式,可以用来更改其行为或扩展其功能,这将是本系列的下一篇教程的主题。
               
在进行普通的输入时,有些事是您必须记住的。
               
在插入点插入文本
               
在 Emacs,有一个重要的概念,被称为插入点,它表示字符的插入位置。这是缓冲区中一个想像的位置,处于光标所在字符和前一个字符之间。
               
每当您在缓冲区中输入文本时,该文本都会在这个点插入。在缺省情况下,所有文本都在同一行,在这个点之后的文本会向右推移,为您插入的内容让出空间。按 Enter,移到下一行,然后再按一下 Enter,插入一个空白行。
               
请试着在 practice.b 的开始处插入一段文本。
               
  • 启动 Emacs 时打开该缓冲区:
                               
    $ emacs practice.b
                               
                            
                        
  • 在每一行的末尾按 Enter,以输入一个段落,然后在结尾再按一下 Enter,创建一个空白行。
                               
    Tyger! Tyger! burning bright
    In the forests of the night,
    What immortal hand or eye
    Could frame thy fearful symmetry?
                            
                        
                    注意:这是 The Tyger! 这首诗的第一节,作者是 William Blake。本文作者在教程中多次引用本诗的某几个小节。
    现在您的 practice.b 缓冲区应如
    图 5
    所示。
                   
                        
    图 5. 插入一个段落
                        

                   
                   
    移动插入点
                   
    您会看到,在您键入时光标会一直跟随,插入点保持不变:从您键入第一个句子开始,您键入的一切内容都被插入字母 O 之前。
                   

    移动插入点,您可以使用方向键,而且正如您预期的那样,所有其他与光标动作有关的键都可供使用,如 PgUp、PgDn、Home 和 End。但
    Emacs 自带用来移动光标的键绑定,而且因为您不必将手移到键盘的基准键之外就能使用它们,所以您在打字时会觉得它们非常有用。
                   
    正如您在
    学习如何键入 Meta 组合键
    部分中看到的,您可以使用 C-p 将光标向上移动到一行;类似地,C-n 将光标向下移动到一行。C-f 会向前移动到下一个字符,而 C-b 会向后移动到上一个字符。
                   
    如果不想用 PgDn 和 PgUp 键向上和向下移动一屏,请使用 C-v 和 M-v 这两种键盘输入,它们可起到与前两个键相同的作用。要转至当前行的开始处,请使用 C-a;使用 C-e,转到当前行的结尾
                   
    通常 Meta 键会被绑定到某个命令,这与相应的 Ctrl 键类似,对于移动命令,这条规则也同样适用。当使用 Meta 来代替 Ctrl 时,F 和 B 键可以向前和向后移动一个单词 而不是一个字符,而 A 和 E 键可以移动到当前句子的开头和结尾。(在缺省配置中,没有定义 M-n 和 M-p 键盘输入。)
                   
                        
    表 3
    列出了各种移动和导航的键,以及它们的函数名和描述。试着用它们移动到缓冲区的开头、结尾,和中间的某些位置。
                   
    表 3. 有用的 Emacs 键盘输入(用于移动和导航)
                    键盘输入函数描述
                                C-p,
                                UpArrow
                            
                                previous-line
                            将插入点向上移动到上一行。
                                C-n, DownArrow
                            
                                next-line
                            将插入点向下移动到下一行。
                                C-f, RightArrow
                            
                                forward-char
                            将插入点移动到下一个字符。
                                C-b, LeftArrow
                            
                                back-char
                            将插入点移动到上一个字符。
                                M-f
                            
                                forward-word
                            将插入点移动到下一个单词。
                                M-b
                            
                                backward-word
                            将插入点移动到上一个单词。
                                C-v, PgDn
                            
                                scroll-up
                            将文本向上滚动一屏。
                                M-v, PgUp
                            
                                scroll-down
                            将文本向下滚动一屏。
                                Home
                            
                                beginning-of-buffer
                            将插入点移到缓冲区的开始处。(在某些版本中,这个键被缺省定义为移动到当前行的开始处。)
                                End
                            
                                end-of-buffer
                            将插入点移到缓冲区的末尾。(在某些版本中,这个键被缺省定义为移动到当前行的末尾。)
                                C-a
                            
                                beginning-of-line
                            将插入点移到本行的开始处。
                                C-e
                            
                                end-of-line
                            将插入点移到本行的结尾。
                                M-a
                            
                                beginning-of-sentence
                            将插入点移到句子的开始处。
                                M-e
                            
                                end-of-sentence
                            将插入点移到句子的结尾处。
                                C-{
                            
                                beginning-of-paragraph
                            将插入点移到段落的开始处。
                                C-}
                            
                                end-of-paragraph
                            将插入点移到段落的结尾处。
                   
    使用改写模式
                   
    正如您看到的,您键入的文本被插入到插入点处。不过您也可以改写现有的文本。按一下 Ins 键;这将切换到改写模式,该模式在缺省情况下是关闭的。查看模式行,您会看到 Ovwrt,说明该模式已处于活动状态。
                   
    使用
    表 3
    中描述的移动命令,移动光标,使之处于 we 中的 w 处,然后键入一个 h 字符。
                   
    请试着转至缓冲区的顶部:键入 M-a M-a C-f,将光标移到 y,然后输入一个 i 字符。对于下一个 y,采取同样的操作,键入 M-f C-f C-f C-f i,以使缓冲区看起来如
    图 6
    所示。
                   
                        
    图 6. 改写缓冲区中的字符
                        

                   
                   
    再按一下 Ins,关闭改写模式。
                   
    引用插入
                   
    文本并不仅限于用字母键输入。您可以输入控制字符,也可以根据字符代码输入字符。为此您可以执行引用插入,该命令被绑定到 C-q;此后再按一个键(或组合键)如 Ctrl 组合键,以便在插入点输入该键。您还可以输入一个字符代码值(用八进制表示),然后再按 Enter 键。
                   
    移到缓冲区的末尾,键入 Page break here,然后按 Enter。现在键入一个分页符,即 Ctrl-l 代表的字符,在它的后面接一个转义字符,该转义字符的八进制字符值为 033: C-q C-l C-q 033 Enter.
                   
    删除,撤消和重复
                   
    现在您可以试试 Emacs 中的一些工具,这些工具用来处理现有文本以及撤消(和重复)您已经做出的操作。
                   
    删除文本
                   
    使用 Backspace 或 Del 键,删除插入点左边的字符。试着用这两个键删除您刚才输入的两个控制字符。
                   
    要删除插入点的字符,请用 C-d;类似地,M-d 会从插入点开始,删除到单词的末尾。您还可以向回删除,M-Del 和 M-Backspace 都可以从插入点一直删除到单词的开头。
                   
    试着用这些命令删除您刚刚输入的 Page break here 这个句子,然后删除这些单词所在的空行。
                   
    将光标移动到文件的最后一行(应该是“What the hand dare seize the fire?”这个句子),然后按几次 M-d,把这一行删除。
                   
    撤消和重复
                   
    啊呀,如果您并不想删除最后一句怎么办?您可以通过运行 undo 函数把它找回来。该函数被绑定到 C-_,您要键入它,请按住 Ctrl,并用 Shift 键输入下划线。请回到最后一行试试,每个单词操作一次,找回这些单词。
                   
    多操作几遍,直到 Page break here 重新显示为止。
                   
    现在您又对上次的撤消操作感到后悔了,您确实不想要 Page break here 了。您可以重复您撤消的操作,方法是键入 C-g,这将取消所有的撤消操作,然后多次键入 C-_ 使单词再次消失。
                   
    多次运行同一个命令
                   
                        C-u 是一个通用参数命令,后面接一个数字和一个命令。它将按某个次数多次运行特定的命令。
                   
    尝试以下操作:移动到第二句诗的开始处,键入 In what distant d,然后再键入 C-u 2 e,这将写入两个 e 字符。输入以下内容,完成诗句:
                    ps or skies
    Built the fire of thine eyes?
                   
    键入 C-x C-s,保存您的缓冲区,现在的显示结果如
    图 7
    所示。
                   
                        
    图 7. 使用通用参数缓冲区插入字符
                        

                   
                   
    在没有数字参数的情况下,C-u 会假定这个数字为 4。如果您将 C-u 本身作为参数,则 4 会自乘,得到 16;您可以在反复自乘任意多次之后再指定一个命令,如 C-u C-u C-u A 会在插入点处键入 64 个 A
                   
    请用一个 C-b,向回移动,您会看到光标会回到前面的一行。现在试试通用参数,键入 C-u C-b;注意光标向回移动了四个字符(而不是一个)。再试试 C-u C-u C-b,注意光标会向左移动 16 个字符。键入 C-u C-u C-u C-b,然后再指定 1000 作为参数:C-u 1000 C-b。光标会移动到缓冲区的开始处,但请注意,Emacs 会发出蜂鸣声,这表明它在完成要求的操作次数之前就已经到了缓冲区的顶部(无法再向回移动了)。
                   
    用于编辑的按键表
                   
    我们来总结一下刚才学到了什么。在您继续学习下一部分之前,请看看
    表 4
    ,它列出了重要的编辑命令和执行这些命令时用的缺省键盘输入。
                   
    表 4. 常用 Emacs 编辑命令
                    键盘输入函数描述Ins
                                overwrite-mode
                            切换改写模式(缺省为关闭)。Backspace
                                Del
                            
                                delete-backward-char
                            删除插入点前的字符。
                                C-d
                            
                                delete-char
                            删除插入点处的字符。
                                M-d
                            
                                kill-word
                            从插入点开始向前删除字符,直到单词末尾。
                                M-Backspace,
                                M-Del
                            
                                backward-kill-word
                            从插入点开始向回删除字符,直至单词的开始处。
                                C-_
                            
                                undo
                            撤消您的上一次键入或操作
                                C-q
                                字符XXX
                            
                                quoted-insert
                            在插入点插入按键本身代表的字符或由八进制数字(XXX)表示的字符。
                                C-u
                                次数
                                命令
                            
                                universal-argument
                            按总的次数(缺省为 4 次)连续执行命令
                   
                   
                   

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/63367/showart_1678412.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP