bbedit - как изменить несколько строк в заголовок? - PullRequest
2 голосов
/ 04 марта 2020

В bbedit есть функция, в которой вы выбираете текст, выбираете текст-> изменить регистр-> сделать регистр заголовка из меню, и он будет действовать соответственно.

Есть ли способ выбрать несколько строк текст между файлами в вашем проекте, а затем применить тот же формат текста?

Я знаю, что вы можете сделать некоторые регулярные выражения и изменить его, но ни один из них не является истинным случаем заголовка, где игнорируются такие слова, как "of" " и "" the "et c. Случай с заголовком работает отлично, мне просто нужно сделать это для многих элементов.

Например, у 5 html файлов есть <h2>THIS IS THE TITLE</h2> -так теперь я go для каждого файла выбираю текст и делаю выше пункт меню. Это хорошо, если есть 5, но если есть 2500, которые я хочу сделать <h2>This is the Title</h2> - тогда мне нужно иметь возможность выбрать более одного за раз ....

Заранее спасибо!

------ edits

Так что, если вы искали в нескольких файлах все ваши теги <h2>, и вы получили несколько разных файлов .....

<h2>MY TITLE</h2>
<h2>this is a title</h2>
<h2>Another title</h2>

В случае названия каждый из них изменится соответственно:

<h2>My Title</h2>
<h2>This is a Title</h2>
<h2>Another Title</h2>

В настоящее время вы выбираете каждый из них по отдельности, чтобы сделать это через меню. Мы хотели бы сделать это с помощью поиска и изменения регистра, если это имеет смысл ....

F: <h2>(.*?)</h2> R: <h2>\1</h2> [сделать это конкретным случаем]

Спасибо.

1 Ответ

1 голос
/ 05 марта 2020

Практически любая операция, которая включает в себя повторение в BBEdit, может быть автоматизирована с помощью AppleScript. : -)

Вот текст скрипта AppleScript, который выполнит описанную вами операцию. Вы можете скопировать и вставить его в редактор AppleScript и сохранить его в папке BBEdit «Сценарии» для дальнейшего использования при необходимости.

use AppleScript version "2.4" -- Yosemite (10.10) or later
use scripting additions

tell application "BBEdit"

    --  make sure we start at the top, because searches will (by default) proceed from the end of the selection range.
    tell text of document 1 to select insertion point before first character

    repeat
        tell text of document 1
            -- Find matches for a string inside of heading tags (any level)
            -- NOTE extra backslashes in the search pattern to keep AppleScript happy
            set aSearchResult to find "(<(h\\d)>)(.+?)(</\\2>)" options {search mode:grep}
        end tell

        if (not found of aSearchResult) then
            exit repeat -- we're done
        end if

        -- the opening tag is the first capture group. We'll use this below
        set openingTagText to grep substitution of "\\1"

        -- the title is the third capture group
        set titleText to grep substitution of "\\3"

        -- use "change case" to titlecase the title
        set changedTitleText to change case (titleText as string) making title case

        -- select the range of text containing the title, so that we can replace it

        set rangeStart to (characterOffset of found object of aSearchResult) + (length of openingTagText)
        set rangeEnd to (rangeStart + (length of changedTitleText) - 1)

        select (characters rangeStart through rangeEnd of text of document 1)

        -- replace the range
        set text of selection to changedTitleText
        --      select found object of aSearchResult
    end repeat

    --  put the insertion point back at the top, because it's a nice thing to do
    tell text of document 1 to select insertion point before first character

end tell
...