深入探索vi编辑器:问题解决、网络资源与特色功能
1. vi使用中的常见问题及解决办法
在使用vi编辑器时,可能会遇到一些问题,下面为你介绍常见问题及解决方法。
-
大小写锁定问题
:有时可能不小心按下了大写锁定键(Caps Lock),由于vi是区分大小写的,大写命令(如I、A、J等)与小写命令(如i、a、j)不同,所有输入的命令都会被当作大写命令处理。解决办法是再次按下Caps Lock键回到小写状态,按下ESC键确保处于命令模式,然后可以输入U恢复最后一次更改的行,或者输入u撤销最后一个命令,可能还需要进行一些额外编辑来完全恢复文件中混乱的部分。
-
删除文本恢复问题
:如果误删了文本,可以采用以下几种方法恢复:
- 若刚删除就发现错误,且未执行其他命令,可直接输入u撤销最后一个命令(如dd)。
- 若想将某行恢复到未更改前的原始状态,可输入U。
- 若要恢复最近的删除内容,可使用p命令。vi会将最后9次删除操作保存在9个编号的删除缓冲区中。例如,若想恢复第3次删除的内容,可输入”3p将编号为3的缓冲区内容“放置”在光标所在行的下一行,但此方法仅适用于恢复整行删除内容。若想恢复删除的单词或行片段,且u命令无效时,可直接使用p命令,它会恢复最后一次删除的内容。
2. vi与互联网资源
vi作为自1980年以来的“标准”Unix屏幕编辑器,在Unix文化中占据着重要地位。它助力构建了Unix系统,而Unix又为当今的互联网奠定了基础,因此在互联网上有不少关于vi的资源。
-
资源查找途径
:在印刷书籍中发布万维网站点的URL可能很快就会过时,但可以参考elvis文档中的“Tips”部分,其中列出了有趣的vi相关网站,也可以在Usenet的comp.editors新闻组中查找。
-
主要vi相关网站
:
-
vi爱好者主页
:网址为http://www.thomer.com/vi/vi.html。该网站包含以下内容:
- 列出所有已知的vi克隆版本,并提供源代码或二进制发行版的链接。
- 提供其他vi相关网站的链接,包括Sven Guckes的Vi Pages。
- 提供大量不同层次的vi文档、手册、帮助和教程的链接。
- 提供用于编写HTML文档和解决汉诺塔问题的vi宏,以及其他宏集的FTP站点。
- 还有一些杂项vi链接,如诗歌、关于vi“真实历史”的故事、vi与Emacs的讨论,以及vi咖啡杯等。
-
Vi Pages
:网址为http://www.vi - editor.org(该网站在http://www.saki.com.au/mirror/vi/index.php3有镜像)。该网站包含以下内容:
- 详细比较不同vi克隆版本的选项和功能。
- 提供不同版本vi的截图。
- 列出许多vi克隆版本,并提供这些版本的联系信息(名称、地址、URL)。
- 指向多个常见问题解答(FAQ)文件。
- 有一些关于vi的有趣引用。
- 其他链接,包括vi咖啡杯的链接。
3. vi Powered标志的添加方法
vi Powered标志是一个小的GIF文件,可以添加到个人网页上,以展示使用vi创建了该网页。添加步骤如下:
1. 下载标志:在图形化网页浏览器中输入http://www.darryl.com/vipower.gif,然后将其保存到文件中,或者使用命令行网页检索工具(如wget)进行下载。
2. 在网页的适当位置添加以下代码:
html
<A HREF="http://www.darryl.com/vi.html">
<IMG SRC="vipower.gif">
</A>
此代码将标志添加到网页中,并使其成为一个超文本链接,点击后将跳转到vi Powered主页。为了方便非图形化浏览器的用户,可以在
<IMG>
标签中添加
ALT="This Web Page is vi Powered"
属性。
3. 在网页的
<HEAD>
部分添加以下代码:
html
<META name="editor" content="/usr/bin/vi">
4. 其他vi相关资源
- vi参考周边 :有带有vi命令参考的咖啡杯、T恤、运动衫和鼠标垫等周边产品,现在可以从http://www.cafepress.com/geekcheat/366808网站购买。
-
在线vi教程
:有一个来自Unix World杂志的九部分在线教程,由Walter Zintz编写,起始链接为http://www.networkcomputing.com/unixworld/tutorial/009/009.html 。该教程涵盖以下主题:
- 编辑器基础
- 行模式地址
- g(全局)命令
- 替换命令
- 编辑环境(set命令、标签、EXINIT和.exrc)
- 地址和列
- 替换命令r和R
- 自动缩进
-
宏
此外,教程还提供了一个在线测验,可用于检验对教程内容的掌握程度。
5. 不同的vi克隆版本——vigor
vigor是一个不同的vi克隆版本,其源代码可在http://vigor.sourceforge.net获取。
6. FTP存档中的vi相关信息
在ftp://ftp.uu.net/pub/text - processing/vi(原存档地址ftp://afl.uib.no/pub/vi已失效)的FTP存档中有一些vi相关信息,尽管这些文件最后一次更新是在1995年5月,但vi的基本功能未变,存档中的信息和宏仍然有用。该存档包含四个子目录:
-
docs
:包含vi的文档以及一些comp.editors新闻组的帖子。
-
macros
:包含vi宏,例如:
-
evi.tar.Z
:一个Emacs“模拟器”,通过替换EXINIT环境变量的shell脚本来将vi转变为无模式编辑器(始终处于输入模式,使用控制键执行命令)。
-
hanoi.Z
:一组用于解决汉诺塔编程问题的宏,该程序仅显示移动步骤,不实际绘制圆盘。
-
turing.tar.Z
:使用vi实现了一个实际的图灵机。
-
comp.editors
:包含发布到comp.editors的各种材料。
-
programs
:包含适用于各种平台的vi克隆版本的源代码(以及其他程序),但其中很多内容已过时,使用时需谨慎。
7. 汉诺塔问题的vi宏解决方案
以下是使用vi宏解决汉诺塔问题的代码:
" From: gregm@otc.otca.oz.au (Greg McFarlane)
" Newsgroups: comp.sources.d,alt.sources,comp.editors
" Subject: VI SOLVES HANOI
" Date: 19 Feb 91 01:32:14 GMT
"
" Submitted-by: gregm@otc.otca.oz.au
" Archive-name: hanoi.vi.macros/part01
"
" Everyone seems to be writing stupid Tower of Hanoi programs.
" Well, here is the stupidest of them all: the hanoi solving
" vi macros.
"
" Save this article, unshar it, and run uudecode on
" hanoi.vi.macros.uu. This will give you the macro file
" hanoi.vi.macros.
" Then run vi (with no file: just type "vi") and type:
" :so hanoi.vi.macros
" g
" and watch it go.
"
" The default height of the tower is 7 but can be easily changed
" by editing the macro file.
"
" The disks aren't actually shown in this version, only numbers
" representing each disk, but I believe it is possible to write
" some macros to show the disks moving about as well. Any takers?
"
" (For maze solving macros, see alt.sources or comp.editors)
"
" Greg
"
" ------------ REAL FILE STARTS HERE ---------------
set remap
set noterse
set wrapscan
" to set the height of the tower, change the digit in the following
" two lines to the height you want (select from 1 to 9)
map t 7
map! t 7
map L 1G/t^MX/^0^M$P1GJ$An$BGC0e$X0E0F$X/T^M@f^M@h^M$A1GJ@f0l$Xn$PU
map g IL
map I KMYNOQNOSkRTV
map J /^0[^t]*$^M
map X x
map P p
map U L
map A
map B "hyl
map C "fp
map e "fy2l
map E "hp
map F "hy2l
map K 1Go^[
map M dG
map N yy
map O p
map q tllD
map Y o0123456789Z^[0q
map Q 0iT^[
map R $rn
map S $r$
map T ko0^M0^M^M^[
map V Go/^[
8. vi与Emacs的比较
在Unix社区中,vi与Emacs的比较是一个长期存在的话题。以下是一些支持vi的观点:
-
广泛可用性
:vi在每个Unix系统上都可用,在安装系统或在不同系统间切换时,可能不得不使用vi。
-
键盘操作便利
:通常可以将手指保持在键盘的主键行上,这对打字员来说是一个很大的优势。
-
命令输入简单
:vi的命令通常是一个(或有时是两个)常规字符,比Emacs所需的所有控制键和元字符更容易输入。
-
资源占用少
:vi通常比Emacs更小,资源占用更少,启动时间明显更快,有时可达10倍。
-
功能差距缩小
:现在vi克隆版本已经添加了诸如增量搜索、多窗口和缓冲区、GUI界面、语法高亮和智能缩进以及通过扩展语言进行编程等功能,与Emacs的功能差距已显著缩小,甚至可能完全消失。
此外,有两种流行的Emacs版本:原始的GNU Emacs和基于早期GNU Emacs版本的XEmacs,它们各有优缺点和自己的用户群体。虽然GNU Emacs一直有vi模拟包,但通常效果不佳,不过“viper模式”现在被认为是一个优秀的vi模拟模式,可以作为学习Emacs的桥梁。
9. 关于vi的有趣引用
- 定理证明式引用 :Arthur Tateishi提出“定理:vi是完美的。证明:VI在罗马数字中是6。小于6且能整除6的自然数是1、2和3,1 + 2 + 3 = 6,所以6是完美数,因此vi是完美的”。Nathan T. Oelger对此回应,认为Vim在罗马数字中可能是(1000 – (5 + 1)) = 994,994等于2 * 496 + 2,而496是完美数,所以Vim比vi更完美。
- 禅意引用 :Satish Reddy表示“对我来说,vi就是禅。使用vi就是在实践禅。每个命令都是一个公案。对用户来说意义深远,对初学者来说却难以理解。每次使用它都能发现真理”。
10. vi命令符号及功能总结
| 符号 | 功能 |
|---|---|
| ! | 与缓冲区交互、cinkeys语法规则、起始ex命令、插入模式键映射、覆盖保存警告、执行Unix命令 |
| # | 表示备用文件名、描述缓冲区、提取元信息、显示行号命令 |
| $ | 光标移动命令、表示文件最后一行(ex)、标记更改区域结尾、元字符 |
| % | 描述缓冲区、表示当前文件名、表示每行(ex)、匹配括号、提取元信息 |
| & | 元字符、重复最后一个命令 |
| ‘ | ’‘(移动到标记)命令、标记行(vile)、移动到标记命令 |
| * | cinkeys语法规则、元字符 |
| + | 移动光标命令、表示下一个文件行(ex)、启动vi时运行命令 |
| , | 表示行范围(ex)、重复搜索命令 |
| - | 描述缓冲区、手动折叠、移动光标命令、表示上一个文件行(ex) |
| . | 表示当前行(ex)、echo命令相关、文件名相关、元字符、重复命令、撤销/重做(nvi) |
| / | 路径名分隔符、引用标记(vile)、搜索命令、在特定位置打开文件 |
| : | 起始:!命令、起始ex命令、行编辑模式、提取元信息 |
| ; | 表示行范围(ex)、重复搜索命令 |
| = | :=(识别行)命令、元字符、描述缓冲区 |
| ? | 元字符、搜索命令 |
| @ | vile选项、元字符、@ - 函数 |
| [] | [[, ]](移动光标)命令、元字符 |
| {} | {(移动光标)命令、}(移动光标)命令、cinkeys选项、查找和匹配、折叠、元字符 |
| ^ | 光标移动命令、元字符、表示CTRL键 |
| ` | ``(移动到标记)命令、标记字符(vile)、移动到标记命令 |
| () | ((移动光标)命令、)(移动光标)命令、元字符、查找和移除、分组元字符、匹配 |
11. vi常用命令总结
| 命令 | 功能 |
|---|---|
| a | 追加命令 |
| A | 追加命令 |
| :ab | 缩写命令(ex) |
| :ar | 命令 |
| :args | 命令 |
| c | 更改命令 |
| cc | 更改命令 |
| cw | 更改单词命令 |
| C | 更改命令 |
| d | 删除命令 |
| dd | 删除行命令 |
| D | 删除命令 |
| e | 移动光标命令 |
| E | 移动光标命令 |
| :e | 编辑文件命令(ex) |
| f | 搜索行命令 |
| F | 搜索行命令 |
| :f | 文件命令 |
| g | 全局命令(ex) |
| G | 转到命令 |
| h | 移动光标命令 |
| H | 主页命令 |
| i | 插入命令 |
| I | 插入命令 |
| j | 移动光标命令 |
| J | 连接命令 |
| k | 移动光标命令 |
| K | 无明确通用功能(结合上下文可能有特定功能) |
| l | 移动光标命令 |
| L | 最后一行命令 |
| m | 标记位置命令 |
| M | 中间行命令 |
| n | 再次搜索命令 |
| N | 再次搜索命令 |
| o | 打开行命令 |
| O | 打开行命令 |
| p | 放置命令 |
| P | 放置命令 |
| q | 退出命令(ex) |
| Q | 无明确通用功能(结合上下文可能有特定功能) |
| r | 读取命令(ex)、替换字符命令 |
| R | 替换字符命令 |
| s | 替换命令 |
| S | 替换命令 |
| t | 搜索行命令 |
| T | 搜索行命令 |
| u | 撤销命令 |
| U | 撤销命令 |
| v | 无明确通用功能(结合上下文可能有特定功能) |
| V | 无明确通用功能(结合上下文可能有特定功能) |
| w | 移动单词命令 |
| W | 移动单词命令 |
| x | 删除字符命令 |
| X | 删除字符命令 |
| y | 复制命令 |
| Y | 复制行命令 |
| z | 无明确通用功能(结合上下文可能有特定功能) |
| Z | 无明确通用功能(结合上下文可能有特定功能) |
12. vi克隆版本特点总结
| 克隆版本 | 特点 |
|---|---|
| elvis | 具有扩展正则表达式、GUI界面、无限撤销功能、多窗口编辑、编程辅助等功能,有多种显示模式和命令行参数,提供内置计算器和打印管理功能 |
| nvi | 具有扩展正则表达式、无限撤销功能、多窗口编辑、标签堆栈等功能,有特定的命令行参数和配置文件 |
| vile | 具有扩展正则表达式、无限撤销功能、多窗口编辑、编程辅助等功能,有自己的编辑模型和命令行参数,提供错误查找和文本重新格式化功能 |
| Vim | 具有扩展正则表达式、无限撤销功能、多窗口编辑、语法高亮、智能缩进等功能,支持脚本编程和会话管理,有多种启动选项和配置文件 |
13. 流程图:vi删除文本恢复流程
graph TD
A[误删文本] --> B{是否刚删除且未执行其他命令}
B -- 是 --> C[输入u撤销最后命令]
B -- 否 --> D{是否要恢复整行内容}
D -- 是 --> E{是否知道删除编号}
E -- 是 --> F[输入"编号p恢复内容]
E -- 否 --> G[无法通过编号恢复]
D -- 否 --> H[直接输入p恢复最后删除内容]
14. 流程图:添加vi Powered标志流程
graph TD
A[开始] --> B[下载标志]
B --> C[在网页适当位置添加链接代码]
C --> D[在网页<HEAD>部分添加元信息代码]
D --> E[结束]
通过以上对vi编辑器的深入介绍,我们了解了vi使用中的常见问题解决方法、丰富的网络资源、不同克隆版本的特点,以及众多实用的命令和有趣的引用。希望这些内容能帮助你更好地掌握和使用vi编辑器。
深入探索vi编辑器:问题解决、网络资源与特色功能
15. 编辑功能详解
在使用vi进行编辑时,有诸多操作和功能需要掌握,以下为你详细介绍。
15.1 文本输入与修改
-
插入文本
:可以使用
i(在当前光标前插入)、I(在当前行首插入)、a(在当前光标后插入)、A(在当前行尾插入)、o(在当前行下方打开新行插入)、O(在当前行上方打开新行插入)等命令进入插入模式输入文本。 -
替换文本
:
-
r:替换单个字符,输入r后再输入要替换成的字符。 -
s:删除当前字符并进入插入模式。 -
S:删除当前行并进入插入模式。 -
cw:删除从光标位置到单词末尾的内容并进入插入模式,用于修改单词。 -
cc(或C):删除当前行并进入插入模式,用于整行修改。
-
15.2 文本删除与恢复
前面已经介绍了误删文本的恢复方法,这里再强调一下删除操作。
x
删除当前字符,
X
删除前一个字符,
dw
删除一个单词,
dd
删除整行。
15.3 文本复制与移动
-
复制
:
y(复制)和yy(复制整行)用于复制文本,复制的内容会存储在缓冲区中。 -
移动
:使用
d(删除)和p(粘贴)组合可以实现文本的移动,先d删除文本,再p将其粘贴到目标位置。
16. 搜索与替换功能
搜索和替换是vi中非常实用的功能,能帮助我们快速定位和修改文本。
16.1 搜索功能
-
正向搜索
:使用
/后跟搜索模式,例如/keyword,按n继续搜索下一个匹配项,按N搜索上一个匹配项。 -
反向搜索
:使用
?后跟搜索模式,同样按n和N进行上下搜索。
16.2 替换功能
-
:s命令用于替换文本,基本格式为:s/old/new/g,其中old是要替换的内容,new是替换后的内容,g表示全局替换(即替换整行中所有匹配项)。如果不使用g,则只替换每行的第一个匹配项。 -
可以使用
c选项来确认每个替换操作,例如:s/old/new/gc,在替换时会逐个询问是否替换。
17. 多窗口编辑
vi支持多窗口编辑,方便同时查看和编辑多个文件或同一文件的不同部分。
17.1 打开多窗口
-
:split(或sp):水平分割当前窗口,打开一个新窗口。 -
:vsplit(或vs):垂直分割当前窗口,打开一个新窗口。
17.2 在窗口间切换
使用
^W
组合键进行窗口间的切换,例如
^Ww
在窗口间循环切换,
^Wj
切换到下方窗口,
^Wk
切换到上方窗口,
^Wh
切换到左方窗口,
^Wr
切换到右方窗口。
17.3 调整窗口大小
使用
^W=
将所有窗口调整为相同大小,
^W+
增加当前窗口高度,
^W-
减小当前窗口高度,
^W>
增加当前窗口宽度,
^W<
减小当前窗口宽度。
18. 标签功能
标签功能可以帮助我们快速定位到代码中的函数、变量等定义处。
18.1 创建标签文件
使用
ctags
命令创建标签文件,例如
ctags -R *
会递归地为当前目录下的所有文件创建标签文件
tags
。
18.2 使用标签
-
CTRL-]:跳转到光标下的单词所对应的标签定义处。 -
CTRL-T:返回上一个标签位置。 -
:tag命令:可以手动指定要跳转的标签名。
19. 配置文件与自定义设置
通过配置文件可以对vi的编辑环境进行自定义设置,以满足个人的使用习惯。
19.1 .exrc文件
.exrc
文件是vi的配置文件,可以在其中设置各种选项,例如:
set number " 显示行号
set ignorecase " 搜索时忽略大小写
19.2 .vimrc文件
对于Vim编辑器,
.vimrc
文件是更强大的配置文件,可以进行更复杂的设置和脚本编程。例如:
set tabstop=4 " 设置制表符宽度为4个空格
set shiftwidth=4 " 设置自动缩进宽度为4个空格
set expandtab " 将制表符转换为空格
20. 编程辅助功能
vi及其克隆版本提供了一些编程辅助功能,帮助提高编程效率。
20.1 语法高亮
许多vi克隆版本支持语法高亮,能根据不同的编程语言对代码进行不同颜色的显示,方便阅读和编辑。可以通过设置
colorscheme
命令来选择不同的颜色方案,例如
:colorscheme desert
。
20.2 智能缩进
智能缩进功能可以根据代码的语法结构自动调整缩进,使代码排版更整齐。可以使用
set smartindent
或
set cindent
来开启智能缩进功能。
21. 流程图:vi搜索与替换流程
graph TD
A[开始] --> B{是否进行搜索}
B -- 是 --> C{正向还是反向搜索}
C -- 正向 --> D[/输入/搜索模式]
C -- 反向 --> E[输入?搜索模式]
D --> F[按n或N继续搜索]
E --> F
B -- 否 --> G{是否进行替换}
G -- 是 --> H[/输入:s/old/new/选项]
H --> I{是否需要确认替换}
I -- 是 --> J[使用:c选项逐个确认]
I -- 否 --> K[直接替换]
G -- 否 --> L[结束]
F --> M{是否完成搜索或替换}
M -- 是 --> L
M -- 否 --> B
22. 流程图:vi多窗口编辑操作流程
graph TD
A[开始] --> B{是否打开新窗口}
B -- 是 --> C{水平还是垂直分割}
C -- 水平 --> D[:split或sp]
C -- 垂直 --> E[:vsplit或vs]
D --> F[在新窗口操作]
E --> F
B -- 否 --> F
F --> G{是否切换窗口}
G -- 是 --> H[/使用^W组合键切换]
H --> I{是否调整窗口大小}
I -- 是 --> J[/使用^W+等命令调整]
I -- 否 --> K{是否关闭窗口}
J --> K
H -- 否 --> K
K -- 是 --> L[:close关闭窗口]
K -- 否 --> M{是否完成操作}
L --> M
M -- 是 --> N[结束]
M -- 否 --> B
通过对vi编辑器各方面功能的深入探讨,我们可以看到vi不仅功能强大,而且具有很高的可定制性。无论是日常的文本编辑,还是专业的编程工作,vi都能发挥重要作用。希望大家通过不断实践和探索,充分利用vi的各种功能,提高工作效率。
超级会员免费看
3

被折叠的 条评论
为什么被折叠?



