Подтвердить что ты не робот

Автоматически прерывать комментарии после определенного количества символов

Можно ли выделить большой блок комментариев и автоматически вставлять разрывы после определенной длины?

Простой пример

# This is a super long message that has too much information in it. Although inline comments are cool, this sentence should not be this long.

После

# This is a super long message that has too much information in it.
# Although inline comments are  cool, this sentence should not be this
# long.
4b9b3361

Ответ 1

Да! И это проще, чем длина этого ответа может предложить!

Фон

Есть команда под названием wrap_lines, которая имеет возможность точно, что вы хотите. wrap_lines определяется в Packages/Default/paragraph.py, строке 112 и редко документируется в списке команд Неофициальных Документов:

wrap_lines
Обтекает линии. По умолчанию он завершает строки в столбце первых столбцов.

  • width [Int]: указывает столбец, в котором должны быть завернуты строки.

wrap_lines уже доступен через элементы, расположенные в меню Edit -> Wrap. Есть варианты обертывания абзаца, в котором курсор лежит в столбцах 70, 78, 80, 100 и 120, а также первая линейка. По умолчанию Wrap Paragraph at Ruler сопоставляется с Alt+Q в Windows и Super+Alt+Q в OSX.

Работа с линейками

Что я имею в виду под первым правителем? Вы можете вызвать линейку через View -> Ruler, но если вы хотите больше одного на экране (или предпочтете иметь правителей в письменной форме), вы можете добавить массив JSON целых чисел, каждый из которых определяет линейку - для любого .sublime-settings. Например, массив, добавленный в файл настроек пользователя, выглядит следующим образом:

"rulers":
[
    79,
    80,
    72
],

Благодаря правилу первого правителя, Alt+Q будет обертывать строку длиной более 79 символов с отметкой 79-столбца, хотя там есть линейка "раньше" в столбце 72. "Первая линейка" doesn 't означает левую линейку, но первая определенная линейка. Если бы я переместил 80, в индекс 0, как показано ниже, тогда строки будут заменены на 80 столбцов. Аналогично для 72.

"rulers":
[
    80,
    79,
    72
],

Использование привязки клавиш

Правители для слабых, вы говорите? Вы также можете написать новую привязку для обертывания строки в столбце по вашему выбору! Просто добавьте что-то вроде этого в ваш файл Preferences -> Key Bindings – User:

{ "keys": ["alt+q"], "command": "wrap_lines", "args": {"width": 80} },

Удаление объекта args вместо этого будет завершено на первой линейке, как это делает команда Wrap Paragraph at Ruler. Wrap Paragraph at Ruler фактически определен точно так же, как в файле ключевой карты Windows по умолчанию:

{ "keys": ["alt+q"], "command": "wrap_lines" },

Предостережения

Одна из лучших (и, в некоторых случаях, худших) вещей о команде wrap_lines заключается в том, что она обнаружит любую последовательность неалфавитно-цифровых символов, которая начинает линию и дублирует ее при обертке. Это замечательно для написания комментариев, так как поведение, которое предположил ваш пример, действительно происходит:

# This is a super long message that has too much information in it. Although inline comments are cool, this sentence should not be this long, because having to scroll to the right to finish reading a comment is really annoying!

становится:

# This is a super long message that has too much information in it.
# Although inline comments are cool, this sentence should not be this
# long, because having to scroll to the right to finish reading a
# comment is really annoying!

Но если строка начинается с любых других символов, таких как начало цитаты, Sublime Text не знает ничего лучше, чем обертывать их. Итак:

# "This is a super long message that has too much information in it. Although inline comments are cool, this sentence should not be this long, because having to scroll to the right to finish reading a comment is really annoying!"

Становится этим, чего мы, вероятно, не хотим:

# "This is a super long message that has too much information in it.
# "Although inline comments are cool, this sentence should not be this
# "long, because having to scroll to the right to finish reading a
# "comment is really annoying!"

Это хорошая идея, чтобы быть осторожным с тем, что начинается с вашей первоначальной линии. Кроме того, команда wrap_lines нацеливает весь абзац, на который курсор нажимает, а не только текущую строку и, что удивительно, только рабочий выбор. Это означает, что вы можете снова использовать команду в недавно завернутой серии строк, чтобы повторно обернуть их в другом столбце, но вы также можете обернуть некоторые строки, которые вы не хотели бы, например, если вы выравниваете абзац под заголовком в Markdown:

# Hey, this header isn't really there!
Be careful with what starts the original line. Also, the `wrap_lines` command **targets the entire paragraph**, not just the current line.

Если команда активирована в любом месте этого блока текста, вы получите следующее:

# Hey, this header isn't really there! Be careful with what starts the
original line. Also, the `wrap_lines` command **targets the entire
paragraph**, not just the current line.

Вы можете избежать такого рода проблем с умным использованием пробелов; другая пустая строка между заголовком и самим абзацем исправит обертку, так что:

# Hey, this header isn't really there!

Be careful with what starts the original line. Also, the `wrap_lines` command **targets the entire paragraph**, not just the current line.

становится:

# Hey, this header isn't really there!

Be careful with what starts the original line. Also, the
`wrap_lines` command **targets the entire paragraph**, not just
the current line.

