#sublime_text #sublime_text_3
Как выделить текст между двумя парными "кавычками" в Sublime Text 3? Есть горячие клавиши, но там присутствует только метод выделения текста между скобками (brackets) или парными тегами. Изменение стандартной комбинации на свою не помогает: { "keys": ["ctrl+shift+m"], "command": "expand_selection", "args": {"to": "brackets"} }
Ответы
Ответ 1
Попробуйте комбинацию Ctrl+Shift+Space - для некоторых форматов файлов она выделяет текст как раз внутри "кавычек". Точно работает в .scss, .html, а также в .slim для значений атрибутов тегов.Ответ 2
0. Не рекомендуется 1. Expand Selection to Scope Встроенное в Sublime Text средство выделения, упомянутое в ответе ув-мого Виталия Емельянцева. 1. Демонстрация Во всех примерах выделяется текст не только между кавычек, но и сами кавычки. 2. Ожидаемое поведение мне не удалось найти документации по команде expand_selection с аргументом {"to": "scope"}, но, исходя из названия и некоторых характеристик поведения, должен выделяться весь текст рядом с кареткой, имеющий ту же scope, что и символ перед кареткой. Scope в Sublime Text могут быть достаточно длинными, например: text.html.basic source.js.embedded.html meta.delimiter.comma.js, text.html.basic source.js.embedded.html meta.function.declaration.js punctuation.separator.parameter.function.js. Expand Selection To Scope должно выделить сначала text.html.basic source.js.embedded.html meta.delimiter.comma.js, text.html.basic source.js.embedded.html meta.function.declaration.js punctuation.separator.parameter.function.js, затем, если рядом есть такая область видимости, — text.html.basic source.js.embedded.html meta.delimiter.comma.js, text.html.basic source.js.embedded.html meta.function.declaration.js, потом text.html.basic source.js.embedded.html meta.delimiter.comma.js, text.html.basic source.js.embedded.html и т. д. В первом примере на демо кавычки в синтаксисе для Suricate имеют ту же область видимости, что и текст меж ними; во втором — кавычки включены в комментарий, поэтому выделяется комментарий, а не текст между кавычками. Это ожидаемое поведение. Команда expand_selection с аргументом {"to": "scope"} и должна выделять текст по scopes, а не делимитерам. Кавычки в различных синтаксисах имеют собственные области видимости далеко не всегда, поэтому когда работаете с различными синтаксисами, лучше не пользоваться ей для выделения текста между кавычками. 3. Актуальное поведение Судя по последним двум выделениям на демо Expand Selection to Scope имеет баги, воспроизводящиеся на «чистом» Sublime Text без плагинов и пользовательских настроек. В третьем и четвёртом примерах по идее должен выделяться текст между кавычек. В третьем expand_selection {"to": "scope"} выделяет кавычки во встроенном в HTML скрипте, в четвёртом на синтаксисе пакета PackageDev вообще предлагает крайне нерелевантные выделения. 2. Keyboard Selection 1. Демонстрация 2. Описание Данный плагин позволяет выделять текст между различными типами кавычек, скобок и между различными делимитерами. Только, как видно из GIF, он выделяет текст между одинарной кавычкой — ' и двойной — "; между угловой скобкой — < и квадратной — ]. Плагин не сопоставляет типы кавычек и скобок. Также я не понимаю, зачем на практике может понадобиться выделение между различными делимитерами. Остальные команды плагина во многом идентичны дефолтным командам Sublime Text, в Windows запускающимися шорткатами Ctrl+Left/Right, Alt+Left/Right и Ctrl+Delete. В целом не вижу, зачем может пригодиться Keyboard Selection. 1. Плагины специально для выделения текста между кавычками В книге «Sublime Text Power User» упомянуты 2 плагина, отвечающие на данный вопрос: Select Quoted и Expand Selection To Quotes. 1. SelectQuoted При нажатии шортката — Ctrl+' по умолчанию в Windows — выделяется сначала текст между кавычек, затем вместе с кавычками, → но потом выделение останавливается. Вторая команда с аргументом "args": {"inside": false} — Ctrl+Shift+' по умолчанию в Windows — у меня не работает вообще. 2. Expand Selection To Quotes При нажатии шортката — Ctrl+' по умолчанию в Windows — выделяется сначала текст между кавычек, затем вместе с кавычками → потом между следующими кавычками и т. д. 2. Универсальные решения Текст между определёнными делимитерами выделяет и Bracketeer. Однако он не включён в данный обзор, поскольку из описаний автора плагина — ув-мого Colinta — по крайней мере лично мне проблематично понимать, для чего нужны его плагины и как они работают. Если хотите попробовать — упреждаю, что из приведённого в качестве примера кеймапа ничего не будет функционировать. 1. ExpandRegion 1. Демонстрация 2. Описание «Умное» выделение текста. Причём для любых видов выделений нужно нажимать всего один шорткат. Второй служит для возврата (undo) к предыдущему выделению (см. демо для Markdown). Поддерживаемые синтаксисы: HTML, Python, JavaScript, LaTeX. Чтобы произвести выделение именно между кавычками, обычно приходится нажимать на хоткей 2 или более раз. Если нужны выделения исключительно между "кавычками", обратите внимание на решение 1.1, а лучше 1.2. 3. Настройка горячих клавиш После установки плагина хоткеи придётся задавать самим. Пользователям Windows не рекомендую копировать горячие клавиши, приведённые в описании плагина. Они конфликтуют с глобальными шорткатами Windows, которые проблематично отключить, не получая багов. Если знаете, как отвязать отдельные горячие клавиши Windows, чтобы использовать их в Sublime Text, поделитесь решением с другими пользователями, ответив на соответствующий вопрос в Super User. Как пользоваться Suricate, и что означает код ниже, читаем здесь. В файл User/Default.suricate-profile добавляем следующие строки: // Expand Region "sasha_expand_region": { "caption": "Expand Region", "keys": ["super+y"], "call": "sublime.expand_region", }, // Expand Region Undo "sasha_expand_region_undo": { "caption": "Expand Region Undo", "keys": ["super+shift+y"], "call": "sublime.expand_region", "args": { "undo": true }, "context": [{ "key": "expand_region_soft_undo" }] }, context — параметр, означающий, что команда выполняется только в определённом контексте; в данном случае отмена выделения на предыдущее произведётся, если до того происходили выделения командой expand_region. Когда же мы ничего не выделяли хоткеем Super+Y, но нажали Super+Shift+Y, будет только напечатана буква y (если у Вас сочетанием Super+Shift+Y не настроен запуск других команд). 4. Настройка синтаксиса Выделение командой expand_region может не работать или функционировать плохо в отдельных синтаксисах. Например, у меня неважно выделялся текст для CSS во встроенном HTML и в Markdown-разметке. Чтобы исправить это, установите плагин Edit Preferences → Edit Preferences: Edit Settings... → ExpandRegion → scope_selectors → между фигурными скобками вставляем следующий код: "python": ["text.html.markdown.gfm"], "javascript": ["source.css"] text.html.markdown.gfm и source.css — области видимости синтаксиса, рассматриваемые в следующем подразделе. Пробуем выделять теперь. Если по-прежнему плохо, вместо параметра python подставляем javascript, html и latex; вместо javascript, соответственно python, html и latex. Останавливаемся на варианте, который выделяет лучше. 5. Получение области видимости синтаксиса Каждая область видимости начинается со scope selector, одинакового для всех scope синтаксиса. К примеру, для синтаксиса Ruby по умолчанию этот scope selector — source.rb, для C++ — source.c++. я не нашёл в документации или поиском в Google, чтобы первый scope selector имел конкретное точное название, назовём его «областью видимости синтаксиса» или «syntax scope». Чтобы получить syntax scope, нажмите Ctrl+' (машинописный обратный апостроф, символ расположен на той же клавише, где кириллическая «ё») → вводим в открывшееся поле код: view.scope_name(0).split()[0] Между 'одинарными кавычками' получаем syntax scope, которая много где может пригодиться. 6. Scope selectors для встроенных языков Но во втором случае лучше, если бы правила выделения ExpandRegion для JavaScript применялись только в инлайновом CSS, но не остальной части HTML-документа, поскольку парсер javascript из ExpandRegion позволяет ограничивать действие параметра javascript из п. 2.1.4 селекторами областей видимости — «scope selectors». "javascript": ["source.css"] означает, что если в HTML где-либо содержатся области видимости, содержащие в названии source.css, то ExpandRegion задействует параметр javascript, нет — ExpandRegion выделяет по умолчанию (при условии, что не заданы значения прочим параметрам). Области видимости инлайновых CSS и JavaScript содержат scope selector, являющийся «областью видимости синтаксиса», как если бы файл был бы открыт в синтаксисе встроенного языка. То есть: открываем css-файл и получаем syntax scope — source.css. Это source.css будет содержаться и в названиях областей видимости для инлайнового CSS, начинающихся на text.html.basic source.css.embedded.html. У JavaScript область видимости синтаксиса — source.js, scope инлайнового JavaScript начинаются на text.html.basic source.js.embedded.html. 3. Дополнительные ссылки О выделении различных участков текста/кода в неофициальной документации Sublime Text; Описание действия плагина ExpandRegion, основанного на расширении для Emacs, разработанном, в свою очередь, на основе Mathematica IDE; Принципы именования областей видимости в Sublime Text.
Комментариев нет:
Отправить комментарий