Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
simple scripts to prettify your xml and json in sublime text 2
[
{ "keys": ["ctrl+shift+x"], "command": "tidy_xml" },
{ "keys": ["ctrl+shift+j"], "command": "prettify_json" }
]
import sublime, sublime_plugin, subprocess
class PrettifyJsonCommand(sublime_plugin.TextCommand):
def run(self, edit):
command = 'python -mjson.tool'
# help from http://www.sublimetext.com/forum/viewtopic.php?f=2&p=12451
p = subprocess.Popen(command, bufsize=-1, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
result, err = p.communicate(self.view.substr(self.view.sel()[0]).encode('utf-8'))
# gave up trying this approach: result always has '\n' strings in it that refuse to render
#result = json.dumps( self.view.substr(self.view.sel()[0]), indent=2)
# http://code.activestate.com/recipes/65211/ seems to say that Python "ruins" non-raw strings by
# actually placing '\','n' in the friggin string unless it's marked 'raw'? Is that true? Shouldn't a string be a string
# and the raw/not raw output be a function of the runtime? Why does "print" have some magic to reescape these strings and
# yet there are no other buffer objects that seem to do it (aka StringIO or BytesIO).
if result != "":
self.view.replace(edit, self.view.sel()[0], result.decode('utf-8'))
sublime.set_timeout(self.clear,0)
else:
self.view.set_status('tidyjson', "tidyjson: "+err)
sublime.set_timeout(self.clear,10000)
def clear(self):
self.view.erase_status('tidyjson')
import sublime, sublime_plugin, subprocess
class TidyXmlCommand(sublime_plugin.TextCommand):
def run(self, edit):
command = 'tidy -xml -i -utf8 -w -q'
# help from http://www.sublimetext.com/forum/viewtopic.php?f=2&p=12451
p = subprocess.Popen(command, bufsize=-1, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
result, err = p.communicate(self.view.substr(self.view.sel()[0]).encode('utf-8'))
if err != "":
self.view.set_status('tidyxml', "tidyxml: "+err)
sublime.set_timeout(self.clear,10000)
else:
self.view.replace(edit, self.view.sel()[0], result.decode('utf-8'))
sublime.set_timeout(self.clear,0)
def clear(self):
self.view.erase_status('tidyxml')
@coldnebo

This comment has been minimized.

Show comment
Hide comment
@coldnebo

coldnebo Aug 10, 2011

XML and JSON Tidy for Sublime Text 2

Have you ever had a chunk of xml or json output that you were trying to format in Sublime Text 2? Well here are some easy plugin macros that will take any text selection and replace it inline with formatted output from tidy or prettify_json.rb. Note: some setup required to get these tools running -- I got them running on my system without too much trouble, you may have to tweak.

To use with Sublime Text 2, copy these files into ~/.config/sublime-text-2/Packages/User. If you already have a keymap, edit these values or your own into it. Then use CTRL+SHIFT+X to tidy xml selections and CTRL+SHIFT+J to tidy JSON selections.

On Mac, copy into ~/Library/Application Support/Sublime Text 2/Packages/User.

Owner

coldnebo commented Aug 10, 2011

XML and JSON Tidy for Sublime Text 2

Have you ever had a chunk of xml or json output that you were trying to format in Sublime Text 2? Well here are some easy plugin macros that will take any text selection and replace it inline with formatted output from tidy or prettify_json.rb. Note: some setup required to get these tools running -- I got them running on my system without too much trouble, you may have to tweak.

To use with Sublime Text 2, copy these files into ~/.config/sublime-text-2/Packages/User. If you already have a keymap, edit these values or your own into it. Then use CTRL+SHIFT+X to tidy xml selections and CTRL+SHIFT+J to tidy JSON selections.

On Mac, copy into ~/Library/Application Support/Sublime Text 2/Packages/User.

@coldnebo

This comment has been minimized.

Show comment
Hide comment
@coldnebo

coldnebo Nov 3, 2011

Ah, I have another gist for perforce that does this via windows update. Let me see if I can put that code in here...

Owner

coldnebo commented Nov 3, 2011

Ah, I have another gist for perforce that does this via windows update. Let me see if I can put that code in here...

@coldnebo

This comment has been minimized.

Show comment
Hide comment
@coldnebo

coldnebo Nov 3, 2011

Ok, updated both of these scripts. Switched the json prettifier to python -- which should be in scope automatically if you have sublime... I don't know, this works on my mac. I tried to internalize it completely, but Python has some whacked out notion of strings that I don't understand. Feel free to tinker and let me know if you find a solution for the json object.

Owner

coldnebo commented Nov 3, 2011

Ok, updated both of these scripts. Switched the json prettifier to python -- which should be in scope automatically if you have sublime... I don't know, this works on my mac. I tried to internalize it completely, but Python has some whacked out notion of strings that I don't understand. Feel free to tinker and let me know if you find a solution for the json object.

@evanmoran

This comment has been minimized.

Show comment
Hide comment
@evanmoran

evanmoran Nov 22, 2011

Worked for me too. Great job.

Worked for me too. Great job.

@mweagle

This comment has been minimized.

Show comment
Hide comment
@mweagle

mweagle Jan 20, 2012

Works great - thanks!

mweagle commented Jan 20, 2012

Works great - thanks!

@ronyv89

This comment has been minimized.

Show comment
Hide comment
@ronyv89

ronyv89 Jan 23, 2012

Super Cool. Helped me a lot. Thanx :)

ronyv89 commented Jan 23, 2012

Super Cool. Helped me a lot. Thanx :)

