Skip to content

xinnjie/onekeymap-cli

Repository files navigation

OneKeymap CLI logo

OneKeymap CLI

Go VersionLicenseRelease


Sync your keyboard shortcuts across all your code editors.

OneKeymap CLI is a powerful command-line tool that lets you import, export, and synchronize keyboard shortcuts between VSCode, IntelliJ IDEA, Zed, Xcode, Helix, and more. Stop reconfiguring keybindings every time you switch editorsβ€”maintain one universal keymap and deploy it everywhere.

Import Keymap View Keymap Export Keymap
Import Demo View Demo Export Demo
Auto-detects your editor's keymap file and lets you know keybindings to import. View keybindings by category and navigate with arrow keys. Shows a diff of your target keymap file before exporting.

πŸš€ Quick Start

Installation

macOS

  • Homebrew
    brew tap xinnjie/onekeymap
    brew install onekeymap-cli

Linux

  • Debian/Ubuntu (.deb)
    wget https://github.com/xinnjie/onekeymap-cli/releases/download/v0.7.1/onekeymap-cli_0.7.1_x86_64.deb
    sudo dpkg -i onekeymap-cli_0.7.1_x86_64.deb
  • Fedora/RHEL/CentOS (.rpm)
    wget https://github.com/xinnjie/onekeymap-cli/releases/download/v0.7.1/onekeymap-cli_0.7.1_x86_64.rpm
    sudo rpm -i onekeymap-cli_0.7.1_x86_64.rpm
  • Alpine (.apk)
    wget https://github.com/xinnjie/onekeymap-cli/releases/download/v0.7.1/onekeymap-cli_0.7.1_x86_64.apk
    sudo apk add --allow-untrusted onekeymap-cli_0.7.1_x86_64.apk

Windows

  • Scoop

    scoop bucket add xinnjie https://github.com/xinnjie/scoop-bucket
    scoop install onekeymap-cli
  • Winget

    winget install xinnjie.onekeymap-cli
  • Zip Archive Download onekeymap-cli_Windows_<arch>.zip from GitHub Releases, extract it, and add the directory to your PATH, or run:

    Expand-Archive -Path .\onekeymap-cli_*.zip -DestinationPath "$Env:USERPROFILE\onekeymap-cli"
    setx PATH "$Env:USERPROFILE\onekeymap-cli;$Env:PATH"

Cross-platform (Linux/MacOS/Windows)

  • Go Install

    go install github.com/xinnjie/onekeymap-cli/cmd/onekeymap-cli@latest
  • From Release: Download the latest binary from GitHub Releases.

Basic Usage

Import from editors interactively:

onekeymap-cli import

Export to editors interactively:

onekeymap-cli export

Useful Commands

The following commands help you get the most from the OneKeymap CLI:

  • onekeymap-cli help Quick summary of all subcommands and available flags.
  • onekeymap-cli import Convert editor-specific shortcuts into the universal onekeymap.json format.
  • onekeymap-cli export Generate editor keymap files from your universal keymap.
  • onekeymap-cli migrate Chain import and export in one step to move between editors.
  • onekeymap-cli view Inspect the actions and bindings stored in an existing universal keymap.

You can append -h or --help to any subcommand for detailed flag descriptions and examples.


Configuration

OneKeymap can be configured via a config file at ~/.config/onekeymap/config.yaml:

# Default path for universal keymap
onekeymap: ~/.config/onekeymap/keymap.json

# Editor-specific config paths (optional, auto-detected by default)
editors:
  vscode:
    keymap_path: ~/Library/Application Support/Code/User/keybindings.json
  zed:
    keymap_path: ~/.config/zed/keymap.json
  intellij:
    keymap_path: ~/Library/Application Support/JetBrains/IntelliJIdea2024.1/keymaps/custom.xml

🧩 Supported Editors & Actions

Editor Import Export Notes
VSCode βœ… βœ…
Zed βœ… βœ…
IntelliJ IDEA βœ… βœ…
Xcode(experimental) βœ… βœ… shortcut coverage is still limited (see Action Support Matrix)
Helix(experimental) ❌ βœ… TOML configuration support; shortcut coverage is still limited (see Action Support Matrix)
Vim/Neovim 🚧 🚧 Planned

See all supported actions: action-support-matrix.md


Contributing

Contributions are welcome! Check out the Contributing Guide for more details on how to get started. Here are some ways you can help:

  • Add Editor Support: Implement a new editor plugin
  • Improve Mappings: Enhance the action mapping configuration
  • Report Bugs: Open an issue with reproduction steps
  • Documentation: Improve docs and examples

For development setup and building from source, see the Development section in CONTRIBUTING.md.


Support

  • Issues: GitHub Issues
  • Discussions: Discord

How It Works

OneKeymap uses a universal keymap format that represents keyboard shortcuts in an editor-agnostic way. Here's the workflow:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   VSCode    │──┐
β”‚  Keybindingsβ”‚  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
                 β”‚  Import
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚    ↓
β”‚  IntelliJ   │──┼──────────────┐
β”‚   Keymap    β”‚  β”‚              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚    β”‚  Universal Keymap  β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚    β”‚   (onekeymap.json) β”‚
β”‚     Zed     β”‚β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚   Keymap    β”‚                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       Export    ↓
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚  Any Supported Editor β”‚
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Universal Keymap Format

Your keymap is stored in a clean, human-readable JSON format:

{
  "keymaps": [
    {
      "action": "actions.edit.copy",
      "keys": "ctrl+c"
    },
    {
      "action": "actions.view.showCommandPalette",
      "keys": "ctrl+shift+p"
    },
    {
      "action": "actions.editor.quickFix",
      "keys": "ctrl+."
    }
  ]
}

Action Mappings

OneKeymap maintains a comprehensive mapping that translates between editor-specific commands and universal actions. For example:

  • actions.edit.copy maps to:
    • VSCode: editor.action.clipboardCopyAction
    • IntelliJ: $Copy
    • Zed: editor::Copy

This mapping layer handles context-specific behaviors, stateful toggles, and editor quirks automatically.


✨ Companion App: OneKeymap GUI

Prefer a polished interface? Take a look at OneKeymap.appβ€”a paid GUI companion built on top of the CLI. onekeymap-cli will always remain free and open; the app is simply an optional bonus for those who enjoy visual workflows.

OneKeymap GUI screenshot


About

A command-line tool that help you sync keyboard shortcuts across all your code editors.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Contributors 3

  •  
  •  
  •  

Languages