Sublime-Wrap-Plus

Sublime-Wrap-Plus

Existe uma maneira automatizada de inserir quebras de linha em todos os pontos em que o texto está sendo quebrado? Após esta operação, nenhuma linha deve ser quebrada, mas deve parecer visualmente idêntica.

Responder1

Crie um plugin para isso. SelecioneFerramentas » Novo plug-in…e digite o seguinte script:

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

Salve, por exemplo, como wrap_lines_ex_command.pyno Userdiretório padrão ( ).

Para tornar isso acessível na barra de menu, selecione oNavegar pelos pacotes…item de menu, navegue até a Userpasta e edite Main.sublime-menu(criando-a se necessário) conforme descrito emesta respostaportanto, contém texto como, por exemplo, o seguinte:

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

Capturas de tela

Antes:

Captura de tela antes

Depois:

Captura de tela depois

É claro que, neste caso, devido aos comentários também serem agrupados, o código não funcionará mais. Mas esse é o comportamento conforme o design da pergunta.

Responder2

Anos depois, existem pacotes prontos (plug-ins) para esse tipo de coisa. Eles podem não atender exatamente à sua solicitação (para corresponder ao empacotamento atual mostrado em sua janela), mas você pode definir em qual coluna deseja agrupar em suas preferências.

Sublime-Wrap-Plus

Página GitHub

Instalação

  1. Abrir Sublime Text 2 or 3.
  2. Pressione command-shift-p(Mac OS X) ou ctrl-shift-p(Windows) para abrir o arquivo Command Palette, digite "instalar" e selecione a opção Install Package Control.
  3. Abra Command Palettenovamente, digite "instalar" novamente e selecione a opção Install a Package.
  4. Comece a digitar e selecione sublime-wrap-text.

Uso

  1. Selecione o texto em questão.
  2. Pressione command+alt+q(Mac OS X) ou alt+q(Windows).

Consulte a página do GitHub para obter mais nuances de uso e como definir preferências.

Demonstração

Antes

insira a descrição da imagem aqui

Depois(Acabei de destacar todo o texto e clicar em alt+q)

insira a descrição da imagem aqui

Outro pacote semelhante éDeclaração Sublime-Wrap

Página GitHub

Eu não tentei este sozinho, mas você pode tentar, se quiser.

Responder3

A conta é muito jovem para adicionar um comentário,
mas queria adicionar uma atualização de 2021 aExcelente resposta de 2017 do MarredCheeseencontrado acima.

Para instalar o primeiro pacote MarredCheese mencionado:

GitHub: https://github.com/ehuss/Sublime-Wrap-Plus
Nome do pacote sublime: Envoltório Plus

Passo 1.Ainda funciona, colando da postagem original:

  1. Sublime aberto

Passo 2.Ainda funciona, colando da postagem original:

  1. Pressione commandshiftp(Mac OS X) ou ctrlshiftp(Windows) para abrir o arquivo Command Palette, digite "instalar" e selecione a opção Install Package Control.

Etapa 3.é um pouco impreciso.
Caso a sintaxe tenha mudado aqui é o que funciona em 2021:

   Etapa 3. (Original):

  • Abra o arquivo Command Palette again, digite "instalar" novamente e selecione a opção Install a Package.

   Etapa 3. (revisado para 2021):

  • em vez de digitar Install a Packagedigite:
    • Install Packageou
    • Package Control: Install Package
    • Nota: "Controle de pacote: pacote de instalação avançada" é útil,
      mas não é necessário para esta receita.

Passo 4.não funciona mais.

   Etapa 4. (Original):

  • Comece a digitar e selecione sublime-wrap-text.

   Etapa 4. (Revisado para 2021):

Para instalar o segundo pacote MarredCheese mencionado na parte inferior da resposta:

Github: https://github.com/shagabutdinov/sublime-wrap-statement
Nome do pacote sublime:WrapStatement

Siga os mesmos passos da última seção, mas paraEtapa 3.digite WrapStatementem vez disso (sem espaço).
(Você veráhttps://github.com/shagabutdinov/sublime-wrap-statementnos detalhes desta entrada no Install Packagemenu suspenso)

Responder4

No momento, parece que esse recurso não está incluído nas preferências do Sublime Text 2 (você pode ver por si mesmo em Default/Preferences.sublime-settings). É possível usar uma opção de configuração como "line_padding_bottom": 4(onde 4 é o número de pixels que você deseja abaixo de cada linha) para clareza de leitura em todas as linhas, mas não é possível aplicar seletivamente diferentes preenchimentos de linha dependendo se a linha está ou não quebrada .

Você pode enviar uma solicitação de recursono fórum do Sublime Text 2. Eu sei que apreciaria essa funcionalidade também, se for razoável implementá-la.

informação relacionada