@daniellmb

This comment has been minimized.

Show comment
Hide comment
@daniellmb

daniellmb Feb 2, 2012

Is is expected that you have to select the text you want to format?

Is is expected that you have to select the text you want to format?

@coldnebo

This comment has been minimized.

Show comment
Hide comment
@coldnebo

coldnebo Feb 3, 2012

Yep, select the text and then it replaces it with formatted text. At work, I get XML service responses with embedded JSON and it is a complete mess to look through that much data when any part of it can be the cause of an error, so this is quite handy because I can select all and format xml and then select just the inner CDATA JSON and format that... sooo much easier.

Owner

coldnebo commented Feb 3, 2012

Yep, select the text and then it replaces it with formatted text. At work, I get XML service responses with embedded JSON and it is a complete mess to look through that much data when any part of it can be the cause of an error, so this is quite handy because I can select all and format xml and then select just the inner CDATA JSON and format that... sooo much easier.

@daniellmb

This comment has been minimized.

Show comment
Hide comment
@daniellmb

daniellmb Feb 3, 2012

Thanks for the reply, I finally ended up using JsFormat

Thanks for the reply, I finally ended up using JsFormat

@coldnebo

This comment has been minimized.

Show comment
Hide comment
@coldnebo

coldnebo Feb 3, 2012

Cool, didn't know about that.

Owner

coldnebo commented Feb 3, 2012

Cool, didn't know about that.

@samo9789

This comment has been minimized.

Show comment
Hide comment
@samo9789

samo9789 Feb 23, 2012

Great tools. Thanks for sharing. Anyway to make it parse and format the code in the current file without having to select the text ?

Great tools. Thanks for sharing. Anyway to make it parse and format the code in the current file without having to select the text ?

@ozzieperez

This comment has been minimized.

Show comment
Hide comment
@ozzieperez

ozzieperez Feb 28, 2012

I'm getting an error "tidyxml: tidy is not recognized as an internal or external command" after following the instructions.

These were my steps:
1 - Copied the scripts to the directory (I noticed they were automagically compiled as soon as I copied them and a .pyc was created for both)
2 - Added the suggested key bindings through Preferences > Key Bindings - User
3 - Restarted Sublime
4 - Created a new document with well-formed XML
5 - Tried CTRL+SHIFT+X, then I saw the error on the bottom status pane

Machine: PC
Script directory: C:\Users\ozmosis\AppData\Roaming\Sublime Text 2\Packages\User

What did I miss?

I'm getting an error "tidyxml: tidy is not recognized as an internal or external command" after following the instructions.

These were my steps:
1 - Copied the scripts to the directory (I noticed they were automagically compiled as soon as I copied them and a .pyc was created for both)
2 - Added the suggested key bindings through Preferences > Key Bindings - User
3 - Restarted Sublime
4 - Created a new document with well-formed XML
5 - Tried CTRL+SHIFT+X, then I saw the error on the bottom status pane

Machine: PC
Script directory: C:\Users\ozmosis\AppData\Roaming\Sublime Text 2\Packages\User

What did I miss?

@coldnebo

This comment has been minimized.

Show comment
Hide comment
@coldnebo

coldnebo Feb 29, 2012

