43、深入探索vi编辑器:问题解决、网络资源与特色功能

深入探索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 。该教程涵盖以下主题:
    1. 编辑器基础
    2. 行模式地址
    3. g(全局)命令
    4. 替换命令
    5. 编辑环境(set命令、标签、EXINIT和.exrc)
    6. 地址和列
    7. 替换命令r和R
    8. 自动缩进

    9. 此外,教程还提供了一个在线测验,可用于检验对教程内容的掌握程度。
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的各种功能,提高工作效率。

本项目构建于RASA开源架构之上,旨在实现一个具备多模态交互能力的智能对话系统。该系统的核心模块涵盖自然语言理解、语音转文本处理以及动态对话流程控制三个主要方面。 在自然语言理解层面,研究重点集中于增强连续对话中的用户目标判定效能,并运用深度神经网络技术提升关键信息提取的精确度。目标判定旨在解析用户话语背后的真实需求,从而生成恰当的反馈;信息提取则专注于从语音输入中析出具有特定意义的要素,例如个体名称、空间位置或时间节点等具体参数。深度神经网络的应用显著优化了这些功能的实现效果,相比经典算法,其能够解析更为复杂的语言结构,展现出更优的识别精度更强的适应性。通过分层特征学习机制,这类模型可深入捕捉语言数据中隐含的语义关联。 语音转文本处理模块承担将音频信号转化为结构化文本的关键任务。该技术的持续演进大幅提高了人机语音交互的自然度流畅性,使语音界面日益成为高效便捷的沟通渠道。 动态对话流程控制系统负责维持交互过程的连贯性逻辑性,包括话轮转换、上下文关联维护以及基于情境的决策生成。该系统需具备处理各类非常规输入的能力,例如用户使用非规范表达或对系统指引产生歧义的情况。 本系统适用于多种实际应用场景,如客户服务支持、个性化事务协助及智能教学辅导等。通过准确识别用户需求并提供对应信息或操作响应,系统能够创造连贯顺畅的交互体验。借助深度学习的自适应特性,系统还可持续优化语言模式理解能力,逐步完善对新兴表达方式用户偏好的适应机制。 在技术实施方面,RASA框架为系统开发提供了基础支撑。该框架专为构建对话式人工智能应用而设计,支持多语言环境并拥有活跃的技术社区。利用其内置工具集,开发者可高效实现复杂的对话逻辑设计部署流程。 配套资料可能包含补充学习文档、实例分析报告或实践指导手册,有助于使用者深入掌握系统原理应用方法。技术文档则详细说明了系统的安装步骤、参数配置及操作流程,确保用户能够顺利完成系统集成工作。项目主体代码及说明文件均存放于指定目录中,构成完整的解决方案体系。 总体而言,本项目整合了自然语言理解、语音信号处理深度学习技术,致力于打造能够进行复杂对话管理、精准需求解析高效信息提取的智能语音交互平台。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值