Sublime-Wrap-Plus

Sublime-Wrap-Plus

有没有一种自动的方法可以在文本当前换行的每个点插入换行符?执行此操作后,不应换行,但看起来应该完全相同。

答案1

为此创建一个插件。选择工具»新插件…并输入以下脚本:

import sublime, sublime_plugin

class WrapLinesExCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        wrap_column = 0

        if self.view.settings().get('word_wrap') == False:
            # wrapping is disabled, do nothing
            return

        if self.view.settings().get('wrap_width') == 0:
            # compute wrap column from viewport width
            wrap_column = int(self.view.viewport_extent()[0] / self.view.em_width())
        else:
            wrap_column = self.view.settings().get('wrap_width')

        e = self.view.begin_edit()
        rewrap(self.view, e, wrap_column)
        self.view.end_edit(e)

def rewrap(v, e, column):
    # 0-indexed current line
    current_line_no = 0

    # RHS expression is line count, can change whenever we create a new one
    while current_line_no < v.rowcol(v.size())[0] + 1:
        # where current line drawing starts
        current_line_coords = v.text_to_layout(v.text_point(current_line_no, 0))

        # rightmost character drawn in current viewport
        textpos = v.layout_to_text((v.em_width() * (column), current_line_coords[1]))

        # physical line boundaries as absolute text positions
        current_line = v.line(textpos)

        if textpos < current_line.b:
            # the current line spans multiple rows, so insert a newline at the wrap column

            textpos = v.layout_to_text((v.em_width() * (column), current_line_coords[1]))
            next_line_indent = v.text_to_layout(textpos+1)[0]

            # TODO why -1?
            next_line_indent_chars = int(next_line_indent/(v.em_width()))-1
            # determine how to indent the following line based on how wide the wrapping indents and what the current tab/spaces settings are
            if v.settings().get('translate_tabs_to_spaces') and v.settings().get('use_tab_stops'):
                next_line_indent_chars = next_line_indent_chars / v.settings().get('tab_size')
                next_line_indent_string = '\t' * next_line_indent_chars
            else:
                next_line_indent_string = ' ' * next_line_indent_chars

            # insert newline and spacing at wrap column (sublime hides actual line endings from editor, therefore it's always LF)
            v.insert(e, textpos, '\n' + next_line_indent_string)
        else:
            # only continue to the next line if we didn't edit the current line
            current_line_no = current_line_no + 1

例如,将其保存wrap_lines_ex_command.py为默认(User)目录。

要从菜单栏访问此功能,请选择浏览套餐...菜单项,导航到User文件夹,然后Main.sublime-menu按照说明进行编辑(必要时创建)这个答案因此它包含如下文本:

[
    {
        "id": "edit",
        "children":
        [
            {"id": "wrap"},
            {"command": "wrap_lines_ex", "caption": "Wrap All Lines"}
        ]
    }
]

截图

前:

之前的截图

后:

之后的截图

当然,在这种情况下,由于注释也被包装起来,代码将不再起作用。但这是按照问题设计的行为。

答案2

多年以后,已经有现成的软件包(插件)可以实现这种功能。它们可能无法完全满足您的要求(以匹配窗口中显示的当前换行方式),但您可以在它们的首选项中设置要在哪一列换行。

Sublime-Wrap-Plus

GitHub 页面

安装

  1. 打开Sublime Text 2 or 3
  2. command-shift-p(Mac OS X) 或ctrl-shift-p(Windows) 打开Command Palette,输入“安装”,然后选择 选项Install Package Control
  3. 再次打开Command Palette,再次输入“安装”,然后选择选项Install a Package
  4. 开始输入然后选择sublime-wrap-text

用法

  1. 选择相关文本。
  2. command+alt+q(Mac OS X) 或alt+q(Windows)。

请参阅 GitHub 页面了解更多使用细节以及如何设置首选项。

演示

在此处输入图片描述

(我只是突出显示了所有文本并按下了 alt+q)

在此处输入图片描述

另一个类似的包是Sublime-Wrap 声明

GitHub 页面

我自己没有尝试过这个,但是如果你愿意的话可以尝试一下。

答案3

账户太年轻,无法添加评论
,但想添加 2021 年更新MarredCheese 的 2017 年精彩答案如上所述。

要安装 MarredCheese 提到的第一个包:

GitHubhttps://github.com/ehuss/Sublime-Wrap-Plus
Sublime 包名称: 包裹加

步骤1。仍然有效,粘贴自原始帖子:

  1. 打开 Sublime

第2步。仍然有效,粘贴自原始帖子:

  1. commandshiftp(Mac OS X) 或ctrlshiftp(Windows) 打开Command Palette,输入“安装”,然后选择 选项Install Package Control

步骤3.稍微不准确。
如果语法发生变化,以下是在 2021 年有效的语法:

   步骤3.(原始):

  • 打开Command Palette again,再次输入“安装”,然后选择 选项Install a Package

   步骤 3.(2021 年修订):

  • 无需输入Install a Package
    • Install Package或者
    • Package Control: Install Package
    • 注意:“包控制:高级安装包”很有用,
      但对于此配方来说不是必需的。

步骤4。不再起作用。

   步骤4.(原始):

  • 开始输入然后选择sublime-wrap-text

   步骤 4.(2021 年修订):

要安装 MarredCheese 在答案底部提到的第二个包:

GitHub: https://github.com/shagabutdinov/sublime-wrap-statement
Sublime 包名称:换行语句

按照上一节中的相同步骤进行操作,但步骤3.键入WrapStatement(无空格)。
(您将看到https://github.com/shagabutdinov/sublime-wrap-statement在下拉菜单中此条目的详细信息中Install Package

答案4

目前,Sublime Text 2 的偏好设置中似乎没有包含此功能(您可以在 Default/Preferences.sublime-settings 中查看)。可以使用类似"line_padding_bottom": 4(其中 4 是您希望每行下方的像素数)的配置选项来提高所有行的阅读清晰度,但无法根据行是否换行有选择地应用不同的行填充。

您可能希望提交功能请求在 Sublime Text 2 的论坛上.我知道如果可以合理实现的话我也会很欣赏这个功能。

相关内容