https://github.com/xinnjie/onekeymap-cli
A command-line tool that help you sync keyboard shortcuts across all your code editors.
https://github.com/xinnjie/onekeymap-cli
export go helix hotkeys import intellij keybinding keybindings keyboard-shortcuts keymap migration shortcuts vscode zed
Last synced: 5 months ago
JSON representation
A command-line tool that help you sync keyboard shortcuts across all your code editors.
- Host: GitHub
- URL: https://github.com/xinnjie/onekeymap-cli
- Owner: xinnjie
- License: mit
- Created: 2025-10-03T14:14:48.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2025-10-30T11:06:24.000Z (5 months ago)
- Last Synced: 2025-10-30T11:44:57.361Z (5 months ago)
- Topics: export, go, helix, hotkeys, import, intellij, keybinding, keybindings, keyboard-shortcuts, keymap, migration, shortcuts, vscode, zed
- Language: Go
- Homepage:
- Size: 789 KB
- Stars: 5
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
Awesome Lists containing this project
README
[](https://go.dev/)[](LICENSE.md)[](https://github.com/xinnjie/onekeymap-cli/releases)
---
**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 |
|---|---|---|
| [
](https://asciinema.org/a/748300) | [
](https://asciinema.org/a/ZNqGYNMKs0jVh5qH6Smv6ysni) | [
](https://asciinema.org/a/748319) |
| 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**
```bash
brew tap xinnjie/onekeymap
brew install onekeymap-cli
```
#### Linux
- **Debian/Ubuntu (.deb)**
```bash
wget https://github.com/xinnjie/onekeymap-cli/releases/download/v0.5.1/onekeymap-cli_0.5.1_x86_64.deb
sudo dpkg -i onekeymap-cli_0.5.1_x86_64.deb
```
- **Fedora/RHEL/CentOS (.rpm)**
```bash
wget https://github.com/xinnjie/onekeymap-cli/releases/download/v0.5.1/onekeymap-cli_0.5.1_x86_64.rpm
sudo rpm -i onekeymap-cli_0.5.1_x86_64.rpm
```
- **Alpine (.apk)**
```bash
wget https://github.com/xinnjie/onekeymap-cli/releases/download/v0.5.1/onekeymap-cli_0.5.1_x86_64.apk
sudo apk add --allow-untrusted onekeymap-cli_0.5.1_x86_64.apk
```
#### Windows
- **Scoop**
```powershell
scoop bucket add xinnjie https://github.com/xinnjie/scoop-bucket
scoop install onekeymap-cli
```
- **Winget**
```powershell
winget install xinnjie.onekeymap-cli
```
- **Zip Archive**
Download `onekeymap-cli_Windows_.zip` from [GitHub Releases](https://github.com/xinnjie/onekeymap-cli/releases), extract it, and add the directory to your PATH, or run:
```powershell
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**
```bash
go install github.com/xinnjie/onekeymap-cli/cmd/onekeymap-cli@latest
```
- **From Release:**
Download the latest binary from [GitHub Releases](https://github.com/xinnjie/onekeymap-cli/releases/latest).
### Basic Usage
**Import from editors interactively:**
```bash
onekeymap-cli import
```
**Export to editors interactively:**
```bash
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`:
```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** | β
| β
| shortcut coverage is still limited (see [Action Support Matrix](action-support-matrix.md)) |
| **Helix** | β | β
| TOML configuration support; shortcut coverage is still limited (see [Action Support Matrix](action-support-matrix.md)) |
| **Vim/Neovim** | π§ | π§ | Planned |
> See all supported actions: [action-support-matrix.md](action-support-matrix.md)
---
## Contributing
Contributions are welcome! Check out the [Contributing Guide](CONTRIBUTING.md) 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](CONTRIBUTING.md#enhancing-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](CONTRIBUTING.md#development).
---
## Support
- Issues: [](https://github.com/xinnjie/onekeymap-cli/issues)
- Discussions: [](https://discord.com/invite/fW3TWuXj9A)
---
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:
```json
{
"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](https://www.onekeymap.com/)β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.
[](https://www.onekeymap.com/)
---