37、Vile编辑器实用功能与特性全解析

Vile编辑器实用功能与特性全解析

文本选择与操作

在使用编辑器时,文本选择是基础操作。在相关编辑器中,你可以通过双击或三击来选择单个单词或整行文本。若要扩展选择范围,可点击鼠标右键。按住右键拖动,能像使用左键一样调整或滚动选择区域。而且,只要是打开同一缓冲区的窗口,选择范围都能在其中扩展。

例如,当有一个缓冲区在两个不同窗格中显示,一个显示开头,一个显示结尾时,你可以先在显示开头的窗格起始处点击左键,再在显示结尾的窗格中点击右键,这样就能选中整个缓冲区的内容。另外,同时按住 Ctrl 键和鼠标右键,可进行矩形方式的选择扩展。

鼠标中键用于粘贴所选内容,默认粘贴位置是最后一次文本光标所在处。若在点击中键时按住 Shift 键,粘贴位置则为鼠标光标的位置。若要清除选择(前提是选择由 xvile 控制),只需双击其中一条状态行即可。

剪贴板操作

在许多 X 应用程序之间,可通过 PRIMARY 选择进行数据交换。而其他一些应用程序则会使用 CLIPBOARD 选择来实现应用间的数据交换。

在很多 Sun 键盘上,按下 COPY 键可将所选文本移动到剪贴板,按下 PASTE 键进行粘贴。若发现无法将 xvile 中选择的文本粘贴到其他应用程序(反之亦然),很可能是这些应用程序使用的是 CLIPBOARD 选择而非 PRIMARY 选择。

xvile 提供了两个用于操作剪贴板的命令:
- copy-to-clipboard :执行此命令时,当前选择的内容会被复制到特殊的剪贴板删除寄存器(在寄存器列表中用 ; 表示)。当应用程序请求剪贴板选择时,xvile 会提供该删除寄存器的内容。
- paste-from-clipboard :此命令用于从当前拥有 CLIPBOARD 选择的对象处请求剪贴板数据。

对于 Sun 系统的用户,若想使用键盘上的 COPY 和 PASTE 键,可在 .vilerc 文件中添加以下键绑定:

bind-key copy-to-clipboard #-^
bind-key paste-from-clipboard #-*
资源与菜单设置

xvile 有众多可用于控制外观和行为的资源。如果你希望正确显示斜体或倾斜字体,字体选择就显得尤为重要。相关文档中提供了完整的资源列表以及 .Xdefault 条目的示例。

Motif 和 Athena 版本支持菜单功能。菜单项可由用户自定义,从当前目录或主目录下的 .vilemenu 文件中读取。xvile 允许设置三种类型的菜单项:
- 内置项 :特定于菜单系统,例如重新读取 .vilerc 文件或启动一个新的 xvile 副本。
- 直接调用内置命令 :如显示 [Buffer List]。
- 调用任意命令字符串 :例如运行交互式宏,像搜索命令。区分后两种类型,是因为开发者更希望 vile 在执行命令前能检查其有效性。

构建 winvile

winvile 的每个版本都提供二进制文件,但你可能也想编译其中的临时补丁版本。其源码为 Microsoft(makefile.wnt)和 Borland(makefile.tbc)编译器提供了 makefile。前者功能更丰富,提供了使用 OLE、perl 和内置语法高亮的构建选项。Win32 GUI 可在这两种编译器环境中构建。

winvile 的基本外观和功能

winvile 的 Win32 GUI 界面从表面上看,与 “No Toolkit” X11 界面很相似,都带有滚动条。但深入了解后会发现,它比 Motif 界面更复杂。

在编辑 Unicode 数据时,字体对话框初始设置为定宽系统字体。与 xvile 一样,字体可在 winvile 启动时设置,也可通过脚本或 OLE 服务器设置,还能使用 Win32 通用控件进行设置。若数据为无字节序标记的 Unicode UTF - 16 格式,且高亮调色板使用下划线和青色来显示引号字符串,数据会带有下划线。当默认系统字体无法显示文件中的字符时,winvile 会检测到字体过小,将 Unicode 数据以十六进制形式显示。