Поскольку операция выполняется так быстро, у вас не должно быть особых проблем с отслеживанием причин ошибок, с которыми вы сталкиваетесь, начиная с них и творчески избегая их. У Sublime Text обычно нет никаких проблем с смешиванием комментариев и не комментариев в коде, поэтому, если вам повезет, вам никогда не придется беспокоиться об этом!

Ответ 2

В SublimeText3

(и любые более ранние версии с поддержкой регулярных выражений, т.е. все):

Вот поиск/замена, который вставляет новую строку каждые 48 символов:

Найти:

(.{48}){1}

Заменить:

\1\n

Объяснение:

  • Скобки образуют группу, так что замена может ссылаться на совпадения с \1.
  • . соответствует любому символу, а {n} соответствует ровно n из них.
  • Команда replace принимает каждую группу соответствия и обратно-заменит его добавлением новой строки \n.

Примечание: \1 технически относится только к найденному первому совпадению, но при использовании "replace all" обрабатывает оставшиеся регулярные выражения также).


Пример реального мира:

Предположим, что вы форматируете открытые ключи, которые скопированы непосредственно из браузера без верхнего/нижнего колонтитула, предоставляют следующие полномочия для Администрации Интернета Google:

9c 2a 04 77 5c d8 50 91 3a 06 a3 82 e0 d8 50 48 bc 89 3f f1 19 70 1a 88 46 7e e0 8f c5 f1 89 ce 21 ee 5a fe 61 0d b7 32 44 89 a0 74 0b 53 4f 55 a4 ce 82 62 95 ee eb 59 5f c6 e1 05 80 12 c4 5e 94 3f bc 5b 48 38 f4 53 f7 24 e6 fb 91 e9 15 c4 cf f4 53 0d f4 4a fc 9f 54 de 7d be a0 6b 6f 87 c0 d0 50 1f 28 30 03 40 da 08 73 51 6c 7f ff 3a 3c a7 37 06 8e bd 4b 11 04 eb 7d 24 de e6 f9 fc 31 71 fb 94 d5 60 f3 2e 4a af 42 d2 cb ea c4 6a 1a b2 cc 53 dd 15 4b 8b 1f c8 19 61 1f cd 9d a8 3e 63 2b 84 35 69 65 84 c8 19 c5 46 22 f8 53 95 be e3 80 4a 10 c6 2a ec ba 97 20 11 c7 39 99 10 04 a0 f0 61 7a 95 25 8c 4e 52 75 e2 b6 ed 08 ca 14 fc ce 22 6a b3 4e cf 46 03 97 97 03 7e c0 b1 de 7b af 45 33 cf ba 3e 71 b7 de f4 25 25 c2 0d 35 89 9d 9d fb 0e 11 79 89 1e 37 c5 af 8e 72 69

После поиска и замены (все) вы получите:

9c 2a 04 77 5c d8 50 91 3a 06 a3 82 e0 d8 50 48 
bc 89 3f f1 19 70 1a 88 46 7e e0 8f c5 f1 89 ce 
21 ee 5a fe 61 0d b7 32 44 89 a0 74 0b 53 4f 55 
a4 ce 82 62 95 ee eb 59 5f c6 e1 05 80 12 c4 5e 
94 3f bc 5b 48 38 f4 53 f7 24 e6 fb 91 e9 15 c4 
cf f4 53 0d f4 4a fc 9f 54 de 7d be a0 6b 6f 87 
c0 d0 50 1f 28 30 03 40 da 08 73 51 6c 7f ff 3a 
3c a7 37 06 8e bd 4b 11 04 eb 7d 24 de e6 f9 fc 
31 71 fb 94 d5 60 f3 2e 4a af 42 d2 cb ea c4 6a 
1a b2 cc 53 dd 15 4b 8b 1f c8 19 61 1f cd 9d a8 
3e 63 2b 84 35 69 65 84 c8 19 c5 46 22 f8 53 95 
be e3 80 4a 10 c6 2a ec ba 97 20 11 c7 39 99 10 
04 a0 f0 61 7a 95 25 8c 4e 52 75 e2 b6 ed 08 ca 
14 fc ce 22 6a b3 4e cf 46 03 97 97 03 7e c0 b1 
de 7b af 45 33 cf ba 3e 71 b7 de f4 25 25 c2 0d 
35 89 9d 9d fb 0e 11 79 89 1e 37 c5 af 8e 72 69

Ответ 3

Привет, я наткнулся на это решение и попробовал его с Sublime Text 3, отлично работает. Если я использую обычный Alt + q в docstring python, он будет делать в значительной степени то, что желательно:

  • ограничит область действия docstring
  • будет иметь начало и конец '' 'или "" правильно сделано

Он включал изменение одной команды из пакета по умолчанию. См. Здесь.

https://gist.github.com/SmileyChris/4340807

В Sublime Text 3 пакет по умолчанию находится в папке \Packages\Default.sublime. Вам придется распаковать его и найти файл paragraph.py. Поместите (просто) этот файл в каталог вашего пользовательского пакета, например. \Data\Packages\Default \, чтобы этот файл теперь перезаписывал пакет paragraph.py по умолчанию.

Благодаря оригинальному автору Крису Бивену (SmileyChris).