33、nvi与Elvis编辑器功能及使用指南

nvi与Elvis编辑器功能及使用指南

1. nvi编辑器介绍

nvi是一款简洁实用的文本编辑器,具备一些独特的功能。

1.1 增量搜索

在nvi中启用增量搜索,可使用 :set searchincr 命令。当你输入搜索内容时,光标会在文件中移动,始终停留在匹配文本的第一个字符上,方便你快速定位到所需内容。

1.2 左右滚动

若要在nvi中启用左右滚动,可使用 :set leftright 命令。 sidescroll 的值控制着nvi在左右滚动时屏幕移动的字符数。

1.3 编程辅助功能

nvi未提供特定的编程辅助工具。不过,它有一些值得关注的重要特性。

1.4 有趣的特性
  • 国际化支持 :nvi中的大多数信息和警告消息可通过“消息目录”功能替换为其他语言的翻译。该功能的实现机制在nvi发行版的 catalog/README 文件中有详细记录。目前,nvi为荷兰语、英语、法语、德语、俄语、西班牙语和瑞典语提供了消息目录。
  • 任意缓冲区名称 :传统的vi缓冲区名称仅限于26个字母,而nvi允许使用任何字符作为缓冲区名称,提供了更大的灵活性。
  • /tmp的特殊解释 :对于任何需要文件名参数的ex命令,若使用特殊名称 /tmp ,nvi会将其替换为一个唯一的临时文件名。
1.5 来源与支持的操作系统

nvi可从 http://www.bostic.com/vi 获取。你可以在该网页下载当前版本,还能申请加入邮件列表,以获取nvi新版本和新功能的通知。nvi的源代码可自由分发,其许可条款在发行版的 LICENSE 文件中有详细说明,允许以源代码和二进制形式进行分发。

nvi可在Unix系统上编译和运行,也能在LynxOS 2.4.0及可能的后续版本中运行。它或许还能在其他符合POSIX标准的系统上运行,但文档中未列出已知的操作系统列表。

编译nvi的过程很简单,按以下步骤操作即可:

$ gzip -d < nvi.tar.gz | tar -xvpf -
$ cd nvi-1.79; ./configure
$ make

若要安装nvi,可使用 make install 命令。若你需要报告nvi的错误或问题,可联系Keith Bostic,邮箱为 bostic@bostic.com

2. Elvis编辑器介绍

Elvis由Steve Kirkendall编写和维护,其早期版本是nvi的基础。

2.1 作者与历史

Steve Kirkendall讲述了开发Elvis的缘由。早期的一个vi克隆版本stevie崩溃,导致他丢失了几个小时的工作,且stevie将编辑缓冲区存储在RAM中,在Minix系统中不太实用。因此,他开始编写自己的克隆版本,将编辑缓冲区存储在文件中,这样即使编辑器崩溃,也能从文件中恢复编辑的文本。

Elvis 2.x与1.x几乎完全独立。开发2.x版本的原因是1.x继承了真实vi和Minix的诸多限制。最大的变化是支持多个编辑缓冲区和多个窗口,同时摆脱了行长度的限制,并提供了用HTML编写的在线帮助。

至于“Elvis”这个名字,Steve表示部分原因是想看看有多少人会询问他为何选择这个名字,而且vi克隆版本通常在名称中包含“vi”字母。

2.2 重要的命令行参数

Elvis通常不会安装为vi,但也可以这样做。若以ex模式调用,它将作为行编辑器运行,并允许使用vi模式的Q命令切换到ex模式。Elvis有许多命令行选项,以下是一些最有用的选项:
|选项|功能|
|----|----|
|-a|将命令行上指定的每个文件加载到一个单独的窗口中|
|-c command|启动时执行指定的命令,这是历史上 +command 语法的POSIX版本,旧语法也被接受|
|-f filename|使用指定的文件名作为会话文件,而不是默认名称|
|-G gui|使用指定的界面,默认是termcap界面,其他选项包括x11、windows、curses、open和quit,但并非所有界面都编译在你的Elvis版本中|
|-i|以输入模式而不是命令模式开始编辑,这对新手可能更容易|
|-o logfile|将启动消息重定向到一个文件,而不是标准输出/标准错误,这对MS Windows用户至关重要,因为Windows会丢弃写入标准输出和标准错误的内容,使用 -o filename 可将诊断信息发送到文件中,以便稍后查看|
|-r|在崩溃后执行恢复操作|
|-R|以只读模式开始编辑每个文件|
|-s|从标准输入读取ex脚本并执行(符合POSIX标准),这会绕过所有初始化脚本|
|-S|为整个会话设置 security=safer 选项,而不仅仅是执行 .exrc 文件时,这增加了一定的安全性,但不应盲目信任|
|-SS|设置 security=restricted 选项,比 security=safer 更严格|
|-t tag|从指定的标签处开始编辑|
|-V|输出更详细的状态信息,有助于诊断初始化文件的问题|
|-?|打印可能选项的摘要|

2.3 在线帮助和其他文档

