跳转到内容

Unix 指南/解释/编辑器简介

来自维基教科书,开放世界中的开放书籍

编辑器简介 简要介绍了常见的 Unix 文本编辑器,并提供了更多信息的链接。

许多读者可能熟悉带有图形用户界面的文本编辑器,例如 Windows 的 Notepad,Mac OS X 的 TextEdit(在无样式文本模式下),GNOME 的 GEdit,或者 KDE 的 KEdit 或 KWrite。其他读者只知道文字处理器,它类似于文本编辑器,但具有额外的功能,可以将样式和布局应用于文本。文本编辑器只处理文本字符序列,所有字符都使用相同的字体。

本章的方法是介绍最早的 Unix 文本编辑器,并逐步介绍 Notepad 式编辑器。早期的编辑器缺乏许多编辑器的常见功能。

文本编辑器的必要性

[编辑 | 编辑源代码]

使用命令行但不知道如何使用文本编辑器的人仍然可以使用 cat 工具和 shell 重定向功能创建文本文件(“document”的错误拼写是有意的)。

$ cat > newfile
We the people, promoting the common keyboard
and preserving a more perfect docmument for all,
do ordain and establish three lines of text.

(注意:在输入 cat > newfile 后,光标将等待用户输入文本(在本例中为:"我们人民,[...])。输入所有所需的文本后,应键入 RETURN CONTROL-D 以退出cat工具。)

假设需要更改此文件。在本例中,“docmument”拼写错误;应该是 document。其他需求可能是修改此句和添加更多句子。

可以使用以下命令将内容追加到文件cat >> newfile,但会保留前几行不变。可以使用以下命令替换它cat > newfile再次,但这需要重新键入整个文件。(使用 X11 等图形用户界面的用户有一个优势:他们可以使用鼠标在“docmument”之前复制和粘贴文本,键入更正,然后复制和粘贴文本的其余部分。)

一个有趣的选择是,如果有一种方法可以从“docmument”中删除多余的“m”,并处理更复杂的任务,如插入单词和重新排列文本。

第一个执行此操作的编辑器之一是 ed,它是“edit”的缩写。它具有 Windows Notepad 的许多功能,但也缺少许多功能。观察启动“ed”时发生的情况。在这里,“newfile”是要编辑的文本文件的名称。

$ ed newfile
139

将显示一个数字(这里是“139”)。然后程序似乎停止了,但没有出现 shell 提示符。实际上这是“ed”在等待命令。在许多计算机上,“ed”实际上没有提示符。

“139”表示“ed”已读入了 139 个字符,现在可以进行编辑。我们说文件是打开的。从 C 程序员的角度来说更准确地说,文件已打开并被复制到一个缓冲区中。缓冲区而不是文件是打开的。这意味着直到我们保存文件,磁盘或存储设备都不会受到干扰。其他文本编辑器仍然遵循这种行为,打开文件,将它们复制到缓冲区,并要求用户保存以将文件写回磁盘。

请注意,与许多编辑器不同,“ed”尚未显示文件的文本。我们键入一个命令,p来做到这一点。

$ ed newfile
139
,p
We the people, promoting the common keyboard
and preserving a more perfect docmument for all,
do ordain and establish three lines of text.

该命令大致翻译为,对于文件中的每一行(“,”),“p”rint 该行到标准输出。

现在要进行实际编辑,我们使用一个命令2s/docmument/document.

$ ed newfile
139
,p
We the people, promoting the common keyboard
and preserving a more perfect docmument for all,
do ordain and establish three lines of text.
2s/docmument/document
and preserving a more perfect document for all,

对于第“2”行,“s”ubstitute 第一个实例“docmument”为“document”。在这里,“ed”打印了缓冲区中已更改的行。

我们运行另外两个命令,“w”将缓冲区写回newfile到磁盘上,“q”退出“ed”。如果我们忘记“w”,那么我们的编辑将丢失。

$ ed newfile
139
,p
We the people, promoting the common keyboard
and preserving a more perfect docmument for all,
do ordain and establish three lines of text.
2s/docmument/document
and preserving a more perfect document for all,
w
138
q

我们只做了一个小的更改,但这已经需要四个命令。更糟糕的是,当我们误输入命令时,“ed”错误消息并不有用。许多 Unix 用户从不费心学习“ed”。对于感兴趣的读者,本书有一章 ed 和 sed(当有人写那章的时候)。

ex 是一个行编辑器,是ed 的继任者,也是vi 的祖先。

链接

在某个时候,Unix 系统引入了视频屏幕,允许 Unix 在屏幕上的任何位置绘制。有人决定创建一个“可视编辑器”会很好,它允许用户在文件中移动光标(就像使用“cat”或 ed “p”命令一样)并进行更改。该程序的名称是 vi,它是“VIsual editor”的缩写。因此,该程序的命名者希望人们称它为“vee eye”,而不是“vee”或“six”。

观察启动“vi”时发生的情况。首先键入以下命令

$ vi newfile

然后屏幕将清除并变为如下

We the people, promoting the common keyboard
and preserving a more perfect document for all,
do ordain and establish three lines of text.
~
~
~
~
newfile: unmodified: line 1

如果使用的是不同版本的“vi”,屏幕可能看起来不同。您的屏幕也可能包含八行以上。但是,所有版本的“vi”都具有以下两个功能

  • “~”表示不存在的行(尽管您可以键入一个只有“~”的行以使其混乱)
  • 底部有一个状态行,这里显示“newfile: unmodified: line 1”

在许多计算机上,您可以使用箭头键移动光标。如果不起作用,您可以使用标准的“vi”键

  • [h] 向左移动,[j] 向下移动,[k] 向上移动,[l] 向右移动

例如,您可以按下[l] 十五次将光标从“We”中的“W”移动到“promoting”中的“p”。(事实上,作为一种快捷方式,vi 允许您按下[1] [5] [l](一,五,埃尔)。这将数字“15”提供给[l] 命令,在本例中表示重复命令十五次。)因此,您可以通过文件移动光标,这在 ed 中是不可能的。

但如果我们想键入字母“l”而不是移动光标呢?按下[i],这是一个将 vi 编辑器从命令模式切换到插入模式的命令。然后键入一些内容。在这里,用户将光标放在“promoting”中的“p”上,键入了[i],然后键入了“nominally ”(包括一个空格)

We the people, nominally promoting the common keyboard
and preserving a more perfect document for all,
do ordain and establish three lines of text.
~
~
~
~

请注意,某些版本的“vi”(例如本版本)默认情况下永远不会在屏幕上显示编辑器是否处于命令模式或插入模式。

要退出插入模式,请按[ESC] 退出。要保存并退出编辑器,请键入[:] [w] [q] [RETURN],这将在冒号提示符处输入“wq”。

要详细了解 vi,请阅读维基教科书 学习 vi 编辑器

在新一代的 Linux 和 Unix 操作系统中,发布了 VI 编辑器的改进版本,称为 vim(版本 7 最新版)。VIM 几乎包含了 VI 的所有功能,还包括颜色编码屏幕、突出显示和文档中的拼写检查。

emacs 是在与 vi 同时开发的,它为文本编辑提供了一种不同的范式。它允许通过一个名为 emacs-LISP 的编辑器内编程语言进行自定义,它是一个无模式编辑器(与 vi 不同,vi 是一个模态编辑器)。

emacs 的启动方式与 vi 非常相似 -

$ emacs newfile

它将显示一个类似于以下内容的屏幕

File Edit Options Tools Buffers Help

We the people, promoting the common keyboard,
and preserving a more perfect document for all,
do ordain and establish three lines of text.


--- GNU EMACS ----------------------------------

使用箭头键在文件中移动。

只需键入即可输入文本,其他基本功能(如删除)可以使用传统的键盘键完成。

例如,要将文本 protecting 添加到 preserving 的位置,只需将光标向下移动到 preservinga 之间的空格,然后按 DELETE 键十次。然后,只需键入 protecting

要保存文件,请使用键盘快捷键 CTRL-x CTRL-s,即按住控制键并按字母 x。松开控制键。然后,按住控制键并按字母 s。(要使用新名称保存文件,请键入 CTRL-x CTRL-w,然后 emacs 将提示您输入新文件的名称。)保存文件后,请按 CTRL-x CTRL-c 关闭 emacs 并返回到 shell。

华夏公益教科书