Пошук і заміна
Знаходить текст у всій діаграмі, переводить вас до кожного збігу на полотні ERD і замінює один збіг або всі.
Пошук охоплює сім типів тексту: назви таблиць, коментарі таблиць, назви стовпців, коментарі стовпців, нотатки, назви індексів і назви груп таблиць — див. що охоплює пошук.
Пошук розташований угорі оглядача — панелі, закріпленої ліворуч від полотна ERD, — між смугою заголовка оглядача та його деревом. Власного заголовка він не має. Згори донизу він містить:
- Поле пошуку з трьома параметрами всередині, у його кінці, а перед ним — стрілку
Toggle Replace. - Рядок
Replace, спочатку згорнутий, — див. заміна. - Лічильник, далі стрілки вгору й униз, що переходять між збігами, і кнопку
Search Inіз трьома крапками. - Типи тексту, які розгортає кнопка
Search In.
Поки поле пошуку містить текст, дерево оглядача показує збіги — див. результати.
На невисокому полотні пошук зберігає всю свою висоту, а дерево під ним займає решту місця й прокручується.

Відкриття й закриття
Ctrl + F (Windows/Linux) або ⌘ + F (Mac), а також пункт Toggle Explorer у швидкому пошуку чи в контекстному меню полотна відкривають оглядач з активним пошуком. Текстовий курсор переходить у поле пошуку з виділеним текстом, а пошук за запитом виконується знову, і жоден збіг не є поточним.
Кнопка Explorer на панелі інструментів лише відкриває або закриває панель. Вона не ставить текстовий курсор у поле пошуку й залишає запит і поточний збіг без змін.
Коли сполучення клавіш лише повертає текстовий курсор в уже показаний оглядач, як це буває, поки відкрито швидкий пошук або одне з п’яти діалогових вікон із розділу діалогові вікна поруч з оглядачем, поточний збіг лишається поточним.
Закриття оглядача, те, що роблять сполучення клавіш і два пункти Toggle Explorer, поки він відкритий, а також діалогові вікна, які вони закривають, описано в розділі відкриття й закриття на сторінці оглядача.
У розділі коли оглядач приховується описано, як його приховують інша вкладка й режим дзен і як перегляд відмінностей, подорож у часі та попередній перегляд автоматичного розміщення приховують його й не дають йому відкритися. Розділ поруч із полотном описує редактор, надто вузький для оглядача.
Під час повторного відкриття зберігаються останній запит, а також текст заміни, параметри, увімкнені типи тексту і те, чи були розгорнуті рядок Replace і типи тексту.
Вони зберігаються, поки редактор відкритий, і не записуються в документ. У щойно відкритому редакторі всі параметри вимкнено, рядок Replace і типи тексту згорнуто, а ввімкнено лише чотири типи назв — див. що охоплює пошук.
Панель пошуку браузера
Поки фокус клавіатури в редакторі, Ctrl + F (Windows/Linux) або ⌘ + F (Mac) обробляє сам редактор на кожній вкладці, зокрема й у його власних текстових полях, тож панель пошуку браузера не відкривається.
Сполучення клавіш передається браузеру або хосту, поки відкрито перегляд відмінностей, подорож у часі чи попередній перегляд автоматичного розміщення, а також коли фокус перебуває поза редактором.
- Вебзастосунок і Google Drive: панель пошуку браузера відкривається лише в цих двох випадках.
- VS Code: розширення тримає вимкненим власний віджет пошуку VS Code в ERD Editor, тож там це сполучення клавіш ніколи його не відкриває.
- Obsidian: сполучення клавіш потрапляє до редактора щоразу, коли активна вкладка діаграми, замість команди
Search current fileв Obsidian. - IDE від JetBrains: якщо схема клавіш IDE залишає
Ctrl + F(Windows/Linux) або⌘ + F(Mac) за собою, відкрийте пошук через пунктToggle Explorerу швидкому пошуку чи в контекстному меню полотна або відкрийте оглядач кнопкоюExplorerна панелі інструментів і клацніть у полі пошуку.
Сторінка, що вбудовує редактор, може перепризначити це сполучення клавіш або прибрати його — див. зміна сполучення клавіш.
Що охоплює пошук
Сім кнопок вибирають типи тексту, у яких виконується пошук, у такому порядку: Table names, Table comments, Column names, Column comments, Memos, Index names і Table group names.
Спочатку вони згорнуті. Кнопка Search In у кінці рядка лічильника розгортає їх під цим рядком і знову згортає, а поки вони показуються, вона підсвічена.
Підсвічена кнопка типу тексту ввімкнена. Клацніть кнопку, щоб увімкнути чи вимкнути її, і пошук виконається знову. Якщо всі сім вимкнено, нічого не знаходиться.
Спочатку пошук відкривається з чотирма типами назв — Table names, Column names, Index names і Table group names, — тож перейменування не зачіпає коментарів і нотаток, якщо ви їх не ввімкнете.
Назви індексів — це назви індексів на вкладці Indexes вікна властивостей таблиці, а не ключі PK_ і UQ_, наведені над ними.
Більше ніде пошук не виконується: ні в типах даних, ні в типових значеннях, ні в стовпцях індексу, ні в назві бази даних, ні в схемі SQL з її скриптами Before tables і After tables, ні в згенерованому коді.
Коментар, прихований параметром відображення таблиці, однаково охоплюється пошуком. Нотатки, приховані через View Option → Memos, і групи таблиць, приховані через View Option → Table Groups, не охоплюються, навіть якщо їхню кнопку ввімкнено, тож Replace All ніколи не переписує нотатку й не перейменовує групу, якої ви не бачите.
Параметри
Три перемикачі всередині поля пошуку, у його кінці, змінюють те, як запит знаходить збіги. Їхні назви показано в підказках, а ввімкнені перемикачі підсвічуються. Спочатку всі три вимкнено, а зміна будь-якого з них знову запускає пошук.
Match Case: коли його вимкнено, збіги шукаються без урахування регістру.Match Whole Word: збіг зараховується лише там, де він з жодного боку не зливається зі словом. Символами слова вважаються літери, цифри й діакритичні знаки будь-якої писемності, а також підкреслення. Тому запитuserзнаходить збіг уuser idіuser.id, але не всерединіusers,user_idчиsuperuser. Кінцю запиту, який сам не є символом слова, як-от крапці в.id, межа там не потрібна.Use Regular Expression: запит є регулярним виразом JavaScript, завжди в режимі Unicode, тож\p{L}працює.^і$збігаються з початком і кінцем кожного рядка багаторядкового коментаря чи нотатки, а.не переходить через розрив рядка. Екранування, які часто вводять у назвах, як-от\_і\-, приймаються.
Регулярний вираз, який не вдається розібрати, як-от user(, нічого не знаходить: лічильник показує червоним Invalid regular expression, а поле пошуку обводиться червоним.
Match Case і Match Whole Word діють і на регулярний вираз. Збіг нульової довжини, як-от окремий ^, ніколи не потрапляє до списку.
Звичайний текст шукається під час введення. Пошук за регулярним виразом виконується, щойно введення призупиняється, або одразу, коли ви натискаєте Enter, кнопку переходу, Replace чи Replace All або вибираєте рядок, що містить збіг.
Пошук не має обмеження в часі, тож через регулярний вираз з інтенсивним поверненням (backtracking) редактор може не реагувати, доки пошук не завершиться.
Четвертий перемикач, Preserve Case, розташований усередині поля Replace, у його кінці, тож він показується лише тоді, коли рядок Replace розгорнуто. Спочатку його вимкнено. Він не змінює того, що знаходиться, а лише те, як Replace і Replace All записують заміну, — див. заміна. Його ввімкнення чи вимкнення не запускає пошуку, і поточний збіг лишається поточним.
Результати
Лічильник на початку рядка під полями показує, де ви перебуваєте. Поки поле пошуку порожнє, він теж порожній.
| Лічильник | Коли |
|---|---|
No results | Збігів немає. |
12 matches | Поки ви не перейшли до жодного з них; 1 match, якщо збіг один. |
3 of 12 | Поточним є третій збіг. |
Invalid regular expression | Регулярний вираз не вдається розібрати. |
Replaced 12 matches | Через Replace All змінено стільки збігів; Replaced 1 match, якщо збіг один. |
No changes | Через Replace All нічого не змінено. |
No more matches | Серія натискань Replace повернулася туди, звідки почалася, — див. заміна. |
Replaced …, No changes і No more matches поступаються місцем лічильнику під час наступного пошуку чи переходу, зокрема пошуку, який запускає зміна або відміна.
Поки поле пошуку містить текст, дерево оглядача показує результати замість усієї діаграми: лише рядки, що містять збіг, і рядки над ними. Коли збігів немає або регулярний вираз не вдається розібрати, воно порожнє. Видалення запиту повертає все дерево, згорнуте так, як було раніше.
Tables,Table GroupsіMemosпоказуються, лише коли містять збіг, а лічильник біля кожної папки — це кількість рядків безпосередньо під нею в результатах.- Під
Tablesідуть таблиці, що містять збіг, упорядковані за назвою. Під кожною таблицею йдуть рядок для кожного збігу в її коментарі, далі папкаColumnsзі стовпцями, що містять збіг, у порядку стовпців, кожен із рядком для кожного збігу в його коментарі, далі папкаIndexesз індексами, назва яких збігається. ПапкиForeign Keysнемає. - Під
Table Groupsідуть групи, назва яких збігається, упорядковані за назвою, без своїх таблиць. Знайдена таблиця показується підTables. - Під
Memosідуть нотатки, що містять збіг, у порядку документа, кожна показана своїм першим рядком і має рядок для кожного збігу в ній.
Збіг у назві підсвічується в рядку самої назви, тож назва, що містить запит двічі, — це один рядок із двома підсвічуваннями.
Збіг у коментарі чи нотатці має власний рядок: значок хмаринки діалогу для коментаря таблиці чи стовпця або значок стікера для нотатки, а далі уривок тексту з підсвіченим збігом. Довгий текст обрізається символом …, а розриви рядків показуються як пробіли. Наведіть вказівник на рядок, щоб побачити весь текст.
Кожен інший рядок має такий самий вигляд, як і поза пошуком: стовпець показує свій тип даних, індекс — свої стовпці, а порожня назва показується як unnamed.
Коли пошук починається, кожен рядок, під яким є інші рядки, показується розгорнутим. Рядок, який ви згорнули або який згорнула кнопка Collapse All, лишається згорнутим, доки поточним не стане збіг під ним, доки не зміниться запит, Match Case, Match Whole Word, Use Regular Expression чи тип тексту або доки пошук не буде знову відкрито сполученням клавіш чи пунктом Toggle Explorer.
Рядок поточного збігу підсвічується й прокручується в поле зору. Дерево перелічує всі збіги, хоч скільки б їх було.
Перехід між збігами відбувається в порядку дерева: таблиця за таблицею — назва таблиці, її коментар, назва й коментар кожного її стовпця в порядку стовпців і назви її індексів; далі назви груп таблиць; далі нотатки.
Поки оглядач показується, результати стежать за документом. Щойно в редагуванні настає пауза, будь-яка зміна в текстах, де виконується пошук, запускає пошук знову, а поточний збіг лишається поточним, якщо він досі існує. Це стосується редагування назви, коментаря чи тексту нотатки, додавання або видалення таблиці, стовпця, індексу, нотатки чи групи таблиць, переміщення стовпця, а також приховування чи показу нотаток або груп таблиць через параметри відображення, що прибирає їхні збіги з дерева або повертає їх. Враховуються зміни на полотні, відміна чи повторення, імпорт, а також зміни від співавтора чи агента для програмування. Виділення, переміщення таблиць, нотаток чи груп на полотні, прокручування, масштабування й наведення вказівника не враховуються.
Зміни, зроблені, поки оглядач закритий або прихований, охоплюються пошуком, щойно він знову показується.
Перехід до збігу
Enter у полі пошуку переходить до наступного збігу, а Shift + Enter — до попереднього. Кнопки зі стрілками вгору й униз після лічильника роблять те саме; їхні підказки — Previous Match (Shift+Enter) і Next Match (Enter), а поки збігів немає, вони неактивні.
Перехід циклічний: після останнього збігу йде перший, а перед першим — останній. Доки ви вперше не перейдете, жоден збіг не є поточним, тож перше натискання Enter переходить до першого збігу, а перше натискання Shift + Enter — до останнього.
Клацання рядка в результатах або натискання Enter чи Space, коли на ньому фокус клавіатури, робить одне з такого:
- Рядок, власна назва якого містить збіг, переходить до першого збігу в цій назві.
- Рядок, що показує уривок коментаря чи нотатки, переходить до цього збігу.
- Будь-який інший рядок, як-от таблиця, назва якої не збігається, або власний рядок нотатки, переходить до того, що він позначає, і залишає поточний збіг без змін — див. перехід до рядка.
- Папка згортається або розгортається.
Щойно збіг стає поточним, дерево розгортає всі згорнуті рядки над ним і переносить туди фокус клавіатури, тож клавіші зі стрілками в дереві продовжують рух від нього.
Перехід до збігу закриває вікно властивостей таблиці, якщо його відкрито, а потім:
- Для назви чи коментаря таблиці або назви чи коментаря стовпця він виділяє лише цю таблицю, виводить її на передній план і переводить фокус на клітинку, що містить збіг. Збіг у коментарі, прихованому параметром відображення таблиці, натомість переводить фокус на назву поруч із ним.
- Для назви індексу він виділяє лише таблицю цього індексу й виводить її на передній план, переводячи фокус на назву таблиці, якщо клітинка у фокусі ще не в цій таблиці. Назви індексів на полотні не відображаються.
- Для назви групи таблиць він виділяє лише цю групу й виводить її на передній план разом з її таблицями.
- Для нотатки він виділяє лише цю нотатку й виводить її на передній план.
Полотно прокручується, лише коли те, до чого веде перехід, ще не видно як слід, а масштаб ніколи не змінюється — див. куди веде перехід.
Після натискання Enter у полі пошуку текстовий курсор лишається там, а після вибору рядка фокус клавіатури лишається в дереві, тож те, що ви вводите далі, не потрапляє до виділеної таблиці.
Перехід до збігу ніколи не починає й не завершує малювання зв’язку.
Заміна
Спочатку рядок Replace згорнуто. Стрілка перед полем пошуку з підказкою Toggle Replace розгортає й згортає його. Згортання зберігає текст заміни.
Рядок містить поле Replace з перемикачем Preserve Case усередині, у його кінці, і дві кнопки з підказками Replace (Enter) і Replace All. Поки збігів немає, обидві кнопки неактивні.
Replace спрацьовує від натискання Enter у полі заміни, з Shift або без нього, або від своєї кнопки:
- Якщо поточного збігу немає, перше натискання лише переходить до наступного збігу, тож ви бачите, що буде змінено, ще до будь-якої зміни.
- Якщо є поточний збіг, натискання замінює саме це входження, залишаючи інші входження в тому самому тексті, і переходить до наступного збігу після записаного тексту. Записаний текст пропускається, навіть якщо він містить запит: після заміни
userнаsuper_userперехід не зупиняється всерединіsuper_user. - Збіг, який заміна записала б точно таким, яким він був, залишається без змін, а натискання лише переходить до наступного збігу.
- Заміна й прокручування до наступного збігу є одним кроком відміни.
Серія натискань Replace зупиняється, щойно доходить туди, звідки почалася. Лічильник показує No more matches, поточного збігу немає, а подальші натискання нічого не замінюють.
Тому під час заміни Customer на Big Customer текст замінюється один раз, а не розростається до Big Big Customer.
Нову серію починають перехід до збігу, зміна запиту, Match Case, Match Whole Word, Use Regular Expression чи типу тексту, відкриття пошуку сполученням клавіш або пунктом Toggle Explorer, а також Replace All, і так само її починає відміна чи будь-яка інша зміна тексту, у якому почалася серія. Зміна тексту заміни чи Preserve Case нової серії не починає, як і сполучення клавіш, коли воно лише повертає текстовий курсор в уже показаний оглядач.
Поки триває серія, перейменована нею таблиця чи група таблиць зберігає своє місце в дереві й у порядку збігів, тож якщо після перейменування вона мала б опинитися далі в сортуванні, серія не натрапляє на неї знову. Наступна серія відновлює в дереві порядок за назвою, і перейменований рядок переміщується на нове місце.
Replace All спрацьовує від Ctrl + Enter (Windows/Linux) або ⌘ + Enter (Mac) у полі заміни або від своєї кнопки:
- Замінює кожен збіг в увімкнених типах тексту й не зачіпає інших типів. З типами, увімкненими за замовчуванням, перейменовує таблиці, стовпці, індекси й групи таблиць, а коментарі й нотатки лишаються незмінними.
- Усе, що змінюється, є одним кроком відміни — див. один жест — один крок.
- Лічильник показує
Replaced N matches, враховуючи лише входження, текст яких справді змінився. Якщо такого немає, він показуєNo changes, і в історії змін нічого не записується, як-от під час заміни регулярного виразу(user)на$1. - Потім пошук виконується знову, без поточного збігу, тож результати можуть містити збіги, які є в новому тексті.
Обидві дії зчитують кожен текст таким, яким він є в момент натискання, а не таким, яким його знайшов останній пошук.
Як використовується текст заміни:
- Без
Use Regular Expressionсимвол$не має особливого значення, а текст заміни використовується так, як його введено, за винятком регістру, який надає йомуPreserve Case. - З
Use Regular Expressionшаблони від$1до$99,$<name>,$&,$`,$'і$$розгортаються так само, як у методі JavaScriptString.prototype.replace. - Без
Preserve Caseрегістр знайденого тексту не переноситься: колиMatch Caseвимкнено, замінаuserнаmemberперетворюєUsersнаmembers. - З
Preserve Caseрегістр кожної заміни підбирається за текстом, який вона замінює, після розгортання$1та решти шаблонів, тож та сама заміна перетворюєUsersнаMembers:- Збіг повністю у верхньому регістрі отримує заміну повністю у верхньому регістрі, а збіг повністю в нижньому регістрі — повністю в нижньому:
USERіз заміноюaccountдаєACCOUNT, аuserіз заміноюAccountдаєaccount. - Будь-який інший збіг надає першому символу заміни регістр першого символу збігу, а решту залишає такою, як введено:
UserIdіз заміноюaccountKeyдаєAccountKey, аuSERіз заміноюAccountKeyдаєaccountKey. Коли перший символ збігу не має регістру, заміна залишається такою, як введено:_Abіз заміноюxyzдаєxyz. - Коли і збіг, і заміна містять
-або обидва містять_і цей роздільник ділить їх на однакову кількість частин, регістр кожної частини підбирається за відповідною частиною збігу:USER_idіз заміноюaccount_keyдаєACCOUNT_key, аUser-Nameіз заміноюaccount-keyдаєAccount-Key. Коли так їх ділять і-, і_, регістр підбирається для всього тексту як для одного цілого. - Збіг без літер, що мають регістр, як-от
123, залишає заміну такою, як введено. - Збіг, записаний назад без змін, не враховується: коли
Match Caseвимкнено, замінаcustomerнаCustomerзаписуєcustomer,CustomerіCUSTOMERтакими, якими вони були, і жоден із них не враховується.
- Збіг повністю у верхньому регістрі отримує заміну повністю у верхньому регістрі, а збіг повністю в нижньому регістрі — повністю в нижньому:
- Порожнє поле заміни видаляє збіг.
Заміна — це звичайна зміна, така сама, як коли ви самі вводите нову назву таблиці, коментар, назву стовпця чи текст нотатки, перейменовуєте індекс у вікні властивостей таблиці або перейменовуєте групу таблиць.
Вона записується в історію змін і доходить до співавторів та агента для програмування, як і будь-яка інша зміна.
Клавіші в полях пошуку
- У полі пошуку
Enterпереходить до наступного збігу, аShift + Enter— до попереднього. - У полі заміни
Enterзамінює, зShiftабо без нього, аCtrl + Enter(Windows/Linux) або⌘ + Enter(Mac) замінює все. - Поки метод введення складає символ у будь-якому з полів,
Enterналежить складанню символу й не виконує ні переходу, ні заміни.
Що в цих полях роблять Escape, сполучення клавіш редактора, які й надалі працюють, і всі інші клавіші, описано в розділі клавіші в оглядачі.
Режим лише для читання
У редакторі з атрибутом readonly пошук лише знаходить. Немає ні стрілки Toggle Replace, ні рядка Replace, а отже, ні поля заміни, ні Preserve Case, ні Replace, ні Replace All.
Поле пошуку, три його параметри, типи тексту, лічильник, результати й перехід до збігу працюють. Оглядач навколо пошуку працює так само, як у будь-якому іншому редакторі, — див. режим лише для читання.
У VS Code ревізія діаграми, як-от ревізія Git або запис Local History, відкривається як текст JSON. Після повторного відкриття як діаграми через Reopen Editor With... вона доступна лише для читання й отримує цей пошук без заміни.
Зміна сполучення клавіш
Сторінка, що вбудовує редактор, може за допомогою методу setKeyBindingMap перепризначити сполучення Ctrl + F (Windows/Linux) або ⌘ + F (Mac) під назвою findReplace чи прибрати його.
Якщо його прибрано, це сполучення на кожній вкладці залишається за сторінкою. Кнопка Explorer на панелі інструментів і далі відкриває й закриває оглядач, а пункт Toggle Explorer у швидкому пошуку та в контекстному меню полотна і далі відкриває пошук або закриває оглядач, але жоден із них не показує сполучення клавіш, тож підказка кнопки — просто Explorer. Рядок Toggle Explorer на вкладці сполучень клавіш у налаштуваннях теж не показує жодної клавіші. Після перепризначення всі вони показують нове сполучення.