当选择更合适的字体后,就能正常显示字符。若再次选择系统字体,winvile 又会显示十六进制值。若你希望一直以十六进制形式查看宽字符,vile 也有相应的选项设置。

winvile 的菜单功能丰富,它扩展了系统菜单,可通过右键点击窗口标题栏访问,同时右键弹出菜单也有相同的选项,底部的 “Menu” 条目启用了此功能。菜单提供了常见 GUI 应用程序的打开、保存、打印和字体操作,还能通过 CD 条目设置 winvile 的当前工作目录。这些对应的对话框在 Win32 控制台版本中也可访问,只是没有菜单。此外,winvile 还允许浏览 Windows 收藏夹,并且最近文件(和最近文件夹)条目可从用户可配置数量的 “最近” 文件(或文件夹)中选择,这些名称会保存在用户的注册表数据中,方便每个运行的 winvile 实例使用。

扩展正则表达式

vile 提供的扩展正则表达式功能与 nvi 的扩展选项基本相同。它包含 POSIX 字符类的括号表达式,如 [[:alnum::]],还有一些扩展(额外的类和缩写)以及区间表达式,如 {,10}。其语法与 nvi 有所不同,依赖额外的反斜杠转义字符:
|符号|功能|
| ---- | ---- |
|| |表示选择,如 house|home|
|+ |匹配前面正则表达式的一个或多个实例|
|\? |匹配前面正则表达式的零个或一个实例|
|(…) |为 *, +, 和 \? 提供分组,还能在替换命令的替换部分使用匹配的子文本(如 \1, \2 等)|
|\s, \S |分别匹配空白字符和非空白字符|
|\w, \W |分别匹配 “单词组成” 字符(字母数字和下划线 “_”)和非 “单词组成” 字符|
|\d, \D |分别匹配数字和非数字|
|\p, \P |分别匹配可打印字符和不可打印字符(空白字符被视为可打印字符)|

vile 允许在替换命令的替换部分使用转义序列 \b, \f, \r, \t, 和 \n,分别代表退格、换页、回车、制表符和换行符。需要注意的是,vile 模仿 perl 处理 \u\L\1\E 的方式,而非 vi 的方式。例如,对于 :s/(abc)/\u\L\1\E/,vi 会替换为 abc,而 vile 和 perl 会替换为 Abc,这在单词首字母大写时更有用。

改进的编辑功能
命令行历史和补全

vile 会将你的 ex 命令记录在名为 [History] 的缓冲区中。该功能由 history 选项控制,默认开启。关闭此选项会禁用历史记录功能并移除 [History] 缓冲区。使用 show - history 命令可分割屏幕并在新窗口中显示 [History] 缓冲区。

冒号命令行实际上是一个小缓冲区,你可以用它从 [History] 缓冲区中召回并编辑命令行。使用 ↑ 和 ↓ 键可在历史记录中前后滚动,← 和 → 键在命令行内移动。当前的删除字符(通常是 BACKSPACE)可用于删除字符,输入的其他字符会插入到当前光标位置。

通过输入 mini - edit 字符(默认是 ^G),可将小缓冲区切换到 vi 模式。此时,vile 会根据 mini - hilite 选项指定的机制高亮显示小缓冲区,默认是反向视频显示。在 vi 模式下,你可以使用 vi 风格的命令进行定位,还能使用其他适合单行编辑的 vile 命令,如 i, I, a, 和 A。vile 根据命令表决定接受哪些命令,这使得你的键绑定在小缓冲区中也能正常工作。

一个有趣的特性是,vile 会根据你输入的命令,利用历史记录显示之前相关的数据。例如,输入 :set 加一个空格后,vile 会提示 “Global value:”,此时你可以按 ↑ 键查看之前设置的全局变量,以便进行修改。