Ah, @ozzieperez, you're running on windows.... you'll need HTMLTidy installed to use this (I forgot about windows -- it comes on most macs and linux distros) -- You can download a windows binary here: http://tidy.sourceforge.net/#binaries Don't forget to add the install location to your path. Try it out and see if that works.

An alternate would be the pure python plugin JsFormat as pointed out by @danielimb above.

Owner

coldnebo commented Feb 29, 2012

Ah, @ozzieperez, you're running on windows.... you'll need HTMLTidy installed to use this (I forgot about windows -- it comes on most macs and linux distros) -- You can download a windows binary here: http://tidy.sourceforge.net/#binaries Don't forget to add the install location to your path. Try it out and see if that works.

An alternate would be the pure python plugin JsFormat as pointed out by @danielimb above.

@coldnebo

This comment has been minimized.

Show comment
Hide comment
@coldnebo

coldnebo Feb 29, 2012

@samo9789, good idea! I've been swamped so haven't had a chance to tinker with this again, but I think it wouldn't be hard to do. I'll take a look this weekend if I can.

Owner

coldnebo commented Feb 29, 2012

@samo9789, good idea! I've been swamped so haven't had a chance to tinker with this again, but I think it wouldn't be hard to do. I'll take a look this weekend if I can.

@samo9789

This comment has been minimized.

Show comment
Hide comment

@coldnebo Great, thanks.

@ozzieperez

This comment has been minimized.

Show comment
Hide comment
@ozzieperez

ozzieperez Feb 29, 2012

Thanks @coldnebo. I downloaded the executable from from http://www.paehl.com/open_source/?download=tidy.zip , added the Path to it to in my system variables, and it's all good now. Thanks again!

Thanks @coldnebo. I downloaded the executable from from http://www.paehl.com/open_source/?download=tidy.zip , added the Path to it to in my system variables, and it's all good now. Thanks again!

@ssilva

This comment has been minimized.

Show comment
Hide comment
@ssilva

ssilva Mar 2, 2012

Thanks a lot for the script, @coldnebo.

For some reason I am getting extra carriage returns... Not sure if this is linked to the '\n' issue you talked about in the comments.

When I try to format the following

{"test":"hello world"}

I get

{

    "test": "hello world"

}

After the opening curly brace and before the closing curly brace I get 0d 0d 0a which is carriage return, carriage return, new line.

Has anybody been able to solve this minor problem?

I'm using Windows XP, Python 2.7.2 and Sublime Text 2 build 2181.

ssilva commented Mar 2, 2012

Thanks a lot for the script, @coldnebo.

For some reason I am getting extra carriage returns... Not sure if this is linked to the '\n' issue you talked about in the comments.

When I try to format the following

{"test":"hello world"}

I get

{

    "test": "hello world"

}

After the opening curly brace and before the closing curly brace I get 0d 0d 0a which is carriage return, carriage return, new line.

Has anybody been able to solve this minor problem?

I'm using Windows XP, Python 2.7.2 and Sublime Text 2 build 2181.

@coldnebo

This comment has been minimized.

Show comment
Hide comment
@coldnebo

coldnebo Mar 3, 2012

Not sure, I've seen copy/paste issues between mac/linux and windows that are similar... maybe some setting in sublime to control line endings?

Owner

coldnebo commented Mar 3, 2012

Not sure, I've seen copy/paste issues between mac/linux and windows that are similar... maybe some setting in sublime to control line endings?

@tumbak

This comment has been minimized.

Show comment
Hide comment
@tumbak

tumbak Mar 21, 2012

thank you =)

tumbak commented Mar 21, 2012

thank you =)

@geros

This comment has been minimized.

Show comment
Hide comment

geros commented Mar 24, 2012

cuel

@dserodio

This comment has been minimized.

Show comment
Hide comment
@dserodio

dserodio May 2, 2012

Forgive the newbie question, but how can I run this from the Command Palette instead of from a key binding?

dserodio commented May 2, 2012

Forgive the newbie question, but how can I run this from the Command Palette instead of from a key binding?

@coldnebo

This comment has been minimized.

Show comment
Hide comment
@coldnebo

coldnebo May 2, 2012

@dserodio, you know, that's a really great question and I don't know the answer either. There's got to be a way to add this to the list of commands... I'll take a look when I get some time.

Owner

coldnebo commented May 2, 2012

@dserodio, you know, that's a really great question and I don't know the answer either. There's got to be a way to add this to the list of commands... I'll take a look when I get some time.

@dserodio

This comment has been minimized.

Show comment
Hide comment
@dserodio

