第8章 编辑

后退 

Part III. 系统设置,管理和调整

 前进


8编辑

目录

8.1. vi介绍

8.1.1. vi界面

8.1.2. 切换到编辑模式

8.1.3. 切换模式并将缓存数据保存到文件

8.1.4. 复制与粘贴

8.1.5. 浏览缓冲数据

8.1.6. 搜索一个文件,另外一种浏览的方法

8.1.7. 示例部分

8.2. 配置 vi

8.2.1. .exrc文件扩展

8.2.2. 文档

8.3. vi中使用标签(tag)

8.1. vi介绍

vi对于那些非常熟悉UNIX的朋友们来说已经是轻车熟路了。vi编辑器是由Sun Microsystems公司的Bill Joy开发的,是一个扩充性能很强,便于使用的,很灵巧的ASCII编辑器,不过对于一个新手来说或许有些困难。我们在这个部分中将介绍vi编辑器,这部分所介绍的内容对于那些很有经验的朋友们来说或许也会有所帮助。

在前半部分中,我们将介绍如何使用vi编辑器进行一般的编辑,保存,复制/粘贴和浏览一个文件等操作。在后半部分会提供一个例子一步一步地来帮助刚刚使用vi的朋友们迅速入门。

这章可以说是使用vi编辑器的一个初级的读本,并不是关于vi编辑器的完全指南。本章意在让第一次使用vi的朋友们能够迅速的上手,并且使用vi编辑器进行一些日常的操作,能够拥有建立文件或者是修改文件等等技能。

8.1.1vi 界面

vi编辑器和那些其他的基于终端的软件没有什么不同,不过有一点不同,vi没有使用tab样式(你也可以称作curses)的界面,尽管有许多版本的vi使用了curses但是它们并没有提供典型的基于curses的界面的外观。vi可以在两种工作方式进行选择,命令行模式和编辑模式。这看起来似乎有些奇怪,不过你仔细考虑一下,它和基于窗口界面的编辑软件没有太大的区别。举个例子来说,如果你正在使用gedit编辑,你是用鼠标选中了一些文本,并且选择了剪切和粘贴的命令,这个整个的过程你都是在使用鼠标而并没有进行编辑(即便你可以这么做)。在vi中,我们可以在命令行模式使用dd命令简单的删除一行来达到同样的目的,在删除一行之后,你可以将光标移动到你期望的位置,然后在命令行模式输入p命令。我们可以将其称为鼠标 vs.命令行模式(虽然他们并不是完全的一样,但是从设计理念上来说是一样的)。

我们可以通过下面这个命令在任何基于终端的软件中启动vi:

$ vi filename

需要注意的一点是:当一个文件正在编辑的时候,它是被载入到内存的缓冲区中。其余的文本会被根据内存的缓冲区中的数据和文件安排到一个合适的上下文中。只有当用户使用了写命令后才能够将对文件的改变保存到文件中。

8.1.2切换到编辑模式

vi编辑器支持许多选项,在这里我们只看一下默认启动的情况。编辑器的默认启动模式是在命令行模式中, 因此,你不可能打字,输入到缓冲区中。你必须切换出命令行模式才能够输入文本。下面的一些命令可以开始我们的编辑模式:

a     在当前光标后面追加文本。

A     在当前行的最后追加文本。

C     修改当前行剩余的文本。

cw    修改当前的单词。

i     在当前的光标前插入文本。

I     在第一个非空行前插入文本。

o     在当前光标下面新建一行。

O     在当前光标上面新建一行。

8.1.3切换模式并将缓存数据保存到文件中

当然了,如果你不能够从编辑模式切换回命令行模式,那么你掌握再多的命令也是没有用的,你可以通过按下ESC键来切换回命令行模式。必须使用冒号来输入一个命令。写命令(保存命令)是众多命令中的一个命令。我们可以通过输入:

输入:后,在屏幕的左下角会出现一个冒号的提示符(将来输入的命令也会在这里出现)。接下来我们来看一下保存命令:

