Giter Club home page Giter Club logo

vim-json's Introduction

Better JSON for VIM

Distinct highlighting of keywords vs values, JSON-specific (non-JS) warnings, quote concealing.
JSON syntax coloring
Customization of Jeroen Ruigrok van der Werven's vim-json highlighting script with Rogerz Zhang's indent script.
Pathogen-friendly.

Specific customizations

  • Added distinct highlighting for keywords vs values! (This is what made me start this plugin.)
  • Added concealing of double quotes, for a minimalist CoffeeScript-inspired look.
    • This requires Vim 7.3+. To disable it add let g:vim_json_syntax_conceal = 0 to your .vimrc.
  • Added folding of {...} and [...] blocks. To enable it :setlocal foldmethod=syntax (do it permanently on the ftplugin/json.vim file).
  • JSON-specific warnings (red highlights):
    • Warn about decimals smaller than 1 that don't start with a 0 (so .1 gives a warning, it should be 0.1).
    • Warn about comments and trailing semicolons.
    • Warn about trailing commas after the last element in arrays or objects.
  • Recognize .jsonp file type. In JSONP, the wrapping function call at the beginning and closing semicolon are recognized.

Screenshots

No syntax coloring: wall of text.
No syntax coloring

Javascript (or for that matter, the standard json.vim) syntax coloring: Barely an improvement from no syntax coloring.
Javascript syntax coloring

Better JSON syntax coloring: a more meaningful, distinct and elegant presentation.
JSON syntax coloring

Why use separate JSON highlighting instead of just Javascript?

Here's 2 compelling reasons:

  1. All JSON is Javascript but NOT all Javascript is JSON. So {property:1} is invalid because property does not have double quotes around it. {'property':1} is also invalid, because it's single quoted while the only thing that can placate the JSON specification is double quoting. JSON is even fuzzy enough that {"property":.1} is invalid too, because you should have of course written {"property":0.1}. Also, don't even think about having comments or semicolons, you guessed it: they're invalid. The point being that your syntax highlighter should warn you about these errors, in realtime, which is something that the Javascript highlighter doesn't (because in Javacript they're not errors!).

  2. Distinct highlighting for keywords. JSON is an extremely lightweight data format but at its core lies an inescapable conceptual distinction: there are keywords and there are values. There's nothing much to the format besides that, so we might as well display keywords and values differently. This is something that gets lost with Javascript-inspired syntax highlighters, which see keywords as just another string since JSON requires them double quoted. So JSON files remain an impenetrable, indistinct wall of text.

Common problems

Most trouble, little as it is, has to do with Vim's newfangled concealing, which most people aren't yet familiar with, as it was introduced as recently as Vim 7.3+. If you just don't care for concealing you can easily disable it adding let g:vim_json_syntax_conceal = 0 to your .vimrc.

Concealing is nice for viewing but when you want to edit it should get out of your way seamlessly so you can see the actual code. Thus the default behavior should be text shown normally on the line your cursor is at, on all modes (normal, visual, insert). If this isn't the case and the concealing doesn't go away (not even in insert mode), you most likely have an interfering plugin (indentLine, for instance). You need to look at your concealcursor setting (which can be set through this plugin with g:vim_json_syntax_concealcursor).

It's a good idea to test drive with the files json-test.json and jsonp-test.jsonp first thing.

vim-json's People

Contributors

elzr avatar amadeus avatar scharfie avatar inkarkat avatar leshill avatar knowledgejunkie avatar promisedlandt avatar strubbl avatar

Stargazers

Alejandro avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.