Elvis的在线帮助全面且完全用HTML编写,你可以在喜欢的网页浏览器中轻松查看。同时,Elvis有HTML显示模式,方便你在编辑器内查看在线帮助。查看HTML文件时,可使用标签命令( ^] ^T )切换不同主题并返回,便于浏览帮助文件。此外,Elvis还附带Unix手册页。

2.4 初始化

Elvis旨在最终符合Common Open System Environment (COSE)标准,为此它使用会话文件来保存和恢复状态。

  • 会话文件 :Elvis在启动时创建会话文件,退出时删除。若崩溃,残留的会话文件可用于恢复编辑的文件。
  • 初始化步骤
graph TD
    A[初始化所有硬编码选项] --> B[选择一个可用的界面]
    B --> C[创建或读取会话文件]
    C --> D[初始化elvispath选项]
    D --> E[搜索并运行elvis.ini脚本]
    E --> F[加载命令文件和elvis.msg文件]
    F --> G[加载并显示第一个文件]
    G --> H{是否有-a选项}
    H -- 是 --> I[加载并显示其余文件到单独窗口]
    H -- 否 --> J[结束初始化]
    I --> J

具体步骤如下:
1. 初始化所有硬编码选项。
2. 从编译到Elvis中的界面中选择一个“最佳”且可用的界面,例如X11界面通常被认为比termcap界面更好,但如果X Window System未运行,则无法使用。所选界面可处理特定的初始化选项。
3. 若会话文件不存在则创建,否则读取它(为恢复做准备)。
4. 从 ELVISPATH 环境变量初始化 elvispath 选项,若未设置则使用默认值,如 ~/.elvislib:/usr/local/lib/elvis ,实际值取决于Elvis的配置和构建方式。
5. 在 elvispath 中搜索名为 elvis.ini 的ex脚本并运行。默认的 elvis.ini 文件会执行以下操作:
- 根据当前操作系统选择一个双字母表。
- 根据程序名称设置选项(如ex模式与vi模式)。
- 处理系统相关的调整,如为X11设置颜色和添加菜单。
- 选择一个初始化文件名,Unix系统为 .exrc ,非Unix系统为 elvis.rc ,将此文件称为f。
- 若 EXINIT 环境变量存在,则执行其值;否则,执行 :source ~/f
- 若 exrc 选项已设置,则在当前目录中安全地执行f文件。
- 对于X11,若尚未设置,则设置正常、粗体和斜体字体。
6. 若存在,加载预读、读后、预写和写后命令文件,以及 elvis.msg 文件。
7. 加载并显示命令行上指定的第一个文件。
8. 若使用了 -a 选项,则将其余文件加载到各自的窗口中显示。

nvi与Elvis编辑器功能及使用指南

2. Elvis编辑器介绍(续)
2.5 多窗口编辑

在Elvis中创建新窗口,可使用ex命令 :split 。之后,你可以使用常规的ex命令,如 :e filename :n 来编辑新文件,这是最简单的方法。你还能通过 CTRL - W CTRL - W 在不同窗口之间切换。

Elvis为每个窗口提供独立的状态行,它使用高亮的下划线而不是反显来表示状态行。ex冒号命令在每个窗口的状态行上执行。以下是一些窗口管理的ex模式命令及其功能:
| 命令 | 功能 |
| ---- | ---- |
| sp[lit] [file] | 创建一个新窗口,若提供文件则加载该文件,否则显示当前文件 |
| new | 创建一个新的空缓冲区,然后创建一个新窗口显示该缓冲区 |
| sne[w]
sn[ext] [file…] | 创建一个新窗口,显示参数列表中的下一个文件,当前文件不受影响 |
| sN[ext] | 创建一个新窗口,显示参数列表中的上一个文件,当前文件不受影响 |
| sre[wind][!] | 创建一个新窗口,显示参数列表中的第一个文件,将“当前”文件重置为相对于 :next 命令的第一个文件,当前文件不受影响 |
| sl[ast] | 创建一个新窗口,显示参数列表中的最后一个文件,当前文件不受影响 |
| sta[g][!] tag | 创建一个新窗口,显示包含指定标签的文件 |
| sa[ll] | 为参数列表中尚未有窗口的文件创建新窗口 |
| wi[ndow] [target] | 若不指定目标,列出所有窗口。目标的可能值如下表所示 |
| close | 关闭当前窗口,窗口显示的缓冲区保持不变。若缓冲区已修改,其他退出命令会阻止你退出,直到你明确保存或丢弃该缓冲区 |
| wquit | 将缓冲区写回文件并关闭窗口,无论文件是否已修改都会保存文件 |
| qall | 为每个窗口执行 :q 命令,没有窗口的缓冲区不受影响 |

窗口命令的参数及其含义如下:
| 参数 | 含义 |
| ---- | ---- |
| + | 切换到下一个窗口,类似于 ^W k |
| ++ | 切换到下一个窗口,循环切换,类似于 ^W ^W |
| - | 切换到上一个窗口,类似于 ^W j |
| – | 切换到上一个窗口,循环切换 |
| num | 切换到窗口ID为 num 的窗口 |
| buffer - name | 切换到编辑指定缓冲区的窗口 |

Elvis还提供了一些vi模式下在窗口间移动的命令,总结如下:
| 命令 | 功能 |
| ---- | ---- |
| ^W c | 隐藏缓冲区并关闭窗口,与 :close 命令相同 |
| ^W d | 在语法模式和其他显示模式(html、man、tex)之间切换显示模式(如果适用),使编辑网页更方便,这是每个窗口的选项 |
| ^W j | 向下移动到下一个窗口 |
| ^W k | 向上移动到上一个窗口 |
| ^W n | 创建一个新窗口,并创建一个新缓冲区显示在该窗口中,类似于 :snew 命令 |
| ^W q | 保存缓冲区并关闭窗口,与 ZZ 相同 |
| ^W s | 分割当前窗口,等同于 :split |
| ^W S | 切换换行选项,该选项控制长行是换行还是整个屏幕向右滚动,这是每个窗口的选项 |
| ^W ] | 创建一个新窗口,然后查找光标下的标签,类似于 :stag 命令 |
| [count] ^W ^W | 移动到下一个窗口,或移动到第 count 个窗口 |
| ^W + | 增大当前窗口的大小(仅termcap接口) |
| ^W - | 减小当前窗口的大小(仅termcap接口) |
| ^W \ | 使当前窗口尽可能大(仅termcap接口) |

2.6 GUI接口

Elvis的X11接口提供了滚动条和鼠标支持,允许你选择使用的字体。不过,在Elvis创建第一个窗口后就无法更改字体,字体必须是等宽字体,通常是Courier或其他固定宽度字体的变体。

X11接口支持多种字体和颜色,光标会闪烁并改变形状以指示编辑模式(插入或命令),还有滚动条、抗锯齿文本、可用于背景的图像文件(可选着色)、用户指定的图标图像和鼠标操作。鼠标可用于选择文本、在应用程序之间剪切和粘贴以及执行标签搜索。此外,还有可配置的工具栏、对话框窗口、状态栏和 -client 标志。

MS Windows GUI接口也支持使用背景图像文件,使用相同的命令和XPM格式文件,因此可以在两种环境中使用相同的背景图像文件。

  • 基本窗口 :Elvis的基本窗口有一个单独的文本搜索弹出对话框,其外观和感觉类似于Motif,但实际上并未使用Motif库。你可以通过命令行选项选择Elvis使用的四种不同字体:正常、斜体、粗体和“控制”(用于工具栏文本和按钮标签的字体),还可以指定前景和背景颜色、初始窗口几何形状以及Elvis是否应初始化为图标化。 -client 选项会使Elvis查找已运行的Elvis进程,并向其发送消息,请求它开始编辑命令行上指定的文件,这样可以在当前编辑的文件和新文件之间共享复制的文本和其他信息。除了工具栏,还有一个状态栏,用于显示状态消息和工具栏按钮的可用信息。
  • 鼠标行为 :Elvis的鼠标行为在xterm和编辑器的合理操作之间取得平衡,它区分点击和拖动操作。
graph LR
    A[鼠标操作] --> B{点击还是拖动}
    B -- 拖动 --> C{按下哪个按钮}
    C -- 按钮1 --> D[选择字符]
    C -- 按钮2 --> E[选择矩形区域]
    C -- 按钮3 --> F[选择整行]
    D --> G[复制到X11剪切缓冲区]
    E --> G
    F --> G
    B -- 点击 --> H{点击哪个按钮}
    H -- 按钮1 --> I[取消选择并移动光标]
    H -- 按钮2 --> J[从X11剪切缓冲区粘贴文本]
    H -- 按钮3 --> K[移动光标并扩展选择]
    I --> L
    J --> L
    K --> L

拖动鼠标总是选择文本,按下按钮1拖动选择字符,按下按钮2拖动选择矩形区域,按下按钮3拖动选择整行。拖动结束释放按钮时,所选文本会立即复制到X11剪切缓冲区,以便粘贴到其他应用程序中,同时文本仍保持选中状态,可对其应用操作命令。点击按钮1会取消任何待处理的选择并将光标移动到点击的字符处;点击按钮3会移动光标而不取消待处理的选择,用于扩展选择;点击按钮2会从X11剪切缓冲区“粘贴”文本,无论点击窗口的何处,文本都会插入到文本光标的位置。双击按钮1模拟 ^] 按键,使Elvis对点击的单词进行标签查找;若Elvis正在显示HTML文档,标签查找会跟随超文本链接,因此你可以双击任何下划线文本查看相关主题。双击按钮3模拟 ^T 按键,带你回到上一次标签查找的位置。
- 工具栏 :X11接口支持用户可配置的工具栏,默认情况下,除非你的 ~/.exrc 文件中有 set notoolbar 命令,否则工具栏会启用。默认工具栏已经定义了一些按钮,你可以使用 :gui 命令重新配置工具栏。例如:

:gui Make:make
:gui Make " Rebuild the program
:gui Quit:q
:gui Quit?!modified

这些命令添加了两个新按钮。第一行添加了一个名为 Make 的按钮,按下时将执行 :make 命令;第二行添加了 Make 按钮的描述文本,按下按钮时会在状态栏中显示。这里的 " 不是开始注释,而是 :gui 命令的一个操作符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值