dserodio May 2, 2012

@coldnebo I asked on the Sublime forums and got a very nice reply. Basically:

To add a command to the Command Palette you need define it in a .sublime-commands file.

The linked forum post contains links to the documentation and a one-liner to add this command to the Command Pallete.

dserodio commented May 2, 2012

@coldnebo I asked on the Sublime forums and got a very nice reply. Basically:

To add a command to the Command Palette you need define it in a .sublime-commands file.

The linked forum post contains links to the documentation and a one-liner to add this command to the Command Pallete.

@coldnebo

This comment has been minimized.

Show comment
Hide comment
@coldnebo

coldnebo May 3, 2012

ah, figured it was something simple. I love Sublime. Thanks for posting this!

Owner

coldnebo commented May 3, 2012

ah, figured it was something simple. I love Sublime. Thanks for posting this!

@LIFO-nodelay

This comment has been minimized.

Show comment
Hide comment

thank you!

@jtmille3

This comment has been minimized.

Show comment
Hide comment
@jtmille3

jtmille3 Aug 12, 2012

I've got the same CR CR LF problem. I haven't been able to figure it out. A shame.

I've got the same CR CR LF problem. I haven't been able to figure it out. A shame.

@jtmille3

This comment has been minimized.

Show comment
Hide comment
@jtmille3

jtmille3 Aug 12, 2012

I ended up replacing all \r\n with \n. I'm not sure if this is a windows only fix. I'll have to test on my macbook later tonight.

self.view.replace(edit, self.view.sel()[0], result.decode('utf-8').replace('\r\n', '\n'))

I ended up replacing all \r\n with \n. I'm not sure if this is a windows only fix. I'll have to test on my macbook later tonight.

self.view.replace(edit, self.view.sel()[0], result.decode('utf-8').replace('\r\n', '\n'))

@jtmille3

This comment has been minimized.

Show comment
Hide comment
@jtmille3

jtmille3 Aug 13, 2012

I also made one more tweak by replacing self.view.sel()[0] with sublime.Region(0, self.view.size()). So now I don't have to select anything and it will format my whole document. I could make this smarter so it only formats text selections when the region is not empty, but 99.9% of the time I just want to format the whole document anyways.

Thanks for the snippets mate.

I also made one more tweak by replacing self.view.sel()[0] with sublime.Region(0, self.view.size()). So now I don't have to select anything and it will format my whole document. I could make this smarter so it only formats text selections when the region is not empty, but 99.9% of the time I just want to format the whole document anyways.

Thanks for the snippets mate.

@jtmille3

This comment has been minimized.

Show comment
Hide comment

See my updated gist. https://gist.github.com/3390999

@rootsical

This comment has been minimized.

Show comment
Hide comment
@rootsical

rootsical Oct 14, 2012

jtmille3's update gist sorted out carriage return problems for me on windows.. but thanks for all of this.. also i got confused and added HTMLTidy through Sublime Text 2 package control - no no no.. yes the windows binary were the right thing to download from http://tidy.sourceforge.net/#binaries and then where i put the exe file i added that location to the environment PATH variable by right clicking computer -> properties -> advanced system settings -> environment variables -> system variables -> PATH -> edit -> and adding the path to my exe in there.. on windows 7 x64.. thanks again for this it's great to have nice xml

jtmille3's update gist sorted out carriage return problems for me on windows.. but thanks for all of this.. also i got confused and added HTMLTidy through Sublime Text 2 package control - no no no.. yes the windows binary were the right thing to download from http://tidy.sourceforge.net/#binaries and then where i put the exe file i added that location to the environment PATH variable by right clicking computer -> properties -> advanced system settings -> environment variables -> system variables -> PATH -> edit -> and adding the path to my exe in there.. on windows 7 x64.. thanks again for this it's great to have nice xml

@rootsical

This comment has been minimized.

Show comment
Hide comment
@rootsical

rootsical Oct 14, 2012

jtmille3's update gist sorted out carriage return problems for me on windows.. but thanks for all of this.. also i got confused and added HTMLTidy through Sublime Text 2 package control - no no no.. yes the windows binary were the right thing to download from http://tidy.sourceforge.net/#binaries and then where i put the exe file i added that location to the environment PATH variable by right clicking computer -> properties -> advanced system settings -> environment variables -> system variables -> PATH -> edit -> and adding the path to my exe in there.. on windows 7 x64.. thanks again for this it's great to have nice xml

