16

Is it possible to highlight a large comment block and automatically insert breaks after a certain length?

Simple Example

# 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.

After

# 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.
4

3 回答 3

30

是的!它比这个答案的长度可能暗示的要简单!

背景

有一个名为的命令wrap_lines可以完全满足您的需求。在第 112 行wrap_lines中定义,并且在非官方文档的命令列表中很少记录:Packages/Default/paragraph.py

wrap_lines 换
行。默认情况下,它在第一个标尺的列处换行。

  • width [Int]:指定应该换行的列。

wrap_lines已经可以通过Edit -> Wrap菜单中的项目访问。有选项可以将光标位于第 70、78、80、100 和 120 列的段落以及第一个标尺换行。默认情况下,Wrap Paragraph at Ruler映射到Alt+QWindows 和Super+Alt+QOSX。

与统治者合作

我说的第一任统治者是什么意思?您可以通过 召唤一个标尺View -> Ruler,但如果您想要多个屏幕上的标尺(或者希望您的标尺以书面形式出现),您可以将一个 JSON 整数数组(每个整数都定义一个标尺)添加到任何.sublime-settings文件中。例如,我添加到用户首选项文件中的数组如下所示:

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

由于第一个标尺规则,Alt+Q将在 79 列标记处换行超过 79 个字符,即使在第 72 列“之前”有一个标尺。“第一个标尺”不是指最左边的标尺,而是首先定义标尺。如果我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在代码中混合注释和非注释通常不会有任何问题,所以如果你幸运的话,你永远不必担心它!

于 2013-06-07T23:59:50.710 回答
4

在 SublimeText3 中

(以及任何支持正则表达式的早期版本,即所有版本):

这是每 48 个字符插入一个换行符的搜索/替换:

寻找:

(.{48}){1}

代替:

\1\n

解释:

  • 括号形成一个组,以便替换可以引用匹配项\1
  • .匹配任何字符,并且完全{n}匹配n它们。
  • replace 命令获取每个匹配组并用\n附加的换行符将其替换。

注意:\1从技术上讲,仅指找到的第一个匹配项,但使用“全部替换”也可以处理剩余的正则表达式匹配项)。


真实世界的例子:

假设您正在格式化公钥,它直接从浏览器复制而没有页眉/页脚,为 Google Internet Authority 提供以下信息:

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
于 2016-04-22T18:05:58.920 回答
2

嗨,我遇到了这个解决方案,并使用 Sublime Text 3 进行了尝试,效果很好。如果我在 python 文档字符串上使用通常的 Alt+q,它会做很多想要的事情:

  • 将范围限制为文档字符串
  • 将正确完成开头和结尾 ''' 或 """

它涉及从默认包中修改一个命令。请看这里。

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

在 Sublime Text 3 中,默认包位于 \Packages\Default.sublime-package 下。您必须解压缩它,然后找到文件paragraph.py。将此文件放置(仅)在您的用户包目录下,例如。\Data\Packages\Default\ 所以这个文件现在覆盖了默认包的paragraph.py。

感谢原作者克里斯·比文(SmileyChris)。

于 2014-02-20T21:56:37.073 回答