# Helix Editor > To override global configuration parameters, create aconfig.tomlfile located in your config directory: --- # Source: https://docs.helix-editor.com/configuration.html # Configuration To override global configuration parameters, create aconfig.tomlfile located in your config directory: - Linux and Mac:~/.config/helix/config.toml - Windows:%AppData%\helix\config.toml > 💡 You can easily open the config file by typing:config-openwithin Helix normal mode. Example config: ``` theme = "onedark" [editor] line-number = "relative" mouse = false [editor.cursor-shape] insert = "bar" normal = "block" select = "underline" [editor.file-picker] hidden = false ``` You can use a custom configuration file by specifying it with the-cor--configcommand line argument, for examplehx -c path/to/custom-config.toml. You can reload the config file by issuing the:config-reloadcommand. Alternatively, on Unix operating systems, you can reload it by sending the USR1 signal to the Helix process, such as by using the commandpkill -USR1 hx. Finally, you can have aconfig.tomllocal to a project by putting it under a.helixdirectory in your repository. Its settings will be merged with the configuration directoryconfig.tomland the built-in configuration. --- # Source: https://docs.helix-editor.com/ # Helix Docs for bleeding edge master can be found athttps://docs.helix-editor.com/master. See theusagesection for a quick overview of the editor,keymapsection for all available keybindings and theconfigurationsection for defining custom keybindings, setting themes, etc. For everything else (e.g., how to install supported language servers), see theHelix Wiki. Refer theFAQfor common questions. --- # Source: https://docs.helix-editor.com/install.html # Installing Helix The typical way to install Helix is viayour operating system's package manager. Note that: - To get the latest nightly version of Helix, you need tobuild from source. - To take full advantage of Helix, install the language servers for your preferred programming languages. See thewikifor instructions. ## Pre-built binaries Download pre-built binaries from theGitHub Releases page. The tarball contents include anhxbinary and aruntimedirectory. To set up Helix: - Add thehxbinary to your system's$PATHto allow it to be used from the command line. - Copy theruntimedirectory to a location thathxsearches for runtime files. A typical location on Linux/macOS is~/.config/helix/runtime. To see the runtime directories thathxsearches, runhx --health. If necessary, you can override the default runtime location by setting theHELIX_RUNTIMEenvironment variable. --- # Source: https://docs.helix-editor.com/keymap.html ## Keymap - Normal modeMovementChangesShellSelection manipulationSearchMinor modesView modeGoto modeMatch modeWindow modeSpace modePopupCompletion MenuSignature-help PopupUnimpaired - Insert mode - Select / extend mode - Picker - Prompt > 💡 Mappings marked (LSP) require an active language server for the file. > 💡 Mappings marked (TS) require a tree-sitter grammar for the file type. > ⚠️ Some terminals' default key mappings conflict with Helix's. If any of the mappings described on this page do not work as expected, check your terminal's mappings to ensure they do not conflict. See thewikifor known conflicts. ## Normal mode Normal mode is the default mode when you launch helix. You can return to it from other modes by pressing theEscapekey. ### Movement > NOTE: Unlike Vim,f,F,tandTare not confined to the current line. KeyDescriptionCommandh,LeftMove leftmove_char_leftj,DownMove downmove_visual_line_downk,UpMove upmove_visual_line_upl,RightMove rightmove_char_rightwMove next word startmove_next_word_startbMove previous word startmove_prev_word_starteMove next word endmove_next_word_endWMove next WORD startmove_next_long_word_startBMove previous WORD startmove_prev_long_word_startEMove next WORD endmove_next_long_word_endtFind till next charfind_till_charfFind next charfind_next_charTFind till previous chartill_prev_charFFind previous charfind_prev_charGGo to line numbergoto_lineAlt-.Repeat last motion (f,t,m,[or])repeat_last_motionHomeMove to the start of the linegoto_line_startEndMove to the end of the linegoto_line_endCtrl-b,PageUpMove page uppage_upCtrl-f,PageDownMove page downpage_downCtrl-uMove cursor and page half page uppage_cursor_half_upCtrl-dMove cursor and page half page downpage_cursor_half_downCtrl-iJump forward on the jumplistjump_forwardCtrl-oJump backward on the jumplistjump_backwardCtrl-sSave the current selection to the jumplistsave_selection ### Changes KeyDescriptionCommandrReplace with a characterreplaceRReplace with yanked textreplace_with_yanked~Switch case of the selected textswitch_case`Set the selected text to lower caseswitch_to_lowercaseAlt-`Set the selected text to upper caseswitch_to_uppercaseiInsert before selectioninsert_modeaInsert after selection (append)append_modeIInsert at the start of the lineinsert_at_line_startAInsert at the end of the lineinsert_at_line_endoOpen new line below selectionopen_belowOOpen new line above selectionopen_above.Repeat last insertN/AuUndo changeundoURedo changeredoAlt-uMove backward in historyearlierAlt-UMove forward in historylateryYank selectionyankpPaste after selectionpaste_afterPPaste before selectionpaste_before"Select a register to yank to or paste fromselect_register>Indent selectionindent. KeyDescriptionCommand/Search for regex patternsearch?Search for previous patternrsearchnSelect next search matchsearch_nextNSelect previous search matchsearch_prev*Use current selection as the search pattern, automatically wrapping with\bon word boundariessearch_selection_detect_word_boundariesAlt-*Use current selection as the search patternsearch_selection ### Minor modes These sub-modes are accessible from normal mode and typically switch back to normal mode after a command. KeyDescriptionCommandvEnterselect (extend) modeselect_modegEntergoto modeN/AmEntermatch modeN/A:Enter command modecommand_modezEnterview modeN/AZEnter stickyview modeN/ACtrl-wEnterwindow modeN/ASpaceEnterspace modeN/A These modes (except command mode) can be configured byremapping keys. #### View mode Accessed by typingzinnormal mode. View mode is intended for scrolling and manipulating the view without changing the selection. The "sticky" variant of this mode (accessed by typingZin normal mode) is persistent and can be exited using the escape key. This is useful when you're simply looking over text and not actively editing it. KeyDescriptionCommandz,cVertically center the linealign_view_centertAlign the line to the top of the screenalign_view_topbAlign the line to the bottom of the screenalign_view_bottommAlign the line to the middle of the screen (horizontally)align_view_middlej,downScroll the view downwardsscroll_downk,upScroll the view upwardsscroll_upCtrl-f,PageDownMove page downpage_downCtrl-b,PageUpMove page uppage_upCtrl-uMove cursor and page half page uppage_cursor_half_upCtrl-dMove cursor and page half page downpage_cursor_half_down #### Goto mode Accessed by typingginnormal mode. Jumps to various locations. KeyDescriptionCommandgGo to line numberelse start of filegoto_file_start|Go to column numberelse start of linegoto_columneGo to the end of the filegoto_last_linefGo to files in the selectionsgoto_filehGo to the start of the linegoto_line_startlGo to the end of the linegoto_line_endsGo to first non-whitespace character of the linegoto_first_nonwhitespacetGo to the top of the screengoto_window_topcGo to the middle of the screengoto_window_centerbGo to the bottom of the screengoto_window_bottomdGo to definition (LSP)goto_definitionyGo to type definition (LSP)goto_type_definitionrGo to references (LSP)goto_referenceiGo to implementation (LSP)goto_implementationaGo to the last accessed/alternate filegoto_last_accessed_filemGo to the last modified/alternate filegoto_last_modified_filenGo to next buffergoto_next_bufferpGo to previous buffergoto_previous_buffer.Go to last modification in current filegoto_last_modificationjMove down textual (instead of visual) linemove_line_downkMove up textual (instead of visual) linemove_line_upwShow labels at each word and select the word that belongs to the entered labelsgoto_word #### Match mode Accessed by typingminnormal mode. Please refer to the relevant sections for detailed explanations aboutsurroundandtextobjects. KeyDescriptionCommandmGoto matching bracket (TS)match_bracketssSurround current selection withsurround_addrReplace surround characterwithsurround_replacedDelete surround charactersurround_deleteaSelect around textobjectselect_textobject_aroundiSelect inside textobjectselect_textobject_inner TODO: Mappings for selecting syntax nodes (a superset of[). #### Window mode Accessed by typingCtrl-winnormal mode. This layer is similar to Vim keybindings as Kakoune does not support windows. KeyDescriptionCommandw,Ctrl-wSwitch to next windowrotate_viewv,Ctrl-vVertical right splitvsplits,Ctrl-sHorizontal bottom splithsplitfGo to files in the selections in horizontal splitsgoto_fileFGo to files in the selections in vertical splitsgoto_fileh,Ctrl-h,LeftMove to left splitjump_view_leftj,Ctrl-j,DownMove to split belowjump_view_downk,Ctrl-k,UpMove to split abovejump_view_upl,Ctrl-l,RightMove to right splitjump_view_rightq,Ctrl-qClose current windowwcloseo,Ctrl-oOnly keep the current window, closing all the otherswonlyHSwap window to the leftswap_view_leftJSwap window downwardsswap_view_downKSwap window upwardsswap_view_upLSwap window to the rightswap_view_right #### Space mode Accessed by typingSpaceinnormal mode. This layer is a kludge of mappings, mostly pickers. KeyDescriptionCommandfOpen file picker at LSP workspace rootfile_pickerFOpen file picker at current working directoryfile_picker_in_current_directorybOpen buffer pickerbuffer_pickerjOpen jumplist pickerjumplist_pickergOpen changed file pickerchanged_file_pickerGDebug (experimental)N/AkShow documentation for item under cursor in apopup(LSP)hoversOpen document symbol picker (LSP)symbol_pickerSOpen workspace symbol picker (LSP)workspace_symbol_pickerdOpen document diagnostics picker (LSP)diagnostics_pickerDOpen workspace diagnostics picker (LSP)workspace_diagnostics_pickerrRename symbol (LSP)rename_symbolaApply code action (LSP)code_actionhSelect symbol references (LSP)select_references_to_symbol_under_cursor'Open last fuzzy pickerlast_pickerwEnterwindow modeN/AcComment/uncomment selectionstoggle_commentsCBlock comment/uncomment selectionstoggle_block_commentsAlt-cLine comment/uncomment selectionstoggle_line_commentspPaste system clipboard after selectionspaste_clipboard_afterPPaste system clipboard before selectionspaste_clipboard_beforeyYank selections to clipboardyank_to_clipboardYYank main selection to clipboardyank_main_selection_to_clipboardRReplace selections by clipboard contentsreplace_selections_with_clipboard/Global search in workspace folderglobal_search?Open command palettecommand_palette > 💡 Global search displays results in a fuzzy picker, useSpace + 'to bring it back up after opening a file. ##### Popup Displays documentation for item under cursor. Remapping currently not supported. KeyDescriptionCtrl-uScroll upCtrl-dScroll down ##### Completion Menu Displays documentation for the selected completion item. Remapping currently not supported. KeyDescriptionShift-Tab,Ctrl-p,UpPrevious entryTab,Ctrl-n,DownNext entryEnterClose menu and accept completionCtrl-cClose menu and reject completion Any other keypresses result in the completion being accepted. ##### Signature-help Popup Displays the signature of the selected completion item. Remapping currently not supported. KeyDescriptionAlt-pPrevious signatureAlt-nNext signature #### Unimpaired These mappings are in the style ofvim-unimpaired. KeyDescriptionCommand]dGo to next diagnostic (LSP)goto_next_diag[dGo to previous diagnostic (LSP)goto_prev_diag]DGo to last diagnostic in document (LSP)goto_last_diag[DGo to first diagnostic in document (LSP)goto_first_diag]fGo to next function (TS)goto_next_function[fGo to previous function (TS)goto_prev_function]tGo to next type definition (TS)goto_next_class[tGo to previous type definition (TS)goto_prev_class]aGo to next argument/parameter (TS)goto_next_parameter[aGo to previous argument/parameter (TS)goto_prev_parameter]cGo to next comment (TS)goto_next_comment[cGo to previous comment (TS)goto_prev_comment]TGo to next test (TS)goto_next_test[TGo to previous test (TS)goto_prev_test]pGo to next paragraphgoto_next_paragraph[pGo to previous paragraphgoto_prev_paragraph]gGo to next changegoto_next_change[gGo to previous changegoto_prev_change]GGo to last changegoto_last_change[GGo to first changegoto_first_change]SpaceAdd newline belowadd_newline_below[SpaceAdd newline aboveadd_newline_above ## Insert mode Accessed by typingiinnormal mode. Insert mode bindings are minimal by default. Helix is designed to be a modal editor, and this is reflected in the user experience and internal mechanics. Changes to the text are only saved for undos when escaping from insert mode to normal mode. > 💡 New users are strongly encouraged to learn the modal editing paradigm to get the smoothest experience. KeyDescriptionCommandEscapeSwitch to normal modenormal_modeCtrl-sCommit undo checkpointcommit_undo_checkpointCtrl-xAutocompletecompletionCtrl-rInsert a register contentinsert_registerCtrl-w,Alt-BackspaceDelete previous worddelete_word_backwardAlt-d,Alt-DeleteDelete next worddelete_word_forwardCtrl-uDelete to start of linekill_to_line_startCtrl-kDelete to end of linekill_to_line_endCtrl-h,Backspace,Shift-BackspaceDelete previous chardelete_char_backwardCtrl-d,DeleteDelete next chardelete_char_forwardCtrl-j,EnterInsert new lineinsert_newline These keys are not recommended, but are included for new users less familiar with modal editors. KeyDescriptionCommandUpMove to previous linemove_line_upDownMove to next linemove_line_downLeftBackward a charmove_char_leftRightForward a charmove_char_rightPageUpMove one page uppage_upPageDownMove one page downpage_downHomeMove to line startgoto_line_startEndMove to line endgoto_line_end_newline As you become more comfortable with modal editing, you may want to disable some insert mode bindings. You can do this by editing yourconfig.tomlfile. ``` [keys.insert] up = "no_op" down = "no_op" left = "no_op" right = "no_op" pageup = "no_op" pagedown = "no_op" home = "no_op" end = "no_op" ``` ## Select / extend mode Accessed by typingvinnormal mode. Select mode echoes Normal mode, but changes any movements to extend selections rather than replace them. Goto motions are also changed to extend, so thatvgl, for example, extends the selection to the end of the line. Search is also affected. By default,nandNwill remove the current selection and select the next instance of the search term. Toggling this mode before pressingnorNmakes it possible to keep the current selection. Toggling it on and off during your iterative searching allows you to selectively add search terms to your selections. ## Picker Keys to use within picker. Remapping currently not supported. See the documentation page onpickersfor more info.Promptkeybinds also work in pickers, except where they conflict with picker keybinds. KeyDescriptionShift-Tab,Up,Ctrl-pPrevious entryTab,Down,Ctrl-nNext entryPageUp,Ctrl-uPage upPageDown,Ctrl-dPage downHomeGo to first entryEndGo to last entryEnterOpen selectedAlt-EnterOpen selected in the background without closing the pickerCtrl-sOpen horizontallyCtrl-vOpen verticallyCtrl-tToggle previewEscape,Ctrl-cClose picker ## Prompt Keys to use within prompt, Remapping currently not supported. KeyDescriptionEscape,Ctrl-cClose promptAlt-b,Ctrl-LeftBackward a wordCtrl-b,LeftBackward a charAlt-f,Ctrl-RightForward a wordCtrl-f,RightForward a charCtrl-e,EndMove prompt endCtrl-a,HomeMove prompt startCtrl-w,Alt-Backspace,Ctrl-BackspaceDelete previous wordAlt-d,Alt-Delete,Ctrl-DeleteDelete next wordCtrl-uDelete to start of lineCtrl-kDelete to end of lineBackspace,Ctrl-h,Shift-BackspaceDelete previous charDelete,Ctrl-dDelete next charCtrl-sInsert a word under doc cursor, may be changed to Ctrl-r Ctrl-w laterCtrl-p,UpSelect previous historyCtrl-n,DownSelect next historyCtrl-rInsert the content of the register selected by following input charTabSelect next completion itemBackTabSelect previous completion itemEnterOpen selected --- # Source: https://docs.helix-editor.com/lang-support.html ## Language Support The following languages and Language Servers are supported. To use Language Server features, you must firstconfigurethe appropriate Language Server. You can check the language support in your installed helix version withhx --health. Also see theLanguage Configurationdocs and theAdding Languagesguide for more language configuration information. LanguageSyntax HighlightingTreesitter TextobjectsAuto IndentDefault language serversada✓✓ada_language_serveradl✓✓✓agda✓alloy✓amber✓amber-lspastro✓astro-lsawk✓✓awk-language-serverbash✓✓✓bash-language-serverbass✓bassbeancount✓beancount-language-serverbibtex✓texlabbicep✓bicep-langserverbitbake✓bitbake-language-serverblade✓blueprint✓blueprint-compilerc✓✓✓clangdc-sharp✓✓OmniSharpcabalhaskell-language-server-wrappercaddyfile✓✓✓cairo✓✓✓cairo-language-servercapnp✓✓cel✓circom✓circom-lspclarity✓clarinetclojure✓clojure-lspcmake✓✓✓neocmakelsp,cmake-language-servercodeql✓✓codeqlcomment✓common-lisp✓✓cl-lspcpon✓✓cpp✓✓✓clangdcrystal✓✓✓crystalline,ameba-lscss✓✓vscode-css-language-servercsv✓cue✓cuelspcylc✓✓✓d✓✓✓serve-ddart✓✓✓dartdbml✓debian✓devicetree✓dts-lspdhall✓✓dhall-lsp-serverdiff✓djot✓docker-compose✓✓✓docker-compose-langserver,yaml-language-serverdockerfile✓✓docker-langserverdot✓dot-language-serverdtd✓dune✓dunstrc✓earthfile✓✓✓earthlylsedoc✓eex✓ejs✓elisp✓elixir✓✓✓elixir-lselm✓✓elm-language-serverelvish✓elvishenv✓✓erb✓erlang✓✓erlang_ls,elpesdl✓fennel✓fennel-lsfga✓✓✓fidl✓fish✓✓✓fish-lspforth✓forth-lspfortran✓✓fortlsfsharp✓fsautocompletegas✓✓asm-lspgdscript✓✓✓gemini✓gherkin✓ghostty✓git-attributes✓git-commit✓✓git-config✓✓git-ignore✓git-notes✓git-rebase✓gjs✓✓✓typescript-language-server,vscode-eslint-language-server,ember-language-servergleam✓✓gleamglimmer✓ember-language-serverglsl✓✓✓glsl_analyzergn✓go✓✓✓gopls,golangci-lint-langservergodot-resource✓✓gomod✓goplsgotmpl✓goplsgowork✓goplsgpr✓ada_language_servergraphql✓✓graphql-lspgren✓✓groovy✓gts✓✓✓typescript-language-server,vscode-eslint-language-server,ember-language-serverhare✓haskell✓✓haskell-language-server-wrapperhaskell-persistent✓hcl✓✓✓terraform-lsheex✓✓elixir-lshelm✓helm_lshocon✓✓✓hoon✓hosts✓html✓vscode-html-language-server,superhtmlhtmldjango✓djlsp,vscode-html-language-server,superhtmlhurl✓✓✓hyprlang✓✓hyprlsidrisidris2-lspiex✓ini✓ink✓inko✓✓✓janet✓java✓✓✓jdtlsjavascript✓✓✓typescript-language-serverjinja✓jjdescription✓jq✓✓jq-lspjsdoc✓json✓✓✓vscode-json-language-serverjson-ld✓✓✓vscode-json-language-serverjson5✓jsonc✓✓vscode-json-language-serverjsonnet✓jsonnet-language-serverjsx✓✓✓typescript-language-serverjulia✓✓✓juliajust✓✓✓just-lspkdl✓✓✓koka✓✓kokakotlin✓✓✓kotlin-language-serverkoto✓✓✓koto-lslatex✓✓texlabld✓✓ldif✓lean✓leanledger✓llvm✓✓✓llvm-mir✓✓✓llvm-mir-yaml✓✓log✓lpf✓lua✓✓✓lua-language-serverluau✓✓✓luau-lspmail✓✓make✓✓markdoc✓markdoc-lsmarkdown✓marksman,markdown-oxidemarkdown-rustdoc✓markdown.inline✓matlab✓✓✓mermaid✓meson✓✓mesonlspmintmintmojo✓✓✓piximove✓msbuild✓✓nasm✓✓asm-lspnestedtext✓✓✓nginx✓nickel✓✓nlsnim✓✓✓nimlangservernix✓✓✓nil,nixdnu✓nununjucks✓ocaml✓✓ocamllspocaml-interface✓ocamllspodin✓✓✓olsohm✓✓✓opencl✓✓✓clangdopenscad✓openscad-lsporg✓pascal✓✓paslspasswd✓pem✓perl✓✓✓perlnavigatorpest✓✓✓pest-language-serverphp✓✓✓intelephensephp-only✓pkgbuild✓✓✓termux-language-server,bash-language-serverpkl✓✓pkl-lsppo✓✓pod✓ponylang✓✓✓powershell✓prisma✓✓prisma-language-serverprolog✓✓swiplproperties✓✓protobuf✓✓✓buf,pb,protolsprql✓pug✓purescript✓✓purescript-language-serverpython✓✓✓ty,ruff,jedi-language-server,pylspqml✓✓✓qmllsquarto✓✓quint✓quint-language-serverr✓Rracket✓✓racketregex✓rego✓regolsrescript✓✓rescript-language-serverrmarkdown✓✓Rrobot✓robotframework_lsron✓✓rst✓ruby✓✓✓ruby-lsp,solargraphrust✓✓✓rust-analyzerrust-format-args✓rust-format-args-macro✓✓✓sage✓✓scala✓✓✓metalsscheme✓✓scss✓vscode-css-language-serverslang✓✓✓slangdslint✓✓✓slint-lspsmali✓✓smithy✓cssml✓snakemake✓✓pylspsolidity✓✓solcsourcepawn✓✓sourcepawn-studiospade✓✓spade-language-serverspicedb✓sql✓✓sshclientconfig✓starlark✓✓✓starplsstrace✓supercollider✓svelte✓✓svelteserversway✓✓✓forcswift✓✓sourcekit-lspsystemd✓systemd-lspt32✓tablegen✓✓✓tact✓✓✓task✓tcl✓✓teal✓teal-language-servertempl✓templtera✓textproto✓✓✓tfvars✓✓terraform-lsthrift✓tlaplus✓todotxt✓toml✓✓taplo,tombitsq✓ts_query_lstsx✓✓✓typescript-language-servertwig✓typescript✓✓✓typescript-language-servertypespec✓✓✓tsp-servertypst✓tinymistungrammar✓unison✓✓✓uxntal✓v✓✓✓v-analyzervala✓✓vala-language-servervento✓verilog✓✓svlangservervhdl✓vhdl_lsvhs✓vue✓vue-language-serverwast✓wat✓wat_serverwebc✓werk✓wesl✓✓wgsl✓wgsl-analyzerwit✓✓wren✓✓✓xit✓xml✓✓xtc✓yaml✓✓✓yaml-language-server,ansible-language-serveryara✓ylsyuck✓zig✓✓✓zls --- # Source: https://docs.helix-editor.com/themes.html ## Themes To use a theme addtheme = ""to the top of yourconfig.tomlfile, or select it during runtime using:theme . ## Creating a theme Create a file with the name of your theme as the file name (i.emytheme.toml) and place it in yourthemesdirectory (i.e~/.config/helix/themesor%AppData%\helix\themeson Windows). The directory might have to be created beforehand. > 💡 The names "default" and "base16_default" are reserved for built-in themes and cannot be overridden by user-defined themes. ### Overview Each line in the theme file is specified as below: ``` key = { fg = "#ffffff", bg = "#000000", underline = { color = "#ff0000", style = "curl"}, modifiers = ["bold", "italic"] } ``` Wherekeyrepresents what you want to style,fgspecifies the foreground color,bgthe background color,underlinethe underlinestyle/color, andmodifiersis a list of style modifiers.bg,underlineandmodifierscan be omitted to defer to the defaults. To specify only the foreground color: ``` key = "#ffffff" ``` If the key contains a dot'.', it must be quoted to prevent it being parsed as adotted key. ``` "key.key" = "#ffffff" ``` For inspiration, you can find the defaulttheme.tomlhereand user-submitted themeshere. ## The details of theme creation ### Color palettes It's recommended to define a palette of named colors, and refer to them in the configuration values in your theme. To do this, add a table calledpaletteto your theme file: ``` "ui.background" = "white" "ui.text" = "black" [palette] white = "#ffffff" black = "#000000" ``` Keep in mind that the[palette]table includes all keys after its header, so it should be defined after the normal theme options. The default palette uses the terminal's default 16 colors, and the colors names are listed below. The[palette]section in the config file takes precedence over it and is merged into the default palette. Color Namedefaultblackredgreenyellowbluemagentacyangraylight-redlight-greenlight-yellowlight-bluelight-magentalight-cyanlight-graywhite ### Modifiers The following values may be used as modifier, provided they are supported by your terminal emulator. Modifierbolddimitalicunderlinedslow_blinkrapid_blinkreversedhiddencrossed_out > 💡 Theunderlinedmodifier is deprecated and only available for backwards compatibility. Its behavior is equivalent to settingunderline.style="line". ### Underline style One of the following values may be used as a value forunderline.style, providing it is supported by your terminal emulator. Modifierlinecurldasheddotteddouble_line ### Inheritance Extend other themes by setting theinheritsproperty to an existing theme. ``` inherits = "boo_berry" # Override the theming for "keyword"s: "keyword" = { fg = "gold" } # Override colors in the palette: [palette] berry = "#2A2A4D" ``` ### Scopes The following is a list of scopes available to use for styling: #### Syntax highlighting These keys matchtree-sitter scopes. When determining styling for a highlight, the longest matching theme key will be used. For example, if the highlight isfunction.builtin.static, the keyfunction.builtinwill be used instead offunction. We use a similar set of scopes asSublime Text. See alsoTextMatescopes. - attribute- Class attributes, HTML tag attributes - type- Typesbuiltin- Primitive types provided by the language (int,usize)parameter- Generic type parameters (T)enumvariant - constructor - constant(TODO: constant.other.placeholder for%v)builtinSpecial constants provided by the language (true,false,niletc)booleancharacterescapenumeric(numbers)integerfloat - string(TODO: string.quoted.{single, double}, string.raw/.unquoted)?regexp- Regular expressionsspecialpathurlsymbol- Erlang/Elixir atoms, Ruby symbols, Clojure keywords - comment- Code commentsline- Single line comments (//)documentation- Line documentation comments (e.g.///in Rust)block- Block comments (e.g. (/* */)documentation- Block documentation comments (e.g./** */in Rust)unused- Unused variables and patterns, e.g._and_foo - variable- Variablesbuiltin- Reserved language variables (self,this,super, etc.)parameter- Function parametersothermember- Fields of composite data types (e.g. structs, unions)private- Private fields that use a unique syntax (currently just ECMAScript-based languages) - label-.class,#idin CSS, etc. - punctuationdelimiter- Commas, colonsbracket- Parentheses, angle brackets, etc.special- String interpolation brackets. - keywordcontrolconditional-if,elserepeat-for,while,loopimport-import,exportreturnexceptionoperator-or,indirective- Preprocessor directives (#ifin C)function-fn,funcstorage- Keywords describing how things are storedtype- The type of something,class,function,var,let, etc.modifier- Storage modifiers likestatic,mut,const,ref, etc. - operator-||,+=,> - functionbuiltinmethodprivate- Private methods that use a unique syntax (currently just ECMAScript-based languages)macrospecial(preprocessor in C) - tag- Tags (e.g.in HTML)builtin - namespace - special-derivein Rust, etc. - markupheadingmarker1,2,3,4,5,6- heading text for h1 through h6listunnumberednumberedcheckeduncheckedbolditalicstrikethroughlinkurl- URLs pointed to by linkslabel- non-URL link referencestext- URL and image descriptions in linksquoterawinlineblock - diff- version control changesplus- additionsgutter- gutter indicatorminus- deletionsgutter- gutter indicatordelta- modificationsmoved- renamed or moved files/changesconflict- merge conflictsgutter- gutter indicator #### Interface These scopes are used for theming the editor interface: - markupnormalcompletion- for completion doc popup UIhover- for hover popup UIheadingcompletion- for completion doc popup UIhover- for hover popup UIrawinlinecompletion- for completion doc popup UIhover- for hover popup UI KeyNotesui.backgroundui.background.separatorPicker separator below input lineui.cursorui.cursor.normalui.cursor.insertui.cursor.selectui.cursor.matchMatching bracket etc.ui.cursor.primaryCursor with primary selectionui.cursor.primary.normalui.cursor.primary.insertui.cursor.primary.selectui.debug.breakpointBreakpoint indicator, found in the gutterui.debug.activeIndicator for the line at which debugging execution is paused at, found in the gutterui.gutterGutterui.gutter.selectedGutter for the line the cursor is onui.linenrLine numbersui.linenr.selectedLine number for the line the cursor is onui.statuslineStatuslineui.statusline.inactiveStatusline (unfocused document)ui.statusline.normalStatusline mode during normal mode (only ifeditor.color-modesis enabled)ui.statusline.insertStatusline mode during insert mode (only ifeditor.color-modesis enabled)ui.statusline.selectStatusline mode during select mode (only ifeditor.color-modesis enabled)ui.statusline.separatorSeparator character in statuslineui.bufferlineStyle for the buffer lineui.bufferline.activeStyle for the active buffer in buffer lineui.bufferline.backgroundStyle for bufferline backgroundui.popupDocumentation popups (e.g. Space + k)ui.popup.infoPrompt for multiple key optionsui.picker.headerHeader row area in pickers with multiple columnsui.picker.header.columnColumn names in pickers with multiple columnsui.picker.header.column.activeThe column name in pickers with multiple columns where the cursor is entering into.ui.windowBorderlines separating splitsui.helpDescription box for commandsui.textDefault text style, command prompts, popup text, etc.ui.text.focusThe currently selected line in the pickerui.text.inactiveSame asui.textbut when the text is inactive (e.g. suggestions)ui.text.infoThe key: command text inui.popup.infoboxesui.text.directoryDirectory names in prompt completionui.virtual.rulerRuler columns (see theeditor.rulersconfig)ui.virtual.whitespaceVisible whitespace charactersui.virtual.indent-guideVertical indent width guidesui.virtual.inlay-hintDefault style for inlay hints of all kindsui.virtual.inlay-hint.parameterStyle for inlay hints of kindparameter(language servers are not required to set a kind)ui.virtual.inlay-hint.typeStyle for inlay hints of kindtype(language servers are not required to set a kind)ui.virtual.wrapSoft-wrap indicator (see theeditor.soft-wrapconfig)ui.virtual.jump-labelStyle for virtual jump labelsui.menuCode and command completion menusui.menu.selectedSelected autocomplete itemui.menu.scrollfgsets thumb color,bgsets track color of scrollbarui.selectionFor selections in the editing areaui.selection.primaryui.highlightHighlighted lines in the picker previewui.highlight.framelineLine at which debugging execution is paused atui.cursorline.primaryThe line of the primary cursor (if cursorline is enabled)ui.cursorline.secondaryThe lines of any other cursors (if cursorline is enabled)ui.cursorcolumn.primaryThe column of the primary cursor (if cursorcolumn is enabled)ui.cursorcolumn.secondaryThe columns of any other cursors (if cursorcolumn is enabled)warningDiagnostics warning (gutter)errorDiagnostics error (gutter)infoDiagnostics info (gutter)hintDiagnostics hint (gutter)diagnosticDiagnostics fallback style (editing area)diagnostic.hintDiagnostics hint (editing area)diagnostic.infoDiagnostics info (editing area)diagnostic.warningDiagnostics warning (editing area)diagnostic.errorDiagnostics error (editing area)diagnostic.unnecessaryDiagnostics with unnecessary tag (editing area)diagnostic.deprecatedDiagnostics with deprecated tag (editing area)tabstopSnippet placeholder --- # Source: https://docs.helix-editor.com/usage.html # Using Helix For a full interactive introduction to Helix, refer to thetutorwhich can be accessed via the commandhx --tutoror:tutor. > 💡 Currently, not all functionality is fully documented, please refer to thekey mappingslist. ## Modes Helix is a modal editor, meaning it has different modes for different tasks. The main modes are: - Normal mode: For navigation and editing commands. This is the default mode. - Insert mode: For typing text directly into the document. Access by typingiin normal mode. - Select/extend mode: For making selections and performing operations on them. Access by typingvin normal mode. ## Buffers Buffers are in-memory representations of files. You can have multiple buffers open at once. Usepickersor commands like:buffer-nextand:buffer-previousto open buffers or switch between them. ## Selection-first editing Inspired byKakoune, Helix follows theselection → actionmodel. This means that whatever you are going to act on (a word, a paragraph, a line, etc.) is selected first and the action itself (delete, change, yank, etc.) comes second. A cursor is simply a single width selection. ## Multiple selections Also inspired by Kakoune, multiple selections are a core mode of interaction in Helix. For example, the standard way of replacing multiple instances of a word is to first select all instances (so there is one selection per instance) and then use the change action (c) to edit them all at the same time. ## Motions Motions are commands that move the cursor or modify selections. They're used for navigation and text manipulation. Examples includewto move to the next word, orfto find a character. See theMovementsection of the keymap for more motions.