jtmille3's update gist sorted out carriage return problems for me on windows.. but thanks for all of this.. also i got confused and added HTMLTidy through Sublime Text 2 package control - no no no.. yes the windows binary were the right thing to download from http://tidy.sourceforge.net/#binaries and then where i put the exe file i added that location to the environment PATH variable by right clicking computer -> properties -> advanced system settings -> environment variables -> system variables -> PATH -> edit -> and adding the path to my exe in there.. on windows 7 x64.. thanks again for this it's great to have nice xml

@rootsical

This comment has been minimized.

Show comment
Hide comment
@rootsical

rootsical Oct 14, 2012

jtmille3's update gist sorted out carriage return problems for me on windows.. but thanks for all of this.. also i got confused and added HTMLTidy through Sublime Text 2 package control - no no no.. yes the windows binary were the right thing to download and then where i put the exe file i added that location to the environment PATH variable by right clicking computer -> properties -> advanced system settings -> environment variables -> system variables -> PATH -> edit -> and adding the path to my exe in there.. on windows 7 x64.. thanks again for this it's great to have nice xml

jtmille3's update gist sorted out carriage return problems for me on windows.. but thanks for all of this.. also i got confused and added HTMLTidy through Sublime Text 2 package control - no no no.. yes the windows binary were the right thing to download and then where i put the exe file i added that location to the environment PATH variable by right clicking computer -> properties -> advanced system settings -> environment variables -> system variables -> PATH -> edit -> and adding the path to my exe in there.. on windows 7 x64.. thanks again for this it's great to have nice xml

@rootsical

This comment has been minimized.

Show comment
Hide comment
@rootsical

rootsical Oct 14, 2012

thanks for this.. jtmille3's version sorted the carriage return problems for on windows 7 x64.. nice to have pretty xml again.. thanks!

thanks for this.. jtmille3's version sorted the carriage return problems for on windows 7 x64.. nice to have pretty xml again.. thanks!

@ShawnCarnell

This comment has been minimized.

Show comment
Hide comment
@ShawnCarnell

ShawnCarnell Oct 29, 2012

Really appreciate the time you put into this, man. Thanks.

Really appreciate the time you put into this, man. Thanks.

@eulerfx

This comment has been minimized.

Show comment
Hide comment
@eulerfx

eulerfx Dec 24, 2012

Thank You! Works great on Windows with http://tidy.sourceforge.net/#binaries as specified.

eulerfx commented Dec 24, 2012

Thank You! Works great on Windows with http://tidy.sourceforge.net/#binaries as specified.

@dyodji

This comment has been minimized.

Show comment
Hide comment
@dyodji

dyodji Jan 25, 2013

Woot! Works great so far...thanks!

dyodji commented Jan 25, 2013

Woot! Works great so far...thanks!

@Timetear

This comment has been minimized.

Show comment
Hide comment
@Timetear

Timetear Feb 3, 2013

Tidy actually edits CDATA value and then wrongly handles what is after it.
e.g., The following "one-lined" XML. 'y = 3;' has got 2 tabulations before and one LF after. 'x * y = ?' has got 2 tabulations.

<?xml version="1.0" encoding="utf-8"?>
<report><bob>aze<![CDATA[ x = 2;
        y = 3;
        x * y = ?]]><alice>qsd</alice></bob></report>

After running tidy_xml.py, the output is the following

<?xml version="1.0" encoding="utf-8"?>
<report>
  <bob>aze
<![CDATA[ x = 2;
                y = 3;
                x * y = ?]]>
<alice>qsd</alice></bob>
</report>

The CDATA value is not considered as a whole. The tabulations before 'y = 3;' and 'x * y = ?' are replaced with spaces from indentation.

xmllint handles that a little better, the CDATA value remains untouched, but still fail after that.

<?xml version="1.0" encoding="utf-8"?>
<report>
    <bob>aze<![CDATA[ x = 2;
        y = 3;
        x * y = ?]]><alice>qsd</alice></bob>
</report>

Timetear commented Feb 3, 2013

Tidy actually edits CDATA value and then wrongly handles what is after it.
e.g., The following "one-lined" XML. 'y = 3;' has got 2 tabulations before and one LF after. 'x * y = ?' has got 2 tabulations.

<?xml version="1.0" encoding="utf-8"?>
<report><bob>aze<![CDATA[ x = 2;
        y = 3;
        x * y = ?]]><alice>qsd</alice></bob></report>

After running tidy_xml.py, the output is the following

