Skip to main content

JSON editor with vim-style keybindings

Project description

jvim

JSON editor with vim-style keybindings, built with Textual.

한국어

Features

  • Vim-style modal editing - Normal, Insert, Command, and Search modes
  • Syntax highlighting - JSON-aware colorization
  • JSON validation - Real-time validation with error reporting
  • JSONPath search - Search using JSONPath expressions ($.foo.bar)
  • JSONL support - Edit JSON Lines files with smart formatting
  • Embedded JSON editing - Edit JSON strings within JSON with nested level support
  • Bracket matching - Jump to matching brackets with %
  • Undo/Redo - Full undo history

Installation

pip install jvim

Usage

# Open a file
jvim data.json

# Open in read-only mode
jvim -R data.json

# Create new file
jvim newfile.json

Also available as jvi and jv shortcuts.

JSONL Support

vj provides special handling for JSON Lines (.jsonl) files:

  • Pretty-printed editing: Each JSONL record is automatically formatted with indentation for easy reading and editing
  • Compact saving: When you save, each record is minified back to a single line, preserving the JSONL format
  • Record numbers: A second column shows the record number (1, 2, 3...) for easy navigation
  • Floating header: When scrolling through a multi-line record, the physical line number stays visible at the top

Example: A JSONL file with two records:

{"name": "Alice", "age": 30}
{"name": "Bob", "age": 25}

Opens in vj as:

{
    "name": "Alice",
    "age": 30
}
{
    "name": "Bob",
    "age": 25
}

And saves back to the original compact format.

Embedded JSON Editing

JSON files often contain escaped JSON strings as values. vj lets you edit these nested JSON structures naturally.

How it works

  1. Position your cursor on a line containing a JSON string value
  2. Type ej in normal mode
  3. A new editor panel opens with the parsed and formatted JSON
  4. Edit the embedded JSON with full syntax highlighting and validation
  5. Save with :w to update the parent document (minified) or :q to cancel

Nested levels

You can edit embedded JSON within embedded JSON:

  • The panel title shows the current nesting level: Edit Embedded JSON (level 1)
  • A [+] indicator appears when you have unsaved changes
  • :w saves and returns to the previous level
  • :q! discards changes and returns to the previous level

Example

Given this JSON:

{
    "config": "{\"host\": \"localhost\", \"port\": 8080}"
}

Using ej on the config line opens:

{
    "host": "localhost",
    "port": 8080
}

After editing and saving, the parent is updated with the minified result.

Keybindings

Movement

Key Action
h j k l Left/Down/Up/Right
w b Word forward/backward
0 $ ^ Line start/end/first char
gg G File start/end
% Jump to matching bracket
PgUp PgDn Page up/down
Ctrl+d/u Half page down/up

Search

Key Action
/ Search forward
? Search backward
n N Next/previous match
$. $[ JSONPath search (auto-detect)
\j JSONPath suffix for patterns
\c \C Case insensitive/sensitive

Insert Mode

Key Action
i I Insert at cursor/line start
a A Append after cursor/line end
o O Open line below/above

Editing

Key Action
x Delete char
dd Delete line
dw d$ Delete word/to end
cw cc Change word/line
r{c} Replace char
J Join lines
yy p P Yank/paste after/before
u Undo
Ctrl+r Redo
. Repeat last edit
ej Edit embedded JSON string

Commands

Command Action
:w Save
:w {file} Save as
:e {file} Open file
:fmt Format JSON
:q Quit
:q! Quit (discard changes)
:wq Save and quit
:help Toggle help panel

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jvim-0.1.1.tar.gz (23.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jvim-0.1.1-py3-none-any.whl (23.1 kB view details)

Uploaded Python 3

File details

Details for the file jvim-0.1.1.tar.gz.

File metadata

  • Download URL: jvim-0.1.1.tar.gz
  • Upload date:
  • Size: 23.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for jvim-0.1.1.tar.gz
Algorithm Hash digest
SHA256 3df6fcfc4d89db51781583d9e76f0c9b222e4a9de6c72806fb80ed780f1f600c
MD5 5b2632378f569074952f68df8f687852
BLAKE2b-256 6c1e8c278fd5b3bbd26f0288a9de681116b3d8c2b016b5475cb2c696cae4f809

See more details on using hashes here.

File details

Details for the file jvim-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: jvim-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 23.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for jvim-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c139d8c9a660ffb3ea43b0cac36c1447ff32c174b8da532f1e2e6ff32c78badb
MD5 05d55f461bf5cd03f3c0ccef859c9c5c
BLAKE2b-256 e75c612758fee2f7e9854a864d27495e6a9ce98d3d176d1bd176cb591e38d603

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page