FlyText Keyboard Shortcuts: The Complete Guide to keybindings.json
Every command in FlyText can be rebound. This post gives you a cheat sheet of all default shortcuts plus the complete keybindings.json syntax: every available command name, key naming rules, and how to troubleshoot bindings.
Migrating from VS Code or Sublime? There are ready-to-copy migration configs at the end.
1. Default shortcuts cheat sheet
Open Help → Key Bindings in FlyText to see this table at any time, including your custom bindings.
Files & tabs
| Shortcut | Action |
|---|---|
Ctrl+N | New file |
Ctrl+O | Open file |
Ctrl+S / Ctrl+Shift+S | Save / Save as |
Ctrl+W / Ctrl+Shift+W | Close tab / Close all |
Ctrl+Tab / Ctrl+Shift+Tab | Next / previous tab |
Ctrl+P | Go to file |
Editing
| Shortcut | Action |
|---|---|
Ctrl+Z / Ctrl+Shift+Z / Ctrl+Y | Undo / redo |
Ctrl+X / Ctrl+C / Ctrl+V | Cut / copy / paste |
Ctrl+A / Ctrl+D | Select all / multi-select next occurrence |
Ctrl+/ | Toggle comment |
Alt+C | Column edit mode (Ctrl + drag also makes a rectangular selection) |
Alt+Z | Toggle word wrap |
Ctrl+\ | Toggle split view |
Find & navigation
| Shortcut | Action |
|---|---|
Ctrl+F / Ctrl+H | Find / replace |
F3 / Shift+F3 | Next / previous match |
Ctrl+G | Go to line |
Ctrl+R | Go to symbol |
Ctrl+Shift+P | Command palette |
F2 | Toggle bookmark |
Ctrl+Alt+F2 | Clear all bookmarks |
View & UI
| Shortcut | Action |
|---|---|
F11 / Shift+F11 | Full screen / focus mode |
Ctrl+K Ctrl+B | Toggle sidebar (two-part chord) |
Ctrl+, | Open settings |
Ctrl+0 | Reset zoom |
Ctrl+wheel | Zoom (−20% to +40%) |
Text tools & macros
| Shortcut | Action |
|---|---|
F7 | Word count |
F8 / Shift+F8 | Sort lines ascending / descending |
Ctrl+Shift+Alt+U / +L | Upper case / lower case |
Ctrl+Shift+Alt+D | Remove duplicate lines |
Ctrl+Shift+Alt+E | Remove empty lines |
Ctrl+Shift+Alt+T | Trim trailing spaces |
Ctrl+Alt+1 / 2 / 3 | Line endings → CRLF / LF / CR |
Ctrl+B / Ctrl+Break | Build / cancel build |
Ctrl+Q / Ctrl+Shift+Q | Record macro / play macro |
Deliberate design. Text tools (sort, dedupe, case) are low-frequency but destructive — a high modifier combo
prevents accidental triggers and leaves all high-frequency keys untouched. If you use some of them often,
rebind them in keybindings.json.
2. Where the config file lives
keybindings.json lives in FlyText's data directory:
// Normal install (default)
%APPDATA%\FlyText\keybindings.json
// Portable mode: put a portable.ini or portable.txt next to FlyText.exe
// (contents don't matter, existence is what counts) — the data directory
// then becomes the exe's directory
The fastest way: open it directly from FlyText via Menu → Settings → Key Bindings
(command name key_bindings). FlyText opens the JSON in its own editor; save with Ctrl+S
and it applies instantly.
If the file doesn't exist under %APPDATA%\FlyText\, FlyText falls back to reading the same file
next to the exe — old portable deployments keep working.
3. Config syntax
The top level is an array; each element is one binding rule with exactly two fields:
[
{ "key": "Ctrl+Shift+Alt+D", "command": "unique_lines" },
{ "key": "Ctrl+Alt+S", "command": "sort_lines_asc" },
{ "key": "Alt+F12", "command": "goto_symbol" },
{ "key": "Ctrl+Shift+S", "command": "save_all" }
]
key: the key combination
Joined with +, order doesn't matter; modifiers and the main key are both recognized:
- Modifiers:
Ctrl(also writtenControl),Shift,Alt— any combination, or none. - Alphanumerics: a single character, case-insensitive.
aequalsA. - Function keys:
F1throughF24. - Named keys:
space,comma,period,slash,minus,equal,semicolon,tab,enter(aliasreturn),esc(aliasescape),backspace,delete,insert,home,end,pageup,pagedown,left,right,up,down.
command: command name or command ID
Write the command name directly, or a numeric command ID as a fallback (any menu command can be bound this way). All built-in command names:
| Category | Command names |
|---|---|
| Files | new_file open_file open_folder save save_as save_all print |
close_tab close_all | |
| Find | find replace find_all find_next find_prev |
| Go to | goto_file goto_symbol goto_line command_palette |
| Editing | toggle_comment column_edit_mode |
| Bookmarks | toggle_bookmark next_bookmark prev_bookmark clear_bookmarks |
| Text tools | upper_case lower_case sort_lines_asc sort_lines_desc unique_lines remove_empty_lines trim_trailing_spaces word_count |
| View | split_view sidebar status_bar hex_mode word_wrap fullscreen focus_mode |
| Build & macros | build cancel_build macro_record macro_playback |
| Settings | settings key_bindings |
4. Save = apply
No restart needed. After editing keybindings.json in FlyText and saving with
Ctrl+S, the program detects the file change and reloads bindings immediately.
This is also the recommended debugging loop: keep keybindings.json open in one tab, test keys in
another, no restarting.
To confirm a rule parsed correctly, open Help → Key Bindings — if your binding shows up under
the ---- Custom (keybindings.json) ---- section, it parsed.
5. Priority and conflicts
When a key is pressed, matching happens in a fixed order:
- Custom bindings (
keybindings.json) — matched first - Built-in extra shortcuts (Alt combos, F7/F8,
Ctrl+\, etc.) - Native Ctrl+letter (
Ctrl+N/O/S/W/F/H/P/G/A/B/Q/U/L/K/R/D,Ctrl+,,Ctrl+Space,Ctrl+plus/minus,F1, etc.)
First match wins; later rules never run. That means:
- You can safely override any built-in shortcut, including core keys like
Ctrl+S. - If a custom rule fails to parse (typo'd command name, unsupported key), it's silently skipped and the key falls through to built-in rules — which feels like "it didn't take effect".
6. Migration configs: copy and paste
Coming from VS Code
[
{ "key": "Ctrl+Shift+E", "command": "sidebar" },
{ "key": "Ctrl+Shift+F", "command": "find_all" },
{ "key": "Ctrl+Shift+O", "command": "goto_symbol" },
{ "key": "Ctrl+K", "command": "goto_file" },
{ "key": "Alt+Up", "command": "goto_line" },
{ "key": "Ctrl+Shift+K", "command": "close_tab" },
{ "key": "Ctrl+Shift+Alt+Down", "command": "column_edit_mode" }
]
Coming from Sublime Text
[
{ "key": "Ctrl+Shift+P", "command": "command_palette" },
{ "key": "Ctrl+P", "command": "goto_file" },
{ "key": "Ctrl+R", "command": "goto_symbol" },
{ "key": "Ctrl+G", "command": "goto_line" },
{ "key": "Ctrl+Shift+D", "command": "column_edit_mode" },
{ "key": "Ctrl+K", "command": "upper_case" },
{ "key": "Ctrl+Shift+B", "command": "build" }
]
7. Troubleshooting
| Symptom | Cause and fix |
|---|---|
| No bindings work at all | Malformed JSON, or missing outer [ ]. FlyText reads between the first [ and last ]; a bracket error makes it skip the entire file. |
| Other bindings work, this one doesn't | Misspelled command name (case-sensitive, all lowercase with underscores) or an unsupported key name. A numeric command ID works as a fallback. |
| Key is swallowed by the system or another app | Typical culprits: Ctrl+Alt+Del, Win combos, IME shortcuts. System-level keys can't be captured by any app — pick a different combo. |
| Alt combos don't respond | Alt combos arrive as WM_SYSKEYDOWN; FlyText handles both message types. If it still fails, check that the key wasn't handed to an input method. |
| Edits don't show in the Key Bindings dialog | You're probably editing a file other than the one being read. Open it via the menu's "Key Bindings" entry and make sure you're editing the copy under %APPDATA%\FlyText\. |
Make FlyText yours
A ~2 MB download that opens 2GB+ files instantly — with every shortcut rebindable to your muscle memory.
FAQ
Can I wipe all built-in shortcuts and use only custom ones?
No. Built-in shortcuts can't be disabled, only overridden — since custom bindings have top priority, the effect is equivalent to replacement.
Are two-part chords supported (like Ctrl+K Ctrl+B)?
Ctrl+K Ctrl+B is a built-in fixed binding (toggle sidebar). keybindings.json currently supports single chords only — two-part sequences can't be customized.
Can I bind an external program?
Not directly. But you can configure an external command in build.json and bind the build command to the key you want.
Is there a limit on the number of bindings?
No hard limit; the whole rules array is loaded. Many bindings add per-keystroke matching overhead — imperceptible in practice.
Do portable and installed versions share the same config file?
Depends on the portable marker. Place a portable.ini or portable.txt next to the exe and the data directory switches to the exe's folder — take your config with you on a USB stick.