vi程序是功能强大的文本编辑器。 Sun Microsystems的共同创始人William Joy最初在1976年为Berkeley Software Distribution(BSD)UNIX的早期版本编写了vi编辑器。 有传言说比尔在周末写了vi,但他说这一说法是不正确的。 该程序是用UNIX扩展行编辑器中的visual
命令命名的, 例如简称。
vi编辑器是一个功能非常强大的编辑器,具有许多甚至不存在的功能。 Vi是模式编辑器,这意味着当在程序上放置其他设置时,程序会产生不同的结果。 vi中有三种不同的模式: 命令,插入 (或输入 )和行。 在插入模式下操作时,文本将被写入正在编辑的临时文件中。 在正常模式下,相同的击键会触发编辑器中嵌入的命令。 要进入插入模式,只需按I键。 要退出命令模式,请按Escape键。 (我将在本文后面详细解释线路模式。)
例如,在插入模式下,如果您键入字符串10dd
,那么该字符串将被写入临时文件,如图1所示。
图1.在插入模式下键入dd
但是,如果处于命令方式,则字符串10dd
将从当前光标所在的位置开始,从临时文件中删除10行,如图2所示。
图2.在命令模式下键入dd
另一个例子是光标移动。 在命令模式下,键H,J,K和L分别向左,向下,向上和向右移动光标,如图3所示。在插入模式下,将改为显示这些字母。
图3. vi中的光标移动
通常,UNIX用户使用vi或由Richard Stallman于1976年编写的另一个称为Editor Macros(Emacs)的编辑器。但是,许多用户选择vi,因为它重量轻,启动速度更快且使用的内存更少。
什么是Vim?
Vim的,或经过改进的vi,是布莱姆·米勒在1991年写的VI的扩展版本的编辑器最初被设计为Amiga计算机,但很快通过UNIX在1992年第六一样蔓延时,Vim是基于命令模式和插入模式作为文本用户界面(TUI)-如图4所示。
图4. Vim TUI
但是,它确实提供了一个名为gVim的图形用户界面(GUI),如图5所示。
图5. Vim GUI
Vim命令
Vim中的内部命令类似于vi编辑器中的内部命令。 表1提供了Vim中的光标移动命令。
表1.用于实现光标移动的Vim命令
命令 | 行动 |
---|---|
H | 向左移动光标 |
j,加号(+),输入或返回 | 向下移动光标 |
k,减号(-) | 向上移动光标 |
升 | 向右移动光标 |
} | 将光标移到当前段落的末尾 |
{ | 将光标移到当前段落的开头 |
) | 将光标移到当前句子的末尾 |
( | 将光标移到当前句子的开头 |
^ | 移至当前行中的第一个非空白字符 |
$ | 移至当前行的末尾 |
0(零) | 移至当前行的开头 |
w或W | 移至下一个单词的开头 |
b或B | 移至上一个单词的开头 |
Ë | 移至下一个单词的末尾 |
H | 移至屏幕的第一行 |
中号 | 移至屏幕中间 |
大号 | 移至屏幕的最后一行 |
G | 移至文件末尾 |
gg | 移至档案开头 |
:n | 移至第n行 |
表2显示了删除文本的Vim命令。
表2.用于删除文本的Vim命令
命令 | 行动 |
---|---|
d | 删除所选区域 |
dd | 删除整个当前行 |
10日 | 从当前行开始删除10行 |
dw | 从当前位置开始删除单词 |
D b | 向后删除当前光标位置左侧的单词 |
dl | 删除当前光标位置的字符 |
dh | 删除当前光标位置左侧的字符 |
d0(零) | 从当前光标位置到行首删除文本 |
D | d $ | 删除从当前光标位置开始的整行 |
X | 删除光标当前位置的字符 |
X | 删除光标当前位置之前的字符 |
表3提供了其他一些有用的Vim命令。
表3.常见的Vim命令
命令 | 行动 |
---|---|
h | 进入插入模式并在当前光标位置插入 |
一世 | 进入插入模式并在当前行的开头插入 |
一个 | 进入插入模式并在光标后追加 |
一个 | 进入插入模式并追加到当前行的末尾 |
C | 更改所选区域 |
C | 从光标的当前位置开始更改整行 |
Ø | 在光标当前所在的行下方创建一个新的空白行,并将光标移动到新空白行的开头 |
Ø | 在光标当前所在的行上方创建一个新的空白行,并将光标移至新空白行的开头 |
[R | 在光标的当前位置替换单个字符 |
[R | 替换从光标当前位置开始到退出插入模式时结束的多个字符 |
<Esc> | 退出插入或可视模式 |
>或<Tab> | 向右缩进所选区域 |
< | 向左缩进所选区域 |
v | 开始突出显示字符 |
V | 开始突出显示整行 |
y | 提取/复制当前行到内存 |
10年 | 将当前行开始的10行提取/复制到内存中 |
p | 将文本拖出或删除; 如果拉了字符( yw dw 或D ),则将字符放在光标的当前位置之后。 如果拉了线,则将线放在光标的当前行下方。 |
P | 与p 相同,但是将字符放在光标当前位置之前或光标当前行上方的行中 |
ü | 撤消上一次更改 |
<Ctrl> R | 重做 |
/ <模式> | 搜索找到的下一个图案,并将光标放在找到的图案的开头 |
?<模式> | 搜索找到的上一个图案,并将光标放在找到的图案的开头 |
ñ | 重复上一次搜索 |
ñ | 重复上一次搜索,但反转搜索方向 |
!<cmd> | 在Vim会话之外执行<cmd> |
线路模式
尽管命令和插入模式已被广泛使用,但行模式同样强大,但有时无法完全理解或使用。 行模式进入行编辑器,使您可以处理单行或多行命令。 考虑到vi是用ex编辑器命名的,因此仅适合于行模式将您带入ex编辑器。
进入行模式,从指令模式,简单地键入一个冒号( :
)。 然后,光标将移动到窗口的左下角。 当您继续输入时,所有文本都会出现在窗口底部的冒号之后。 当您单击Enter时 ,将评估并执行线路模式命令。 如果您决定不执行以行模式输入的行,请单击“ 转义”以返回命令模式。
使用编辑器的行模式时,请记住两种命令样式。 首先,当您键入命令时,vi或Vim将按原样执行该命令。 如果执行的命令与修改数据有关,则当前行将成为目标。 但是,使用第二种方法,您可以提供行号来处理指定的行。 要输入的线条,在冒号之后,输入线的数字或范围行处理的,用逗号分隔的开始和结束范围( ,
)。
例如,仅处理第23行,该命令将以:23
开头。 如果要修改2319到3819行,请输入:2319,3819
。 要处理从第45行的起始位置到文件末尾的命令,请将最后一行参数替换为美元符号( $
),即:45,$
。
以下命令只是可以在行模式下执行的命令的开始:
-
:w <file name>
:将文件写入磁盘。 如果提供了参数,编辑器将尝试将数据写入<文件名>。注意:如果提供参数并且<文件名>存在,则编辑器将不会覆盖现有文件的数据。
-
:w! <file name>
:w! <file name>
:将文件写入磁盘并覆盖文件中的所有数据。 -
:<x>,<y> w <file name>
:将<x>至<y>行写入<文件名>。 -
:q
:尝试退出编辑器而不保存。注意:如果数据已被修改,则编辑器将在文件被保存之前退出,或者您不保存即退出。
-
:q!
:退出编辑器,而不尝试将文件写入磁盘。 -
:n
:如果要编辑多个文件,请开始编辑编辑列表中的下一个文件。 -
:e <file name>
:编辑<文件名>。 -
:e#
:如果要编辑两个文件,请在文件之间切换。 -
:s/<str1>/<str2>/
:用当前行的<str2>替换第一次出现的<str1>。 -
:1,$ s/<str1>/<str2>/g
:从第1行开始,并在整个文件中继续,将<str1>全局替换为<str2>。 -
:r <file name>
:将:r <file name>
读入当前的编辑器会话。 -
:<x>,<y> d
:删除<x>至<y>行。 -
:<x>,<y> y
:从 <x>到<y>抽线。
vi和Vim之间的区别
尽管vi和Vim确实具有相同的外观和感觉,但是它们肯定具有差异。 以下只是这两个强大的文本编辑器之间的一些区别:
- vimscript: Vim使用内部脚本语言vimscript,允许复杂的脚本向编辑器添加扩展功能。 除了vimscript之外,Vim还支持Perl,Python,Ruby,Tcl和其他语言。
- vimdiff: Vim软件包捆绑了一个称为
vimdiff
的有用命令。 使用vimdiff
,您可以将多个文件彼此相邻显示,类似于sdiff
,如图6所示。图6. vimdiff的示例
- 编辑压缩文件:为了节省系统空间,管理员经常压缩日志文件或其他大文件。 它永远不会失败:文件被压缩,然后有人问您:“嘿,您能看看两个月前的日志吗?” Vim可以编辑压缩的文件,而不是解压缩文件,然后用vi对其进行编辑。 Vim可以处理用bzip2,gzip和zip压缩的编辑文件。
- 编辑归档文件: Vim还可以编辑
tar
串联的文件。 编辑.tar文件时,Vim显示一个方便的屏幕,使您可以选择存档中要编辑的文件, 如图7所示。 完成文件编辑后,只需正常保存并退出文件(:wq
),Vim返回显示,从而允许您在存档中选择另一个文件进行编辑,或者可以从选择窗口(:q
)退出。 。图7.使用Vim选择要在归档文件中编辑的文件
在图8所示的示例中,使用
tar
命令将四个ASCII文本文件存档,然后使用Vim选择存档中的第二个文件进行编辑。图8.通过Vim编辑档案中的文件
- 分割窗口: gVim允许您从现有文件中打开多个窗口以及动态创建新文件,而不是在编辑多个文件时在一个窗口之间来回切换,如图9所示。
图9.在Vim中拆分窗口
- 语法要点:调试某人的shell脚本或其他编辑器最初未编写的代码可能感觉像是一项繁重的任务。 值得庆幸的是,Vim帮助减轻了编辑他人代码时的一些麻烦。 使用Vim,可以对代码块进行颜色填充,从而使在Shell脚本以及其他编程语言中的调试变得更加容易,如图10所示。
图10.语法突出显示
- 上一个光标位置:编辑文件时,有时必须退出文件并执行其他任务。 但是,当您准备返回文件时,您就忘记了上次退出的地方! 不用担心:Vim在退出文件时会记住最后一个光标位置。 这在修改几千行的文件时非常有用。
- 多次撤消/重做操作:过去,vi仅允许您在编辑文件时撤消上一次更改。 这是一个很好的开始,但需要增加。 有时,在编写脚本或其他代码时,看起来不错的主意并不是解决问题的最佳方法,因此您必须能够撤消对文件所做的最后10次更改。 Vim允许您执行此操作。
- 可视模式: Vim允许使用“可视”模式选择某些文本块。 使用此模式,您可以在正在编辑的文件中选择任意数量的文本,然后使用单个命令来影响突出显示的文本。 例如,如果必须删除一段文本的中间,只需键入
v
进入可视模式,将光标移动到要修改的文本中,然后键入d
删除突出显示的文本。
如何获得Vim?
既然您已经看到了vi和Vim之间的一些增强和区别,您可能会说:“我想要Vim!在哪里得到的?” 好消息:Vim已被移植到几种不同的操作系统。
以下是一些已移植到Vim的平台:
- 阿米加
- 艾克斯
- BSD
- 西格温
- IBM OS /2®
- 的Linux
- Apple Mac OS和Mac OS X
- Microsoft®MS-DOS®
- 通过WindowsVista®通过MicrosoftWindows®95
- Microsoft Windows CE
- OpenVMS
Windows上的Vim
因此,您在上一节中看到了Vim可用于Windows,现在您说:“我可以在Windows上使用Vim吗?我想要!” 你真幸运!
只需从Vim网站下载已移植到Windows的Vim的最新版本(当前为7.1版)。 最简单的方法是下载自动安装的可执行文件,然后执行该文件并按照步骤进行操作。 安装后,可以右键单击文件,单击“ 用Vim编辑” (如下图11所示,然后violà!现在在Windows中的Vim中编辑文件!
图11.在Windows中用Vim编辑文件
现在,您已经在Windows计算机上安装了Vim,可以享受Vim背后的天才,而不必理会Windows中的所有其他文本编辑器。
结论
vi编辑器开始为UNIX中的文本编辑器铺平道路,而Vim沿着这条道路继续发展。 阅读本文后,我希望您了解了有关Vim编辑器的一些新知识,如何使用其许多功能来使您的生活更轻松,并欣赏作为编辑器这样简单的概念如何被证明是稳定而强大的UNIX世界以及现在大多数其他操作系统中的应用程序。 我相信,如果您不太使用Vim,那么在了解了编辑器的来龙去脉之后,您将同意没有其他编辑器可以进行比较。
翻译自: https://www.ibm.com/developerworks/aix/library/au-speakingunix_vim/index.html