Skip to content

Instantly share code, notes, and snippets.

@detunized
Created October 23, 2017 22:46
Show Gist options
  • Save detunized/dec817126153970e89387add50fa9658 to your computer and use it in GitHub Desktop.
Save detunized/dec817126153970e89387add50fa9658 to your computer and use it in GitHub Desktop.
Sublime Text 3 plugin to wrap long string literals in languages that support + for strings
# Converts this
lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum nisl sed consectetur aliquam. Aliquam sit amet magna nec sapien condimentum interdum a non ex. Nam maximus massa sapien, vitae finibus nunc rhoncus quis. Mauris ac mauris a metus tristique sagittis at a purus. Praesent ullamcorper lorem in lorem ornare pretium. Mauris eu purus in turpis luctus gravida. Fusce eget sem facilisis, vulputate odio vel, venenatis libero. Integer et neque at nibh pellentesque mattis. Duis id lacus dui. Quisque auctor pharetra sapien. Nunc porta ultrices dignissim. Etiam et nisi id mauris aliquam fringilla. Cras gravida enim vitae porta molestie. Sed porttitor velit aliquet fermentum posuere."
# To this
lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellente" +
"sque elementum nisl sed consectetur aliquam. Aliquam sit amet mag" +
"na nec sapien condimentum interdum a non ex. Nam maximus massa sa" +
"pien, vitae finibus nunc rhoncus quis. Mauris ac mauris a metus t" +
"ristique sagittis at a purus. Praesent ullamcorper lorem in lorem" +
" ornare pretium. Mauris eu purus in turpis luctus gravida. Fusce " +
"eget sem facilisis, vulputate odio vel, venenatis libero. Integer" +
" et neque at nibh pellentesque mattis. Duis id lacus dui. Quisque" +
" auctor pharetra sapien. Nunc porta ultrices dignissim. Etiam et " +
"nisi id mauris aliquam fringilla. Cras gravida enim vitae porta m" +
"olestie. Sed porttitor velit aliquet fermentum posuere"
import sublime
import sublime_plugin
# TODO: Rename this
# TODO: Configure the wrap column
# TODO: Add join and reformat
class ExampleCommand(sublime_plugin.TextCommand):
WRAP_COLUMN = 75
def run(self, edit):
view = self.view
sel = view.sel()
literal_region = view.extract_scope(sel[0].begin())
literal = view.substr(literal_region)
quote = literal[0]
if quote != literal[-1]:
sublime.error_message("Non symmetrical quotes are not supported")
return
indent = view.rowcol(literal_region.begin())[1]
wrap_width = self.WRAP_COLUMN - indent - 2
if wrap_width < 1:
sublime.error_message("The literal is too far to the right")
return
content = literal[1:-2]
lines = [content[0 + i:wrap_width + i] for i in range(0, len(content), wrap_width)]
quoted_lines = ["{0}{1}{0}".format(quote, i) for i in lines]
replacement = " +\n{0}".format(" " * indent).join(quoted_lines)
view.replace(edit, literal_region, replacement)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment