深入探索vi编辑器:问题解决、网络资源与功能特性
1. vi使用中的常见问题及解决办法
在使用vi编辑器时,可能会遇到各种问题,以下为你介绍一些常见问题及对应的解决方法。
-
大小写锁定问题
:有时可能会在未察觉的情况下按下了Caps Lock键,由于vi是区分大小写的,大写命令(如I、A、J等)与小写命令(如i、a、j)不同,所有输入的命令都会被当作大写命令来处理。解决办法是再次按下Caps Lock键恢复小写,然后按下ESC键确保进入命令模式,接着可以输入U来恢复最后一次更改的行,或者输入u来撤销上一个命令。可能还需要进行一些额外的编辑来完全恢复文件中混乱的部分。
-
删除错误文本的恢复方法
:若不小心删除了错误的文本,有多种恢复方式。如果刚删除就发现问题,可直接输入u来撤销上一个命令(如dd),不过此方法仅在未执行其他命令时有效,因为u只能撤销最近的一个命令。而输入U则可以将该行恢复到未做任何更改之前的原始状态。另外,vi会将最后九次删除操作保存在九个编号的删除缓冲区中,若知道想要恢复的是第几次删除的内容,例如第三次,可输入”3p将缓冲区3的内容“放置”到光标所在行的下一行,但此方法仅适用于整行删除的情况。若要恢复删除的单词或行片段,且u命令无效时,可直接使用p命令,它会恢复最后一次删除的内容。
2. vi与互联网资源
vi作为自1980年以来的“标准”Unix屏幕编辑器,在Unix文化中占据着重要地位。它助力构建了Unix系统,而Unix又为如今的互联网奠定了基础,因此必然会有专门的互联网网站致力于vi相关内容。
-
起始资源
:可以从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 ,此网站的内容有:
- 详细比较不同vi克隆版本的选项和功能。
- 展示不同版本vi的截图。
- 列出许多vi克隆版本,并提供其联系信息(名称、地址、URL)。
- 指向多个常见问题解答文件的指针。
- 一些关于vi的有趣引用。
- 其他链接,包括vi咖啡杯的链接。
3. vi相关有趣元素
-
vi Powered标志
:这是一个小的GIF文件,可添加到个人网页上,以表明使用vi创建该网页。原始主页为http://www.abast.es/~avelle/vi.html (该页面为西班牙语,现已不可用),英文主页是http://www.darryl.com/vi.shtml ,添加标志的步骤如下:
- 下载标志。在图形化网页浏览器中输入http://www.darryl.com/vipower.gif ,然后将其保存到文件,也可使用命令行网页检索工具(如wget)。
- 在网页的适当位置添加以下代码:
<A HREF="http://www.darryl.com/vi.html">
<IMG SRC="vipower.gif">
</A>
此代码会将标志添加到页面,并使其成为超文本链接,点击后将转到vi Powered主页。还可在
标签中添加ALT=”This Web Page is vi Powered”属性,方便非图形化浏览器的用户使用。
3. 在网页的
<META name="editor" content="/usr/bin/vi">
- vi咖啡杯及周边 :现在可以从http://www.cafepress.com/geekcheat/366808 购买带有vi命令参考的咖啡杯、T恤、运动衫和鼠标垫等物品。
4. 在线vi教程与其他资源
-
在线vi教程 :有一个来自Unix World杂志、由Walter Zintz编写的九部分在线教程,起始链接为http://www.networkcomputing.com/unixworld/tutorial/009/009.html 。该教程涵盖的主题如下:
- 编辑器基础
- 行模式地址
- g(全局)命令
- 替换命令
- 编辑环境(set命令、标签、EXINIT和.exrc)
- 地址和列
- 替换命令r和R
- 自动缩进
-
宏
教程还附带一个在线测验,可用于检验对教程内容的掌握程度。
-
其他资源
- 不同的vi克隆版本 :如vigor,其源代码可从http://vigor.sourceforge.net 获取。
-
FTP存档
:在ftp://ftp.uu.net/pub/text - processing/vi 可找到vi相关信息的存档,该存档包含四个子目录:
- docs:包含vi的文档以及一些comp.editors的帖子。
- macros:包含各种vi宏。
- comp.editors:包含发布到comp.editors的各种材料。
- programs:包含适用于各种平台的vi克隆版本的源代码(以及其他程序),不过其中很多内容已过时,使用时需谨慎。
以下是一个简单的mermaid流程图,展示删除错误文本后的恢复流程:
graph TD
A[删除错误文本] --> B{刚删除且未执行其他命令?}
B -- 是 --> C[输入u撤销上一个命令]
B -- 否 --> D{知道是第几次删除?}
D -- 是 --> E[输入"n p 恢复指定编号缓冲区内容]
D -- 否 --> F[输入p恢复最后一次删除内容]
5. vi与Emacs的比较
在Unix社区中,vi与Emacs的比较是一个长期存在的话题。以下是一些支持vi的观点:
|比较点|vi优势|
| ---- | ---- |
|可用性|vi在每个Unix系统上都可用,在安装或切换系统时,可能不得不使用vi。|
|打字便利性|通常可以将手指保持在键盘的主行上,这对于盲打用户来说非常方便。|
|命令输入|命令通常是一个(或有时两个)常规字符,比Emacs所需的所有控制和元字符更容易输入。|
|资源占用|vi通常比Emacs更小,资源占用更少,启动时间明显更快,有时可达10倍。|
|功能差距缩小|如今,vi克隆版本已经添加了诸如增量搜索、多窗口和缓冲区、GUI界面、语法高亮和智能缩进,以及通过扩展语言进行编程等功能,与Emacs的功能差距已显著缩小,甚至可能完全消失。|
不过,也有两个关于Emacs的情况需要提及。一是有两个流行的Emacs版本:原始的GNU Emacs和基于早期GNU Emacs版本派生的XEmacs,它们各有优缺点,也都有自己的拥护者。二是尽管GNU Emacs一直有vi仿真包,但通常效果不佳,不过“viper模式”现在被认为是出色的vi仿真模式,对于有兴趣学习Emacs的人来说,它可以作为一个桥梁。
6. vi的有趣引用
- Arthur Tateishi :“THEOREM: vi is perfect. PROOF: VI in roman numerals is 6. The natural numbers less than 6 which divide 6 are 1, 2, and 3. 1 + 2 + 3 = 6. So 6 is a perfect number. Therefore, vi is perfect.”
- Nathan T. Oelger :“So, where does the above leave Vim? VIM in roman numerals might be: (1000 – (5 + 1)) = 994, which happens to be equal to 2*496+2. 496 is divisible by 1, 2, 4, 8, 16, 31, 62, 124, and 248 and 1+2+4+8+16+31+62+124+248 = 496. So, 496 is a perfect number. Therefore, Vim is twice as perfect as vi, plus a couple extra bits of goodies. ”
- Satish Reddy :“To me vi is zen. To use vi is to practice zen. Every command is a koan. Profound to the user, unintelligible to the uninitiated. You discover truth every time you use it.”
7. vi命令及符号总结
vi中有许多命令和符号,以下是一些常见的总结:
-
命令相关
-
插入与追加
:i(插入)、I(行首插入)、a(追加)、A(行尾追加)、o(打开新行并插入)、O(上一行打开新行并插入)。
-
删除
:d(删除)、dd(删除整行)、dw(删除单词)等。
-
替换
:r(替换单个字符)、R(进入替换模式)、s(替换字符并进入插入模式)、S(替换整行并进入插入模式)。
-
撤销与恢复
:u(撤销)、U(恢复行)。
-
移动
:h(左移)、j(下移)、k(上移)、l(右移)、w(移动到下一个单词开头)、b(移动到上一个单词开头)、G(移动到文件末尾)、gg(移动到文件开头)等。
-
符号相关
-
$
:表示行尾,如d$表示删除到行尾。
-
^
:表示行首,如0^表示移动到行首。
-
%
:可用于表示当前文件名、匹配括号等。
-
&
:用于重复最后一次替换命令。
以下是一个mermaid流程图,展示vi中搜索与替换的基本流程:
graph TD
A[进入命令模式] --> B{进行搜索?}
B -- 是 --> C[输入 / 或? 加上搜索模式]
C --> D{找到匹配项?}
D -- 是 --> E{进行替换?}
E -- 是 --> F[输入 :s/搜索模式/替换内容/选项]
E -- 否 --> G[结束操作]
D -- 否 --> H[提示未找到匹配项,可重新搜索]
B -- 否 --> G
8. vi克隆版本的特点
有多个vi克隆版本,如elvis、nvi、vile和Vim等,它们在功能上都有一定的改进和扩展:
|克隆版本|特点|
| ---- | ---- |
|elvis|具有扩展的正则表达式、GUI界面、内置计算器、无限撤销功能、多窗口编辑等。其命令行参数丰富,有多种显示模式,如文本、HTML、十六进制等。|
|nvi|支持扩展正则表达式、增量搜索、无限撤销、多窗口编辑和标签栈等。文档和在线帮助完善,可获取源代码进行自定义。|
|vile|具备扩展正则表达式、增量搜索、无限撤销、多窗口编辑、编程辅助和语法高亮等功能。有独特的编辑模型和程序语言,可通过命令行参数定制启动。|
|Vim|支持扩展正则表达式、多窗口编辑、语法高亮、智能缩进和脚本编程等。有丰富的配置选项和插件,可通过.vimrc文件进行定制。|
9. 编辑与文件操作
-
编辑操作
- 文本修改 :可以按字符、行或单词进行修改,如c(更改)、cc(更改整行)、cw(更改单词)等。
- 复制与粘贴 :使用y(复制)和p(粘贴)命令,可结合编号或命名缓冲区进行操作。
- 大小写转换 :使用~、\u、\l等元字符进行大小写转换。
-
文件操作
- 打开文件 :使用:e命令打开文件,可指定文件名或路径。
- 保存文件 :使用:w命令保存文件,:w!可强制覆盖现有文件。
- 关闭文件 :使用:q命令退出,:q!可强制退出不保存更改。
- 多文件操作 :使用:args命令指定多个文件,:n和:prev切换文件。
10. 正则表达式与模式匹配
vi中的正则表达式使用元字符进行模式匹配,常见的元字符如下:
|元字符|含义|
| ---- | ---- |
|. |匹配任意单个字符|
|* |匹配前面的字符零次或多次|
|+ |匹配前面的字符一次或多次|
|? |匹配前面的字符零次或一次|
|[ ] |匹配方括号内的任意一个字符|
|( ) |分组匹配|
|\ |转义字符,用于匹配特殊字符本身|
在使用:g和:s命令进行全局替换和替换操作时,可结合正则表达式实现强大的文本处理功能。例如,:g/pattern/d用于删除所有匹配模式的行,:s/pattern/replacement/g用于全局替换匹配模式的内容。
11. 配置与定制
可以通过.exrc和.vimrc等配置文件对vi和Vim进行定制,常见的配置选项包括:
-
显示设置
:如设置行号(set number)、显示模式(set showmode)等。
-
搜索设置
:如设置忽略大小写(set ignorecase)、增量搜索(set incsearch)等。
-
缩进设置
:如设置自动缩进(set autoindent)、智能缩进(set smartindent)等。
-
映射设置
:使用:map命令将自定义的键序列映射到特定的命令,提高操作效率。
通过合理配置这些选项,可以根据个人需求和习惯定制vi的编辑环境,提升编辑效率。
12. 编程辅助功能
vi及其克隆版本提供了一些编程辅助功能,帮助开发者更高效地编写代码:
-
语法高亮
:通过设置不同的语法文件,可对各种编程语言进行语法高亮显示,使代码更易阅读。
-
标签功能
:使用ctags命令生成标签文件,然后通过:tag命令快速跳转到函数、变量等定义处,方便代码浏览和调试。
-
自动补全
:支持关键字补全、文件名补全等功能,减少手动输入的工作量。
-
编译与错误检查
:可通过设置makeprg选项,在vi中直接编译程序,并使用:cn和:cp命令快速定位编译错误。
这些编程辅助功能使得vi成为一个强大的代码编辑器,尤其适合习惯命令行操作的开发者。
深入探索vi编辑器:问题解决、网络资源与功能特性
13. 多窗口与标签页编辑
vi及其克隆版本支持多窗口和标签页编辑,极大地提升了编辑效率和便利性。
-
多窗口编辑
-
窗口分割
:使用:split(水平分割)和:vsplit(垂直分割)命令可以将当前窗口分割成多个子窗口,同时查看和编辑多个文件或同一文件的不同部分。
-
窗口操作
:使用^W系列命令(如^Wj、^Wk、^Wh、^Wl)可以在不同窗口之间切换;使用:resize命令可以调整窗口大小。
-
多文件操作
:结合:args命令可以同时打开多个文件,然后使用:bn和:bp在不同文件的窗口间切换。
-
标签页编辑
-
标签页创建与切换
:使用:tabnew命令创建新的标签页,:tabclose关闭当前标签页,:tabnext和:tabprev在不同标签页之间切换。
-
标签页管理
:通过标签页可以将相关的文件组织在一起,方便在不同的工作上下文之间快速切换。
以下是一个mermaid流程图,展示多窗口编辑的基本操作流程:
graph TD
A[打开vi] --> B{需要多窗口编辑?}
B -- 是 --> C[使用:split或:vsplit分割窗口]
C --> D{需要切换窗口?}
D -- 是 --> E[使用^W系列命令切换]
D -- 否 --> F{需要调整窗口大小?}
F -- 是 --> G[使用:resize命令调整]
F -- 否 --> H{需要切换文件?}
H -- 是 --> I[使用:bn或:bp切换文件窗口]
H -- 否 --> J[继续编辑]
B -- 否 --> J
14. 宏的使用
宏是vi中非常强大的功能,可以录制一系列操作并重复执行,提高重复性任务的处理效率。
-
宏的录制
:使用qa(a为寄存器名称)开始录制宏,执行一系列操作后,使用q结束录制。例如,qa开始录制到寄存器a,执行一些编辑操作,最后q结束。
-
宏的执行
:使用@a执行寄存器a中的宏,@@重复上一次执行的宏。可以结合数字前缀重复执行宏,如10@a表示执行寄存器a中的宏10次。
-
宏的应用场景
:宏适用于批量替换、格式调整、代码生成等重复性任务。例如,将一段文本中的所有单词首字母大写,可以录制一个包含大小写转换操作的宏,然后对整段文本执行该宏。
15. 脚本编程
Vim支持脚本编程,通过Vim脚本可以实现自定义功能、自动化任务等。
-
基本语法
:Vim脚本有变量(如let a = 10)、函数(function MyFunction()… endfunction)、条件语句(if… else… endif)和循环语句(for… endfor)等基本语法。
-
脚本文件
:可以将Vim脚本保存为.vim文件,然后使用:source命令加载脚本文件。例如,:source ~/my_script.vim加载指定路径下的脚本文件。
-
应用场景
:脚本编程可以用于创建自定义命令、自动执行一系列操作、扩展Vim的功能等。例如,编写一个脚本实现自动备份文件的功能,在每次保存文件时自动备份到指定目录。
16. 与外部程序交互
vi可以与外部程序进行交互,实现更强大的功能。
-
执行外部命令
:使用:!命令可以在vi中执行外部Unix命令。例如,:!ls列出当前目录下的文件,:!grep pattern file在指定文件中搜索匹配模式的内容。
-
过滤文本
:使用:!命令结合管道可以对文本进行过滤和处理。例如,:%!sort对当前文件的所有行进行排序,:%!grep pattern过滤出匹配模式的行。
-
读取外部程序输出
:使用:r!命令可以将外部程序的输出读取到当前文件中。例如,:r!date将当前日期和时间插入到文件中。
17. 性能优化与技巧
为了提高vi的使用性能和效率,可以采用以下优化方法和技巧:
-
配置优化
:通过合理设置配置选项,如减少不必要的语法检查、关闭不必要的插件等,可以提高vi的启动速度和响应性能。例如,在.vimrc文件中添加set noswapfile关闭交换文件功能。
-
快捷键使用
:熟练使用vi的快捷键可以大大提高操作效率。例如,使用dw快速删除一个单词,使用yy复制一行,使用p粘贴内容等。
-
批量操作
:结合宏、正则表达式和多文件操作等功能,可以实现批量处理任务,减少手动操作的工作量。例如,使用宏和正则表达式批量替换多个文件中的特定内容。
18. 错误处理与调试
在使用vi过程中,可能会遇到各种错误,以下是常见错误及处理方法:
|错误信息|可能原因|解决方法|
| ---- | ---- | ---- |
|“File is read only”|文件为只读权限|使用:w!强制保存,或修改文件权限|
|“Pattern not found”|搜索模式未匹配到内容|检查搜索模式是否正确,或调整搜索选项|
|“No write since last change”|未保存更改就尝试退出|使用:w保存更改,或使用:q!强制退出|
19. 安全注意事项
在使用vi时,需要注意以下安全事项:
-
配置文件安全
:.exrc和.vimrc等配置文件可能包含敏感信息,如密码、密钥等,应确保这些文件的权限设置合理,避免被他人访问。
-
外部命令执行安全
:在使用:!命令执行外部命令时,要注意命令的安全性,避免执行恶意命令或泄露敏感信息。
-
文件操作安全
:在进行文件保存、删除等操作时,要谨慎确认操作,避免误删除重要文件。
20. 总结与展望
vi作为一款经典的文本编辑器,具有丰富的功能和强大的扩展性。通过掌握vi的各种命令、配置选项和高级功能,可以大大提高文本编辑和编程的效率。随着技术的不断发展,vi及其克隆版本也在不断更新和完善,未来可能会支持更多的现代编程特性和开发环境。
同时,vi社区也非常活跃,不断有新的插件、脚本和教程出现,为用户提供更多的学习和使用资源。无论是初学者还是有经验的开发者,都可以通过不断学习和实践,充分发挥vi的优势,提升自己的工作效率和技能水平。
以下是一个简单的列表,总结vi的主要优势:
- 强大的命令行操作,适合快速编辑和批量处理。
- 丰富的配置选项和插件,可根据个人需求定制。
- 多窗口和标签页编辑,提高编辑效率和便利性。
- 支持脚本编程,可实现自动化任务和自定义功能。
- 与外部程序交互能力强,可扩展功能。
总之,vi是一款值得深入学习和使用的文本编辑器,它将在未来的编程和文本处理领域继续发挥重要作用。
超级会员免费看
11

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