ex 命令行提供多种补全功能。当你输入命令名称时,随时按下 TAB 键,vile 会尽可能补全命令名称。再次按下 TAB 键,vile 会创建一个新窗口,显示所有可能的补全选项。补全功能适用于内置和用户定义的 vile 命令、标签、文件名、模式、变量、枚举值(如颜色名称)以及终端字符(从 stty 设置派生的字符设置,如退格、暂停等)。

在 vi 风格的编辑器中,命令名称可能较长,但前几个字符通常是唯一的,因为支持缩写;而在 Emacs 风格的编辑器中,命令名称前几个字符可能不唯一,但通过命令补全功能仍能减少输入量。

标签栈

在 vile 中,标签栈功能可用且操作简单,但与其他克隆版本有所不同,特别是在 vi 模式下用于标签搜索和弹出标签栈的命令。以下是 vile 标签命令:
|命令|功能|
| ---- | ---- |
|next - tag|继续在标签文件中搜索更多匹配项|
|pop[!]|从栈中弹出一个光标位置,将光标恢复到之前的位置|
|show - tagstack|创建一个新窗口显示标签栈,标签入栈或出栈时显示会更新|
|ta[g][!] [tagstring]|编辑标签文件中定义的包含 tagstring 的文件,! 强制在当前缓冲区已修改但未保存时切换到新文件|

vi 模式下的标签命令如下:
|命令|功能|
| ---- | ---- |
|^]|在标签文件中查找光标下标识符的位置并移动到该位置,当前位置自动压入标签栈|
|^T, ^X ^]|返回标签栈中的上一个位置,即弹出一个元素|
|^A ^]|与 :next - tag 命令相同|

vile 还通过以下选项控制标签相关命令:
|选项|功能|
| ---- | ---- |
|pin - tagstack|使标签搜索和弹出操作不改变当前窗口,默认关闭|
|tagignorecase|使标签搜索忽略大小写,默认关闭|
|taglength|控制查找标签时有效字符的数量,默认值为 0 表示所有字符都有效|
|tagrelative|使用其他目录中的标签文件时,该文件中的文件名相对于标签文件所在目录|
|tags|可设置为用空格分隔的标签文件列表,用于查找标签,vile 默认将所有标签文件加载到隐藏的单独缓冲区中,可根据需要编辑,还可使用环境变量和 shell 通配符|
|tagword|使用光标下的整个单词进行标签查找,而不只是从当前光标位置开始的子单词,默认禁用以保持与 vi 兼容|

无限撤销

vile 在原理上与其他编辑器类似,但实际操作有所不同。与 elvis 和 Vim 一样,你可以设置撤销限制;与 nvi 一样,. 命令会根据情况进行下一次撤销或重做。vi 模式下有单独的命令实现连续撤销和重做。

vile 使用 undolimit 选项控制可存储的更改数量,默认值为 10,即最多可撤销最近的 10 次更改。将其设置为 0 可实现真正的 “无限撤销”,但可能会消耗大量内存。

开始撤销操作时,可先使用 u 或 ^X u 命令,之后每次输入 . 命令会继续撤销。与 vi 一样,连续输入两个 u 命令只是切换更改状态,而每次输入 ^X u 命令会进行一次撤销。^X r 命令用于重做,第一次输入 ^X r 后输入 . 会连续进行重做。你还可以为 ^X u 和 ^X r 命令提供计数,让 vile 执行指定次数的撤销或重做操作。

任意长度行和二进制数据处理

vile 能够编辑任意长度行和任意行数的文件,并且能自动处理二进制数据,无需特殊命令行或选项。输入 8 位文本时,可先输入 ^V,然后输入 x 和两个十六进制数字,或 0 和三个八进制数字,或三个十进制数字。输入 16 位 Unicode 值时,先输入 ^V,再输入 u 和最多四个十六进制数字。若当前缓冲区的 file - encoding 选项为 Unicode 格式(utf - 8, utf - 16, 或 utf - 32),vile 会直接将其存储为 UTF - 8 格式,并根据终端或显示器的能力进行显示。

本地化支持

过去,vile 的本地化支持较为基础,部分原因是各平台的本地化支持不完善(除了供应商的 Unix 系统)。它有自己的字符类型表,可指定哪些非 ASCII 字符是可打印的。

随着时间推移,vile 根据用户需求不断发展:
- 不再使用固定的字符类型概念,而是导入主机的字符类型表,并提供通过脚本修改数据的命令。
- 正则表达式支持 POSIX 字符类以及与 vile 自身字符类型对应的类。
- 支持从屏幕提取标记,用于标签、脚本等操作。以前这些标记是字符类型测试和特殊解析逻辑的混合,现在完全基于正则表达式,无需解析逻辑。
- 当主机的区域设置编码使用 UTF - 8,而要编辑包含 8 位数据(如 ISO - 8859 - 7 编码的希腊语数据)的文件时会有挑战。vile 启动时会检查主机区域设置是否以 UTF - 8(或类似)结尾,若是则支持在相应的 8 位区域设置中编辑。
- 在支持 UTF - 8 的主机环境中编辑文件时,有 UTF - 8 编码的文件。最新版本中,你可以让 vile 以各种 Unicode 编码格式写入文件,并读取相同的编码。8 位编辑模式得以保留,对于标记为 8 位的缓冲区会转换为 8 位编码,对于 Unicode 缓冲区则直接编辑(不进行转换)。不过,vile 尚未解决本地化的其他方面,如消息格式和文本排序顺序。

文件格式处理

vile 读取文件时,会对文件内容进行多项检查,以提供有用的数据:
- 检查文件权限是否允许写入。
- 检查行尾格式,可能是不同类型的 CR、LF 或 CR/LF。
- 检查 Unicode 字节序标记。
- 检查 Unicode 多字节编码。

基于这些检查,vile 可能会为新读取的缓冲区设置属性(称为 “模式”),并在读取时转换数据:
- 去除每行的行尾,同时记住相关的 recordseparator 模式。
- 若文件缺少最后一个行尾,设置 nonewline 选项。
- 将 UTF - 16 和 UTF - 32 数据转换为 UTF - 8,同时记住相关的 file - encoding 选项。

当你让 vile 将缓冲区写入文件时,它会使用这些本地选项设置来重建文件。

增量搜索

在 vile 中,使用 ^X S 和 ^X R 命令可进行增量搜索,无需设置选项来启用此功能。输入时,光标会在文件中移动,始终位于匹配文本的第一个字符上。^X S 用于向前增量搜索,^X R 用于向后增量搜索。

你可以在 .vilerc 文件中添加以下命令,使更常用的 / 和 ? 搜索命令也能实现增量搜索:

bind-key incremental-search /
bind-key reverse-incremental-search ?

“视觉匹配” 功能会高亮显示所有匹配表达式的出现位置。在 .vilerc 文件中添加 set visual - matches reverse ,可让 vile 使用反向视频进行视觉匹配。由于高亮显示有时可能会分散注意力,使用 = 命令可关闭当前的高亮显示,直到输入新的搜索模式。

左右滚动

在 vile 中,使用 :set nolinewrap 可启用左右滚动。与其他编辑器不同,左右滚动是默认设置。长行的左右边缘会用 < 和 > 标记。sideways 值控制左右滚动时屏幕移动的字符数,设置为 0 时,每次滚动屏幕移动三分之一;否则,屏幕按指定的字符数滚动。

Vile编辑器实用功能与特性全解析(续)