<?xml version="1.0" encoding="utf-8"?>
<report>
  <bob>aze
<![CDATA[ x = 2;
                y = 3;
                x * y = ?]]>
<alice>qsd</alice></bob>
</report>

The CDATA value is not considered as a whole. The tabulations before 'y = 3;' and 'x * y = ?' are replaced with spaces from indentation.

xmllint handles that a little better, the CDATA value remains untouched, but still fail after that.

<?xml version="1.0" encoding="utf-8"?>
<report>
    <bob>aze<![CDATA[ x = 2;
        y = 3;
        x * y = ?]]><alice>qsd</alice></bob>
</report>
@rmrfboy

This comment has been minimized.

Show comment
Hide comment
@rmrfboy

rmrfboy Feb 19, 2013

thanks! help me a lot.

rmrfboy commented Feb 19, 2013

thanks! help me a lot.

@markkhosla

This comment has been minimized.

Show comment
Hide comment
@markkhosla

markkhosla Mar 18, 2013

This is brilliant - thanks!

This is brilliant - thanks!

@boris-chervenkov

This comment has been minimized.

Show comment
Hide comment

🍺

@pankajwellogic

This comment has been minimized.

Show comment
Hide comment
@pankajwellogic

pankajwellogic May 23, 2013

Thanks a lot... working perfectly fine.

Thanks a lot... working perfectly fine.

@thatKaran

This comment has been minimized.

Show comment
Hide comment
@thatKaran

thatKaran Jun 7, 2013

I'm getting 'broken pipe' error. Any ideas?

Traceback (most recent call last):
  File ".\sublime_plugin.py", line 362, in run_
  File ".\tidy_xml.py", line 10, in run
  File ".\subprocess.py", line 701, in communicate
  File ".\subprocess.py", line 911, in _communicate
IOError: [Errno 32] Broken pipe

I'm getting 'broken pipe' error. Any ideas?

Traceback (most recent call last):
  File ".\sublime_plugin.py", line 362, in run_
  File ".\tidy_xml.py", line 10, in run
  File ".\subprocess.py", line 701, in communicate
  File ".\subprocess.py", line 911, in _communicate
IOError: [Errno 32] Broken pipe
@newthinker

This comment has been minimized.

Show comment
Hide comment
@newthinker

newthinker Jun 8, 2013

pretty_json is working, but tiny_xml isn't and there is no response when i use the key "ctrl+shift+x". i don't know why.

pretty_json is working, but tiny_xml isn't and there is no response when i use the key "ctrl+shift+x". i don't know why.

@newthinker

This comment has been minimized.

Show comment
Hide comment
@newthinker

newthinker Jun 8, 2013

i know, there isn't libtidy. The tool is very good and thank you very much!

i know, there isn't libtidy. The tool is very good and thank you very much!

@iamsilvio

This comment has been minimized.

Show comment
Hide comment
@iamsilvio

iamsilvio Jul 3, 2013

Changed Tidy xml to work with Sublime Text 3 Beta 3047
Added some error output to the console

https://gist.github.com/skat-delayed/5923717

Changed Tidy xml to work with Sublime Text 3 Beta 3047
Added some error output to the console

https://gist.github.com/skat-delayed/5923717

@gree2

This comment has been minimized.

Show comment
Hide comment
@gree2

gree2 Dec 3, 2013

nice work
thx

gree2 commented Dec 3, 2013

nice work
thx

@knnwulf

This comment has been minimized.

Show comment
Hide comment
@knnwulf

knnwulf Jan 30, 2014

nice, work perfect to me.

Thx!

knnwulf commented Jan 30, 2014

nice, work perfect to me.

Thx!

@GioCirque

This comment has been minimized.

Show comment
Hide comment
@GioCirque

GioCirque Apr 30, 2014

Pretty JSON works great for me and installs direct and clean through Package Control.

https://sublime.wbond.net/packages/Pretty%20JSON

Pretty JSON works great for me and installs direct and clean through Package Control.

https://sublime.wbond.net/packages/Pretty%20JSON

@ravijoshi2

This comment has been minimized.

Show comment
Hide comment
@ravijoshi2

ravijoshi2 Jan 13, 2016

Very impressive. Thank you!

Very impressive. Thank you!

@wangyijiangshui

This comment has been minimized.

Show comment
Hide comment
@wangyijiangshui

wangyijiangshui Jun 28, 2017

It is very good , Thank you !

It is very good , Thank you !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment