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.py
no User
diretório padrão ( ).
Para tornar isso acessível na barra de menu, selecione oNavegar pelos pacotes…item de menu, navegue até a User
pasta 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:
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
Instalação
- Abrir
Sublime Text 2 or 3
. - Pressione
command-shift-p
(Mac OS X) ouctrl-shift-p
(Windows) para abrir o arquivoCommand Palette
, digite "instalar" e selecione a opçãoInstall Package Control
. - Abra
Command Palette
novamente, digite "instalar" novamente e selecione a opçãoInstall a Package
. - Comece a digitar e selecione
sublime-wrap-text
.
Uso
- Selecione o texto em questão.
- Pressione
command+alt+q
(Mac OS X) oualt+q
(Windows).
Consulte a página do GitHub para obter mais nuances de uso e como definir preferências.
Demonstração
Antes
Depois(Acabei de destacar todo o texto e clicar em alt+q)
Outro pacote semelhante éDeclaração Sublime-Wrap
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:
- Sublime aberto
Passo 2.Ainda funciona, colando da postagem original:
- Pressione commandshiftp(Mac OS X) ou ctrlshiftp(Windows) para abrir o arquivo
Command Palette
, digite "instalar" e selecione a opçãoInstall 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çãoInstall a Package
.
Etapa 3. (revisado para 2021):
- em vez de digitar
Install a Package
digite:Install Package
ouPackage 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):
- Digite
Wrap Plus
no menu suspenso Instalar pacote
(você veráhttps://github.com/ehuss/Sublime-Wrap-Plusnos detalhes desta entrada)
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 WrapStatement
em vez disso (sem espaço).
(Você veráhttps://github.com/shagabutdinov/sublime-wrap-statementnos detalhes desta entrada no Install Package
menu 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.