总结与操作流程回顾
  • 文本选择与操作 :通过双击或三击选择单词或行,右键扩展选择范围,中键粘贴,双击状态行清除选择。操作流程为:先确定选择方式(双击/三击/右键),再进行粘贴或清除操作。
  • 剪贴板操作 :使用 copy-to-clipboard paste-from-clipboard 命令,Sun 系统用户可在 .vilerc 文件添加键绑定。流程为:执行复制命令,再执行粘贴命令,若为 Sun 系统先设置键绑定。
  • 资源与菜单设置 :xvile 有控制外观行为的资源,菜单支持自定义,有三种菜单项类型。设置流程为:查看资源列表,编辑 .vilemenu 文件设置菜单项。
  • 构建 winvile :可编译临时补丁版本,源码提供不同编译器的 makefile。构建流程为:选择编译器,使用相应 makefile 进行编译。
  • winvile 基本外观和功能 :界面有滚动条,编辑 Unicode 数据有多种字体设置方式,菜单功能丰富。使用流程为:启动 winvile,根据需求设置字体,使用菜单进行操作。
  • 扩展正则表达式 :有多种特殊符号和功能,语法与 nvi 不同。使用流程为:根据需求选择合适符号,编写正则表达式。
  • 改进的编辑功能
    • 命令行历史和补全 :命令记录在 [History] 缓冲区,可召回编辑,有补全功能。操作流程为:使用命令行输入命令,利用上下键召回历史命令,使用 TAB 键补全。
    • 标签栈 :有相关命令和选项控制。使用流程为:先设置标签选项,再使用标签命令进行操作。
    • 无限撤销 :通过 undolimit 选项控制,有撤销和重做命令。操作流程为:设置撤销限制,使用撤销或重做命令。
    • 任意长度行和二进制数据处理 :可直接编辑,输入特定格式数据。操作流程为:打开文件,按格式输入数据。
    • 本地化支持 :不断发展以适应不同编码。使用流程为:启动编辑器,根据文件编码自动或手动调整设置。
    • 文件格式处理 :读取文件时检查并设置属性,写入时重建文件。操作流程为:读取文件,编辑器自动处理,写入时按设置重建。
    • 增量搜索 :使用 ^X S ^X R 命令,可设置常用搜索命令的增量搜索。操作流程为:使用搜索命令,根据需求设置增量搜索。
    • 左右滚动 :默认开启, sideways 控制滚动字符数。操作流程为:根据需求调整 sideways 值,进行左右滚动。
功能关联与流程图

下面通过 mermaid 格式的流程图来展示一些主要功能之间的关联:

graph LR
    A[文本选择] --> B[剪贴板操作]
    B --> C[文件编辑与保存]
    D[命令行操作] --> E[文件搜索与定位]
    E --> C
    F[标签栈操作] --> E
    G[撤销与重做] --> C
    H[本地化支持] --> C
    I[左右滚动] --> C

此流程图展示了文本选择后可进行剪贴板操作,最终用于文件编辑与保存;命令行操作可用于文件搜索与定位,标签栈操作也辅助文件搜索与定位;撤销与重做、本地化支持、左右滚动等功能都围绕着文件的编辑与保存展开。

常见问题与解决方案
  • 粘贴问题 :若无法将 xvile 中选择的文本粘贴到其他应用程序(反之亦然),可能是应用程序使用的是 CLIPBOARD 选择而非 PRIMARY 选择。解决方案是使用 xvile 的 copy-to-clipboard paste-from-clipboard 命令进行操作。
  • 字体显示问题 :当默认系统字体无法显示文件中的字符时,winvile 会显示十六进制值。解决方案是选择更合适的字体,或在 vile 中设置以十六进制形式查看宽字符的选项。
  • 搜索高亮干扰问题 :“视觉匹配” 功能的高亮显示可能会分散注意力。解决方案是使用 = 命令关闭当前的高亮显示,直到输入新的搜索模式。
