Gandi 3.0文档
官网 打开编辑器
文档/更快地写积木

查找替换(Ctrl + H)

把作品里重复的东西成批改掉:所有的 10 换成 15、所有的「你好」换成「Hi」、所有的 移动 (10) 步 换成 在 (1) 秒内滑行到 x: (10) y: (0)。跨角色、跨场景,没打开过的角色 照样改得到,整次替换按一次 Ctrl + Z 全部回去。

查找替换面板

面板是两行输入加一张结果表:上面一动,下面立刻跟着变,没有「查找」按钮。Esc 或标题栏 上的 × 关掉。

它是一扇窗,不是弹窗。 没有遮罩,点外面不关,开着的时候工作区照常能点、能拖、能换角色; 按住标题栏可以把它搬到顺手的地方,下次开还在那儿。默认贴在积木区左上角 —— 离积木栏近,从 那儿拖一块进来路最短。空着的时候只有输入那几行那么高,有结果才往下长。

手里拖着积木经过它的时候,窗口的底色会让出来,手里那块积木隔着窗看得见;字和格子仍然是实 的,要放进哪一格一目了然。

打开方式#

入口 打开时的样子
Ctrl + H 空面板,范围停在「当前角色」
Ctrl + F 搜索面板右上角的「替换」 把搜索框里的词带过来当「找什么」
右键积木上的一个值 →「把所有「10」换成…」 「找什么」已填好,只在这一类里找,并且是整值匹配
右键一块积木 →「替换所有这样的积木…」 「找什么」已经放好那块积木

键位在设置里能改,见快捷键。

右键一个数字槽

怎么用#

「找什么」一格里既能打字,也能放一块真积木。 打了字就是找积木上填的值,放进积木就是 找积木,一块换一块。面板上没有「用哪一种」这个选择,它由这一格里放的东西决定。

打进去的词像某块积木的名字(「如果」「重复执行」)、而按值一处都没找到时,这一格直接按那块 积木查找。结果区写明「值里没有「如果」,当成积木找的」,旁边一句「只按值找」退得回来。先按值 找过一遍才切,所以本来能找到的值不会被抢走。

输入位里打的字留着,接着打就重新认一遍。底下列出的是其他对得上的积木,现在用的那块描着边, 点另一块就换过去。匹配和全局搜索是同一套,拼音和缩写都认:打 rg 也 能找到「如果 ◇ 那么」。

打「如果」和「重复执行」,两格都自己认成了积木

「换成」那一格同理:左边是积木时,右边打「重复执行」就认成那块积木,「替换」随即亮起来。 打的是一整句就走快速造句那套解析,句子里写的数字算数 —— 打「移动 25 步」 换进去的是 25,不是积木栏模板里的 10。

  1. 在「找什么」里打字,或者放一块积木进去。结果立刻列出来。
  2. 需要的话调「范围」和后面那排筛选。
  3. 在「换成」里填上要换成什么,每条结果就多出一块「改完的样子」。
  4. 不想改的那几条把勾去掉,点右下角的「替换 N 处」。
只填「找什么」时是一个查找工具

「换成」空着时,面板就是一个查找工具:只列出命中,点一行跳到那块积木跟前,替换按钮 灰着并在旁边写明「先填「换成」」。

列表按角色 · 代码页分组,组头右边写着这一组有几处。底栏左边是总数(N 处 · M 个角色), 右边是替换按钮。回车等于点替换按钮。

结果是边打边出的:手停下约 0.2 秒才真去找一遍,中途的每一次输入都会把上一次顶掉,所以连 着打一串字只查最后那一次。正在查的时候结果区顶上有一条细进度线,旧结果留在原地变淡。

找值#

「找什么」里打的是字面的字,. * ( 没有特殊意思。找的是积木上填的值:数字槽、 文字槽、下拉里选中的那一项、注释里的字。

在哪找#

条件那一行上的四颗按钮控制找哪几类,可以同时开几类,也可以只开一类:

类别 找的是 例子
数字 数字槽 移动 (10) 步 里的 10
文字 文字槽 说 [你好] 里的「你好」
下拉选项 下拉里选中的那一项 将旋转方式设为 [左右翻转]
注释 注释里的文字

只开「数字」是最常用的一种:一个叫「关卡10」的角色、一句「第 10 关」的台词都不会被 卷进来。

后面两颗小按钮是两个开关:

  • Aa —— 区分大小写,只影响英文。
  • 全字 —— 整个值等于「找什么」才算。不勾的话 100 里也含着 10,会被改成 150。

下拉的候选值#

命中的全是同一个下拉时,「换成」底下会列出这个下拉的全部合法值,点一个就填上。手打一 个不在选项里的值,那几条会被标成不改,并写明原因。

下拉存的是积木内部的值,不是画在积木上的那几个字:将旋转方式设为 [左右翻转] 存的是 left-right。所以这一类通常先找到一处,再从候选值里挑要换成哪个。

找积木#

往「找什么」里放一块积木,面板就换成一块换一块。

「找什么」记住了 ①,「换成」引用它

怎么把积木放进去#

方式 怎么走
吸一块 点输入格右边的吸管,再点工作区里的积木
拖进来 从积木栏或者工作区直接把积木拖进这一格松手
打名字 打「如果」:值里没有这个词就直接按这块积木找,底下列出其他候选
打一句话 「换成」那一格里打「移动 25 步」,走快速造句那套解析

吸管按下去之后面板会让开,工作区整个露出来,顶上写着现在该做什么,Esc 取消。

吸一块积木时面板让开

一格里只放一块:拖进去的积木下半截接着什么、肚子里有什么,放进来时就摘掉了。那些东西 不参与匹配,替换的时候会从被换掉的那块身上原样接回去。

匹配的是什么#

按积木本身(哪一种积木)加上这一格里每个槽的状态。槽点一下换一种:

状态 画出来 意思
就这个值 (10) 必须正好是 10。默认,所见即所得
任意 (任意) 这个槽填什么都算
任意 ① (任意①) 填什么都算,并且记住,「换成」那边能引用

积木上的槽有两个以上时,下面会多出一行「全设为任意」,一下把所有槽放开。

槽里插着一块报告块(比如 移动 ((x坐标)) 步 里的 x坐标)时,那一格整个算一个槽, 上面盖着一张牌子写明它现在算什么,默认是「任意积木」:这一格必须插着积木,是哪块不管。它 同样可以被记住,记的是整块。

记住一个值,换到新积木上#

任意① 记住的东西两种都认:槽里填着 10 就记住 10,槽里插着 x坐标 就记住整块 x坐标。「换成」那边的槽也有三种状态:填死的值(画着什么就填什么)、引用 ①(把 记住的搬过来)、留空(用积木自带的默认值)。

上面那张图里,移动 (任意①) 步 换成 在 (1) 秒内滑行到 x: (①) y: (0),移动 10 步 和 移动 25 步 各自把自己的数搬进了新积木的 x。

形状对不上就不让换#

堆叠块只能换堆叠块,报告块只能换报告块,布尔块、帽子块同理:形状不一样的话,新积木接不进 旧积木待的那个位置。面板会把原因贴在结果区顶上,并且把替换按钮按灰、在按钮旁边写上同一句 话。

形状对不上

会丢掉什么,先写出来#

新积木的槽比旧的少、肚子少一个、或者它下面接不了东西时,旧积木身上那些内容无处安放。每一 条都写在那一行的右边:

会丢掉肚子里的积木

会写出来的有这几种:

写的 什么时候
插在槽里的 N 块积木 旧积木某一格里插着报告块,而新积木没接住它
肚子里的 N 块积木 旧积木是 C 形的,新积木没有对应的肚子
下面接着的 N 块积木 新积木是终止块(下面接不了东西)
填着的值 (9) (5) 新积木的格子比旧的少

丢掉的东西不会被挪到别处,否则工作区角落会多出一堆认不出来历的积木。

反过来,接得住的一定接回去:新积木也是 C 形的,肚子原样搬过来;新积木下面接得了东西, 那一串也照旧接着。

自制积木不在这一层#

自制积木的调用(我的积木 那些)不参与积木替换:换掉它的名字是改定义,不是替换。面板 会拦下来并给出去处:右键那块积木 →「编辑」改定义,所有调用会跟着变,见 自制积木、全局自制积木。

范围#

条件那一行最左边的下拉,四档:

本代码页 | 当前角色 | 当前场景 | 整个作品

默认是当前角色。范围选小了再点一次就行,选大了要靠撤销挽回,两边的代价并不对称。

  • 本代码页:只在这个角色当前打开的那一页里找,见积木页。
  • 当前场景 / 整个作品:多场景作品里这两者不同,见多场景。
整个作品,跨 58 个角色

上面这次替换跨了 58 个角色,其中绝大多数从头到尾没有被打开过,它们的积木只存在于作品数据 里,连工作区都没有,一样被改到了。

只换其中几处#

  • 去掉某几条的勾,剩下的一起换。
  • 只换一处:指针停在那一行上,行尾会出现一颗「替换」按钮。

一步撤销#

一次「替换 N 处」改了多少处、跨了多少个角色,都算一步。在哪个角色里按 Ctrl + Z 都是整次回去,不会只回来一半。再按 Ctrl + Shift + Z 重做。

行尾那颗「替换」逐条换的话,每点一次算一步。

替换完成后的提示#

一条通知:「替换了 146 处,跨 58 个角色」。有没改的还会跟一句「N 处跳过了(见列表)」,每 一条为什么不改都写在列表那一行的右边;整批都不动而且原因是同一句时,那句话贴在结果区顶上 说一遍。没有不出声的跳过。

跳过的有这么几种:

为什么 列表里写的
那是个名字,不是值 这是变量名,改名请用「重命名」
注释里嵌着积木 这条注释里嵌着积木,不动它
换成的值不在这个下拉的选项里 「X」不是这个下拉里的选项
两块积木形状对不上 这两块形状不一样(堆叠块 → 报告块),接不上
新积木用到的变量这个角色里没有 这个角色里没有「血量」
那段脚本几千块接成一串 这段脚本太长,暂时换不了
自己去掉了勾 ——
一次列不下(超过 400 条) 列表末尾写着还有几处,那些不会被改

改名不是替换#

变量、列表、广播、造型、声音、角色、自制积木的参数,积木上存的是它们的名字。改名有专 门的入口,会把所有引用一起改;用替换去改其中一处,只会把这一处指到一个不存在的名字上。

所以这些一律不改,面板会写明原因:

撞上改名

变量、列表、广播能直接点「去重命名」,它会切到那个角色,打开改名框。造型、声音、角色名在 角色栏里右键它们改。

作品正在运行时#

正在跑的线程指着要被换掉的那些积木,所以先问一句:

作品正在运行

细节#

  • 匹配跑在作品数据上,不依赖画出来的积木,所以「整个作品」也快:129 个角色的大作品里, 一边打字一边找,连着敲七下只会真查一次,没有一次卡顿超过 50 毫秒。
  • 面板不挡编辑器:开着的时候可以继续拖积木、切角色,吸管和拖放都靠这一点。
  • 值替换的「找什么」里打的是字面的字,正则还没有。
  • 积木建议只按积木上写死的那些字匹配,槽里的默认值不算:打「10」不会冒出一排 「移动 (10) 步」。单个字母也不给建议,那会匹配掉一大半积木。最多给 5 条。
  • 一句话既像积木名又拼得成一句时以句子为准 —— 句子认得里面写的数字,按名字挑出来的 那块只带模板默认值。
  • 自动认只在按值一处都没找到时发生。值有命中就照常列值,积木建议留在输入位底下等着点。
  • 积木替换只看积木本身和这一格里画出来的那些槽。下半截接了什么、肚子里有什么都不参与。
  • 颜色不参与替换,那是取色器的事。
  • 结果一次最多列 400 条。再多就把范围缩小,或者改完再来一次。
  • 没有任何积木工作区打开时(积木面板被关掉了)也能替换,但那一次撤不回来,面板会先提醒 一句。
  • 成串的积木、或者整段写法的替换,目前还不支持。

相关#