:w    将缓冲区的数据保存到文件。

:wq   将缓冲区的数据保存到文件并且退出vi编辑器。

8.1.4复制和粘贴

一个编辑器如果不支持文本块操作,那么这个编辑器有什么好处?当然,vi是支持块操作的这个特征的,并且和其他的命令一样具有直观性。在命令行模式输入yy或者Y可以复制一行到缓冲区并且不删除这行。将光标移动到希望的那行,然后在命令行模式按下p键来执行粘贴的命令。如果想剪切某一行,那么使用dd命令可以删除这一行,再使用p命令可以粘贴这一行。

8.1.4.1. 噢,我并不想那样做!

Undo 操作非常简单,u命令可以撤销最后的一个动作,U命令可以撤销闪出最后一行或者对最后一行所作的修改。

8.1.5浏览缓冲数据

许多vi的初级教程或者指南都是从浏览操作开始的,与大多数的浏览器不同,它们需要一些功能来实现浏览的操作(因此这些列是反向操作的)。根据你对于vi的使用的习惯(甚至说它是vi而不是elvis,nvi或者vim),你可以在编辑模式和命令模式进行浏览操作。

对于一个初学者来说,我认为切换到命令行模式再进行浏览操作是比较安全的。键盘上面的方向键不被终端所识别,取而代之的是下面这些键位:

k     将光标向上移动一行。

j     将光标向下移动一行。

l     将光标向右移动一个字符。

h     将光标向左翼东一个字符。

如果终端支持方向键,那么我们可以在命令行模式使用方向键来浏览缓冲区的文件。

对于上面的操作,vi还支持了一些附加的操作,vi支持跳跃到某一个指定的行的操作,通过在命令行中的冒号后面输入数字来制定期望跳跃到的目标的行号。例如,如果你希望跳到223行,那么在编辑模式中,我们需要向下面这样做:

ESC

:223

8.1.6搜索一个文件,用另外一种方法浏览

vi编辑器支持使用正则表达式语法来进行检索,即便如此,在命令行模式中使用起来还是有些许的不同。我们可以在命令行模式中输入/,然后输入想要查找的关键字就可以了,举个例子来说,假如我正在搜索foo这个单词:

/foo

这样就可以实现我的目的,再举另外的一个例子,如果我要搜索foo bar这个词组:

/foo bar

8.1.6.1. 另外的一些浏览命令

搜索和卷动并不是浏览vi缓冲数据的唯一途径。下面列出的一些命令是一些简洁的vi浏览命令:

0     移动到一行的开始。

$     移动到一行的结尾。

b     移动光标所在位置到上个单词的第一个字母。

w     移动光标所在位置到下个单词的第一个字母。

G     移动光标到缓冲区的最后。

H     移动光标到屏幕的第一行。

L     移动光标到屏幕的最后一行。

M     移动光标到屏幕的中间一行。

N     再次搜索,反向搜索/后面指定的关键字。

n     再次搜索,搜索/后面指定的关键字。

8.1.7示例部分

既然我们掌握了一些基本的技能,那么我们来运行一个具体的示例,来演示我们曾经介绍过的操作。首先,我们打开一个空文件,在命令行模式中输入:

# vi foo.txt

接下来,我们切换到编辑模式,然后输入两行并且在中间空一行,要记住,我们的缓冲区是空的,所以我们需要按下i键来在光标前插入文本:

This is some text

there we skipped a line

~

~

~

~

现在按下ESC键切换到命令行模式。

现在我们已经进入命令行模式了,接下来我们要保存文件。首先,按下:键,光标会出现在屏幕的左下角。在:提示符后面输入w并且输入回车。文件便会被保存的。在这个操作之后,会有一个消息提示,一些vi编辑器还会告诉你文件的名字,文件的行数,文件的大小等等信息。

下面浏览这个文件,光标会处在保存文件的时候光标所在的位置。 尝试使用方向键移动。如果方向键不能起作用(或者你对新的事物很好奇),那么请尝试使用hjkl键。

最后,我们再来做两件事情,首先将光标移动到第一行,然后在移动到第一个字母。在这一行中,尝试一些其他的导航命令,尝试着多次按下下面的几个键:

$

0

$

0

光标会跳到这行的行尾,再从行尾跳到行首,然后再跳到行尾。

接下来,我们使用/来搜索一个单词,输入下面的命令:

/we

光标会跳到we这个词第一次出现的位置。

现在我们来看一下如何保存文件和保存文件并且退出:

:wq

8.2. 配置vi

NetBSD下提供的标准的编辑器,不用我们说,就是vi,这个让人爱恨交加的编辑器。如果你不使用vi,那么请跳过这一章节的介绍,否则请你在安装其他版本的vi前阅读它。NetBSD提供的vi(nvi)是由UCBKeith Bostic开发的,这是一个免费的可以随意发布的版本,并且有很多值得学习的功能,并且这些功能都与原始的vi版本相兼容。Nvi现在已经成为了BSD下面的标准版本的vi

这些很有意思的扩充功能是:

l        扩充正则表达式(egrep 样式), 这个功能是通过extended这个选项来实现的。

l        Tag 堆栈。

l        可以无限次的undo(u键实现undo功能;按下.键可以继续undo操作)

l        增量式搜索,通过searchincr选项来打开这个功能。

l        从左到右滚动行,通过使用leftright选项打开;滚动的行数通过sidescroll选项来定义。

l        编辑历史命令, 通过cedit选项打开这个功能。

l        自动完成文件名,通过filec选项开启这个功能。

l        背景屏幕和显示。

l        分隔屏幕编辑。

8.2.1. .exrc文件的扩展

下面的一些例子是在.exrc文件中设置的一些扩展选项。

set showmode ruler

set filec=^[

set cedit=^[

第一行开启了标尺模式,在状态行会显示光标的位置(行号,列号)和当前的模式(命令,插入,追加)。第二行(^[指的是ESC)开启了使用ESC键来补全文件名的功能。第三行开启了编辑命令历史(依然是使用ESC键)。举个例子来说,按下:键然后按下ESC键会打开一个窗口列出以前用到过的历史命令,并且可以进行编辑和执行(在相应命令上按下回车键就可以运行它)。

8.2.2文档

源码的tar包(src.tgz)包含了许多的有关于(n)viex的有用的文档,在/usr/src/usr.bin/vi/docs目录中。例如:

l        Edit: A tutorial

l        Ex Reference Manual

l        Vi man page

l        An Introduction to Display Editing with Vi by William Joy and Mark Horton

l        Ex/Vi Reference Manual by Keith Bostic

l        Vi Command & Function Reference

l        Vi tutorial (beginner and advanced)

如果你从来没有使用过vi,那么“Vi tutorial” 是一个非常好的起点。它的目的是让用户可以通过vi来阅读,然后它逐渐的为读者介绍vi的全部的命令,可以边阅读边测试。由William Joy Mark Horton 编写的An Introduction to Display Editing with Vi 也是一个非常好的起点。

如果你想更加深入地了解vinvi的一些扩展的功能,你可以阅读Keith Bostic编写的Ex/Vi Reference Manual,这里面介绍了有关编辑器的全部命令和选项。

8.3. vi中使用标签(tag)

这里所介绍的并不是直接与NetBSD相关,但是十分有用,例如,检查内核的配置。

当你在一个目录树中或者子目录中检查一套源码,你可以通过使用tag特性来简化你的操作。具体方法如下:

使用cd 进入源码的主目录。

$ cd /path

输入下面的命令:

$ find . -name "*.[ch]" > filelist

$ cat filelist | xargs ctags

.exrc文件中加入下面这行:

set tags=/path/tags

(path替换成正确的目录。)


后退 

向上

 前进

III部分系统设置,管理与调整

主页

 9. X