FlyText icon FlyText

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

ShortcutAction
Ctrl+NNew file
Ctrl+OOpen file
Ctrl+S / Ctrl+Shift+SSave / Save as
Ctrl+W / Ctrl+Shift+WClose tab / Close all
Ctrl+Tab / Ctrl+Shift+TabNext / previous tab
Ctrl+PGo to file

Editing

ShortcutAction
Ctrl+Z / Ctrl+Shift+Z / Ctrl+YUndo / redo
Ctrl+X / Ctrl+C / Ctrl+VCut / copy / paste
Ctrl+A / Ctrl+DSelect all / multi-select next occurrence
Ctrl+/Toggle comment
Alt+CColumn edit mode (Ctrl + drag also makes a rectangular selection)
Alt+ZToggle word wrap
Ctrl+\Toggle split view

Find & navigation

ShortcutAction
Ctrl+F / Ctrl+HFind / replace
F3 / Shift+F3Next / previous match
Ctrl+GGo to line
Ctrl+RGo to symbol
Ctrl+Shift+PCommand palette
F2Toggle bookmark
Ctrl+Alt+F2Clear all bookmarks

View & UI

ShortcutAction
F11 / Shift+F11Full screen / focus mode
Ctrl+K Ctrl+BToggle sidebar (two-part chord)
Ctrl+,Open settings
Ctrl+0Reset zoom
Ctrl+wheelZoom (−20% to +40%)

Text tools & macros

ShortcutAction
F7Word count
F8 / Shift+F8Sort lines ascending / descending
Ctrl+Shift+Alt+U / +LUpper case / lower case
Ctrl+Shift+Alt+DRemove duplicate lines
Ctrl+Shift+Alt+ERemove empty lines
Ctrl+Shift+Alt+TTrim trailing spaces
Ctrl+Alt+1 / 2 / 3Line endings → CRLF / LF / CR
Ctrl+B / Ctrl+BreakBuild / cancel build
Ctrl+Q / Ctrl+Shift+QRecord macro / play macro
Why do text tools all use Ctrl+Shift+Alt?

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 written Control), Shift, Alt — any combination, or none.
  • Alphanumerics: a single character, case-insensitive. a equals A.
  • Function keys: F1 through F24.
  • Named keys: space, comma, period, slash, minus, equal, semicolon, tab, enter (alias return), esc (alias escape), 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:

CategoryCommand names
Filesnew_file open_file open_folder save save_as save_all print
close_tab close_all
Findfind replace find_all find_next find_prev
Go togoto_file goto_symbol goto_line command_palette
Editingtoggle_comment column_edit_mode
Bookmarkstoggle_bookmark next_bookmark prev_bookmark clear_bookmarks
Text toolsupper_case lower_case sort_lines_asc sort_lines_desc unique_lines remove_empty_lines trim_trailing_spaces word_count
Viewsplit_view sidebar status_bar hex_mode word_wrap fullscreen focus_mode
Build & macrosbuild cancel_build macro_record macro_playback
Settingssettings 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:

  1. Custom bindings (keybindings.json) — matched first
  2. Built-in extra shortcuts (Alt combos, F7/F8, Ctrl+\, etc.)
  3. 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

SymptomCause 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.