:open
命令的说明:This command is in Vi, but Vim only simulates it:
*:o* *:op* *:open*
:[range]o[pen] Works like |:visual|: end Ex mode.
{Vi: start editing in open mode}
:[range]o[pen] /pattern/ As above, additionally move the cursor to the
column where "pattern" matches in the cursor
line.
Vim does not support open mode, since it's not really useful. For those
situations where ":open" would start open mode Vim will leave Ex mode, which
allows executing the same commands, but updates the whole screen instead of
only one line.
它没有评论“模拟”的性质,以及为什么认为这是模拟而不是具有不同行为的真实命令。当从ex模式(Q)运行时,它的确确实符合上述说明。
但是,似乎也有一个不同的open命令。从普通命令行运行,或者从带有不同参数的ex模式运行时,它似乎是
:edit
的同义词。从带有/pattern/
的命令模式运行时,它将定位光标并显然运行:edit
(仅当:edit失败时才显示光标位置。)它也可以作为:open /pattern/ file
运行,后者定位光标并运行:edit file
我的问题是:为什么没有对此进行记录?与
:edit
有什么不一样的地方吗? :open
曾经是:edit
的同义词,只是后来为了试图中途遵守POSIX而进行了更改?#1 楼
vi的“开放模式”对于只有一行的终端(例如硬拷贝终端)很有用。在打开模式下,vi具有文件的“单行视图”。左右移动光标将重画整行,并且删除的字符以不同的方式打印。vim所做的“模拟”只是支持该命令,使其像
:visual
一样起作用(如文档所述),并且由于:visual
“否则与:edit
相同”,这可能就是您看到它的原因从源代码角度来看,:edit
是在:open
(ex_docmd.c
)中实现的。它可以处理提供正则表达式的情况,但是总是以对ex_open()
的调用结尾。do_exedit()
,:edit
和:badd
的实现包含在:visual
函数中。相同的文件,该函数是对ex_edit()
的直接调用(没有其他功能)。因此,除了处理正则表达式参数外,还会调用相同的代码。 do_exedit()
有点毛茸茸,它的行为会根据发出的实际命令进行大量修改,但是从不显式检查命令标记的打开/编辑/可视化。因此,这三个命令导致在do_exedit()
中运行几乎相同的代码。#2 楼
从Vi的显示编辑简介:如果您使用的是硬拷贝终端或没有游标可以移至底线的终端,则仍可以使用vi的命令集,但模式不同。当您发出vi命令时,编辑器将告诉您它正在使用开放模式。此名称来自ex中的open命令,该命令用于进入相同的模式。
可视模式和open模式之间的唯一区别是文本的显示方式。
在打开模式下,编辑器使用单个行窗口进入文件,并且在文件中前后移动会导致显示新行,始终在当前行下方。 vi的两个命令在打开时的工作方式不同:z和^ R。 z命令不带参数,而是在当前行周围绘制一个上下文窗口,然后将您返回到当前行。
如果您在硬拷贝终端上,则^ R命令将重新输入当前行。在这样的终端上,编辑器通常使用两行代表当前行。第一行是您开始对其进行编辑时的副本,并且您在此行下方的行上进行工作。删除字符时,编辑器将键入多个\,以显示被删除的字符。编辑器还会在进行此类更改后立即重新打印当前行,以便您可以再次看到该行的样子。屏幕模式。您可以通过输入ex并使用打开的命令来执行此操作。我只能假设它仍然存在,以便与POSIX兼容。
尽管有相似之处,但无论如何,
:open
都不能替代:open
。