高级应用场景与技巧
  • 批量文件处理 :结合标签栈和命令行补全功能,可快速定位和编辑多个文件。例如,先使用 tag 命令定位到相关文件,再通过命令行补全功能输入批量编辑命令。
  • 复杂文本处理 :利用扩展正则表达式和增量搜索功能,可高效处理复杂文本。如使用正则表达式进行文本替换,再通过增量搜索验证替换结果。
  • 多窗口操作 :结合文本选择的多窗口扩展功能和 winvile 的多窗格显示,可同时编辑和查看不同部分的文件内容,提高编辑效率。
总结

vile 编辑器具有丰富的功能和特性,从基础的文本选择、剪贴板操作到高级的扩展正则表达式、无限撤销等功能,都能满足不同用户的需求。其对本地化、文件格式的处理能力,以及在编辑功能上的不断改进,使其成为一款强大的文本编辑器。通过掌握这些功能和操作技巧,用户可以更高效地进行文件编辑和处理。同时,对于常见问题的解决方法和高级应用场景的探索,能进一步提升用户的使用体验和工作效率。无论是初学者还是有经验的开发者,都能在 vile 编辑器中找到适合自己的使用方式。

考虑柔性负荷的综合能源系统低碳经济优化调度【考虑碳交易机制】(Matlab代码实现)内容概要:本文围绕“考虑柔性负荷的综合能源系统低碳经济优化调度”展开,重点研究在碳交易机制下如何实现综合能源系统的低碳化经济性协同优化。通过构建包含风电、光伏、储能、柔性负荷等多种能源形式的系统模型,结合碳交易成本能源调度成本,提出优化调度策略,以降低碳排放并提升系统运行经济性。文中采用Matlab进行仿真代码实现,验证了所提模型在平衡能源供需、平抑可再生能源波动、引导柔性负荷参调度等方面的有效性,为低碳能源系统的设计运行提供了技术支撑。; 适合人群:具备一定电力系统、能源系统背景,熟悉Matlab编程,从事能源优化、低碳调度、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究碳交易机制对综合能源系统调度决策的影响;②实现柔性负荷在削峰填谷、促进可再生能源消纳中的作用;③掌握基于Matlab的能源系统建模优化求解方法;④为实际综合能源项目提供低碳经济调度方案参考。; 阅读建议:建议读者结合Matlab代码深入理解模型构建求解过程,重点关注目标函数设计、约束条件设置及碳交易成本的量化方式,可进一步扩展至多能互补、需求响应等场景进行二次开发仿真验证。
【顶级EI复现】【最新EI论文】低温环境下考虑电池寿命的微电网优化调度(Matlab代码实现)内容概要:本文介绍了名为《【顶级EI复现】【最新EI论文】低温环境下考虑电池寿命的微电网优化调度(Matlab代码实现)》的技术文档,重点围绕在低温环境下,结合电池寿命衰减因素对微电网系统进行优化调度的研究。该研究通过建立数学模型,综合考虑风光储、柴油、燃气等多种能源形式以及电网交互关系,利用Matlab编程实现优化算法(如内点法、多目标粒子群算法等),完成对微电网运行成本、能源效率电池使用寿命之间的多目标协同优化。文中强调了实际寒潮场景下的V2G调度数据应用,并提供了完整的仿真代码数据集支持,具有较强的工程复现价值。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事微电网、储能系统优化等相关领域的工程技术人员;尤其适合希望复现高水平EI论文成果的用户; 使用场景及目标:①用于低温环境下微电网能量管理系统的建模仿真;②支撑考虑电池老化机制的储能优化调度研究;③服务于学术论文复现、课题项目开发及智能电网优化算法验证; 阅读建议:建议结合提供的网盘资源(包括YALMIP工具包、完整代码数据集)进行实践操作,重点关注目标函数构建、约束条件设置及多目标优化求解过程,建议在Matlab环境中调试代码以深入理解算法实现细节系统响应特性
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值