:open在vim中做什么?


18

Vim的文档中有关于: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)运行时,它的确确实如描述的那样工作。

但是,似乎还有一个不同的打开命令。从普通命令行运行,或者从具有不同参数的ex模式运行时,它似乎是的同义词:edit。从带有 a的命令模式运行时/pattern/,它将定位光标明显运行:edit(只有:edit失败,光标位置才明显)。它也可以作为运行:open /pattern/ file,将光标定位并运行:edit file

我的问题是:为什么没有对此进行记录?:edit我没有注意到有什么不同吗?是:open曾经的代名词:edit,只有在企图半路符合POSIX后来改?

Answers:


13

vi的“开放模式”对于只有一行的终端(例如硬拷贝终端)很有用。在打开模式下,vi具有文件的“单行视图”。左右移动光标将重画整行,并且删除的字符以不同的方式打印。

vim所做的“模拟”只是支持该命令,使其作用(如文档所述)类似,:visual并且由于:visual“与...否则相同:edit”,因此可能是您看到它表现为的原因:edit

从源代码角度看,:openex_docmd.cex_open())中实现。它可以处理提供正则表达式的情况,但是总是以调用结尾do_exedit()

的实施:edit:badd:visual包含在ex_edit()同一个文件的功能,而功能是直接调用do_exedit()(没有别的)。因此,除了处理正则表达式参数外,还会调用相同的代码。do_exedit()有点毛茸茸,它的行为会根据发出的实际命令进行大量修改,但从不显式检查打开/编辑/可视化的命令标记。因此,这三个命令导致或多或少的相同代码在中运行do_exedit()


8

简介到使用Vi进行显示编辑

如果您在硬拷贝终端上,或者在没有游标可以移至最底行的终端上,则仍可以使用vi的命令集,但使用的是另一种模式。当您发出vi命令时,编辑器将告诉您它正在使用开放模式。该名称来自ex中的open命令,该命令用于进入相同模式。

可视模式和打开模式之间的唯一区别是文本的显示方式。

在打开模式下,编辑器使用单个行窗口进入文件,并且在文件中前后移动会导致显示新行,始终在当前行下方。vi的两个命令在打开时的工作方式不同:z和^ R。z命令不带参数,而是在当前行周围绘制上下文窗口,然后将您返回到当前行。

如果在硬拷贝终端上,^ R命令将重新输入当前行。在此类终端上,编辑器通常使用两行来表示当前行。第一行是您开始对其进行编辑时的副本,并且您在此行下方的行上进行工作。删除字符时,编辑器将键入多个\,以向您显示被删除的字符。在进行此类更改后,编辑器还会立即重新打印当前行,以便您可以再次看到该行的外观。

在非常慢的终端上使用此模式有时很有用,该终端可以在全屏模式下支持vi。您可以通过输入ex并使用open命令来执行此操作。

:open是Vim起源于Vi克隆的人工制品,如今已完全无用。我只能假设它保留在那里是为了POSIX兼容性。

尽管模糊相似之处,:open可替换的:edit通过的任何想象。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.