YAZI-CONFIG(1)
β¨ NAME β¨
yazi-config β the config bible for the yazi terminal file manager, live from the General Commands Manual π
π DESCRIPTION π
bestie, this is where you learn how to make yazi look and act exactly how you want. configuration options for the yazi terminal file manager. There are three config files in total:
yazi.tomlβ General Configuration.keymap.tomlβ Keybindings Configuration.theme.tomlβ Color scheme Configuration.
You can find the default configuration files on the latest tag https://github.com/sxyazi/yazi/tree/latest/yazi-config/preset π
To override any of the defaults, begin by creating the corresponding file at:
~/.config/yazi/on Unix-like systems.C:\Users\USERNAME\AppData\Roaming\yazi\config\on Windows.
so yes, you literally just make the file and yazi's like "say less" π«Ά
π¦ CONFIGURATION MIXING π¦
The options from your configuration file will be used to override the default. However, for key bindings, if you don't want to override the default directly:
# keymap.toml
[manager]
keymap = [
# ...
]
and instead want to customize your keys upon the default, you can use prepend_* or append_* directories to prepend or append them to the default β¨
# keymap.toml
[manager]
prepend_keymap = [
# ...
]
append_keymap = [
# ...
]
They are also available for open, icon, previewer, and preloader rules π
ngl this is the iconic way to do it β you keep all the default vibes and just sprinkle yours on top, no cap π
πΈ CUSTOM CONFIG DIRECTORY πΈ
You can change the Yazi configuration directory by exporting the YAZI_CONFIG_HOME environment variable. For example:
env "YAZI_CONFIG_HOME=~/.config/yazi-alt" yazi
will start Yazi with ~/.config/yazi-alt as the configuration directory, and can have its own yazi.toml , keymap.toml , init.lua , etc. files within it. like, a whole separate personality for yazi, obsessed ππ
π₯ GENERAL CONFIG (yazi.toml) π₯
β [manager] β
ratioβ Manage layout by ratio, 3-element array.[1,4,3]β 1/8 width for parent, 4/8 width for current, 3/8 width for preview
sort_byβ File sorting method. your options are:"none"β Don't sort"modified"β Sort by last modified time"created"β Sort by creation time (Due to a Rust bug, this is not available at the moment)"extension"β Sort by file extension"alphabetical"β Sort alphabetically, e.g.1.md<10.md<2.md"natural"β Sort naturally, e.g.1.md<2.md<10.md"size"β Sort by file size
sort_sensitiveβ Sort case-sensitively."true"β Case-sensitive"false"β Sort by last modified time
yes, that's genuinely what the "false" line says π keeping it 100% faithful because that's what's written, periodt.
sort_reverseβ Display files in reverse order."true"β Reverse order"false"β Normal order
sort_dir_firstβ Display directories first."true"β Directories first"false"β Respectssort_byandsort_reverseonly
sort_translitβ Transliterate filenames for sorting (i.e. replacesΓasA,ΓasAE, etc.), only available ifsort_by = "natural".
This is useful for files that contain Hungarian characters. (Currently requires nightly builds) π
"true"β Enabled"false"β Disabled
linemodeβ Display information associated with the file on the right side of the file list row."none"β No line mode."size"β Display the size in bytes of the file. Since file sizes are only evaluated when sorting by size, it only works aftersort_by = "size"set, and this behavior might change in the future."permissions"β Display the permissions of the file, only available on Unix-like systems."mtime"β Display the last modified time of the file."owner"β Display the owner of the file, only available on Unix-like systems. (Nightly version of Yazi required atm)
show_hiddenβ Show hidden files"true"β Show"false"β Do not show
show_symlinkβ Show the path of the symlink file point to, after the filename."true"β Show"false"β Do not show
scrolloffβ The number of files to keep above and below the cursor when moving through the file list.
If the value is larger than half the screen height (e.g. 200), the cursor will be centered. π―
mouse_eventsβ Array of strings, the types of mouse events can be received by the plugin system, available values:"true"β Show"false"β Do not show"click"β Mouse click"scroll"β Mouse vertical scroll"touch"β Mouse horizontal scroll"move"β Mouse move"drag"β Mouse drag (Some terminals do not support this)
mouse_eventsβ Array of strings, the types of mouse events can be received by the plugin system, available values:"true"β Show"false"β Do not show"click"β Mouse click"scroll"β Mouse vertical scroll"touch"β Mouse horizontal scroll"move"β Mouse move"drag"β Mouse drag (Some terminals do not support this)
not me listing mouse_events twice π the original literally has it twice, so here it is twice. we don't skip, we don't merge, we stay faithful fr fr π«Ά
π§ [preview] π§
tab_sizeβ Tab width.max_widthβ Maximum preview width for images. Run ayazi --clear-cacheto take effect after changing this.
This value is also used for preloading images; the larger it is, the larger the image cache generated, which consumes more CPU. π₯
max_heightβ Maximum preview height for images. Run ayazi --clear-cacheto take effect after changing this.
This value is also used for preloading images; the larger it is, the larger the image cache generated, which consumes more CPU. π₯
cache_dirβ The system cache directory is used by default, and the cached files will go away on a reboot automatically.
If you want to make it more persistent, you can specify the cache directory manually as an absolute path. πΎ
image_filterβ The filter used on image downscaling, available values:"nearest"β Nearest Neighbor"triangle"β Linear Triangle"catmull-rom"β Catmull-Rom"lanczos3"β Lanczos with window 3
They are arranged in order from fast to slow, and from poor to good quality β Lanczos3 provides the highest quality but is also the slowest. βοΈ
image_qualityβ Quality on pre-caching images, range50-90.
The larger value, the better image quality, but slower with more CPU consumption, and generates larger cache files that occupy more storage space. so like, gorgeous but expensive π
sixel_fractionβ Sixel is a very old image format that only supports 256 colors. For better image preview, Yazi trains a neural network for each image to find the most representative colors. π§ β¨
This value determines the number of samples used during the training, range 10-20. A smaller value produces better results but is also slower.
ueberzug_scale/ueberzug_offsetueberzug_scale(Float): Ueberzug image scaling ratio,scale>1for enlargement,scale<1for reduction. For example,0.5indicates a reduction to half.ueberzug_offset([x, y, width, height]): Ueberzug image offset, in cell units. For example,[0.5, 0.5, -0.5, -0.5]indicates that the image is offset by half a cell in both directions, and the width and height are reduced by half a cell.
This is useful for solving a bug of Γberzug++ image size calculation. π
If your monitor has a 2.0 scale factor, and is running on Wayland under Hyprland, you may need to set ueberzug_scale: 0.5, and adjust the value of ueberzug_offset according to your case, to offset this issue.
π [opener] π
[opener]
edit = [
{ run = 'nvim "$@"', block = true },
]
play = [
{ run = 'mpv "$@"', orphan = true, for = "unix" },
]
open = [
{ run = 'xdg-open "$@"', desc = "Open" },
]
# ...
Available options are as follows:
runβ The command to open the selected files, with the following variables available:$n(Unix) /%n(Windows): The N-th selected file, starting from1. e.g.$2represents the second selected file.$@(Unix) /%*(Windows): All selected files, i.e.$1,$2, ...,$n.$0(Unix) /%0(Windows): The hovered file.
blockβ Open in a blocking manner. After setting this, Yazi will hide into a secondary screen and display the program on the main screen until it exits. During this time, it can receive I/O signals, which is useful for interactive programs. π₯οΈorphanβ Keep the process running even if Yazi has exited, once specified, the process will be detached from the task scheduling system. ποΈdescβ Description of the opener, display in interactive components, such as"Open with"and help menu.forβ The opener is only available on this system; if not specified, it's available on all systems. Available values:unixβ Linux and macOSwindowsβ Windowslinuxβ Linuxmacosβ macOS
[open] β rules for opening files, periodt π
This is where you tell Yazi how to open specific files. You can prepend or append rules to the defaults through prepend_rules and append_rules (see Configuration mixing for the deets, bestie):
[open]
prepend_rules = [
{ name = "*.json", use = "edit" },
# Multiple openers for a single rule
{ name = "*.html", use = [ "open", "edit" ] },
]
append_rules = [
{ name = "*", use = "my-fallback" },
]
If your append_rules contains wildcard rules, they will always take precedence over the default wildcard rules as the fallback (currently requires nightly builds).
Heads up, bestie: that wildcard fallback thing is a nightly-builds situation right now. Don't come for me if stable acts different π
Or, use rules to rewrite the entire default rules:
[open]
rules = [
{ mime = "text/*", use = "edit" },
{ mime = "video/*", use = "play" },
# { mime = "application/json", use = "edit" },
{ name = "*.json", use = "edit" },
# Multiple openers for a single rule
{ name = "*.html", use = [ "open", "edit" ] },
]
Available rule options are as follows:
nameβ glob expression for matching the file name. Case insensitive by default; add to the beginning to make it sensitive.mimeβ glob expression for matching the mime-type. Case insensitive by default; add to the beginning to make it sensitive.useβ opener name corresponding to the names in the[opener]section.
With that:
- If you're using the default mime-type preloader, it retrieves the mime-type of a file through the
file -bL --mime-type /path/to/filecommand. - If
useis an array containing multiple openers, all commands in these openers will be merged.openwill run the first of these commands;open --interactivewill list all of these commands in the"open with"menu.
[tasks] β task-manager vibes π§
micro_workersβ maximum number of concurrent micro-tasks.macro_workersβ maximum number of concurrent macro-tasks.bizarre_retryβ maximum number of retries when a bizarre failure occurs.suppress_preloadβ exclude the preload tasks created by the system from the task list, do not report their progress, and do not consider them on app exit confirming.image_allocβ maximum memory allocation limit in bytes for decoding a single image,0for unlimited.image_boundβ an array of[width, height], maximum image size (in pixels) for decoding a single image, and0for unlimited.
[plugin] β plugins, previewers, preloaders, the whole cute little ecosystem π¦
previewers (prepend_previewers & append_previewers)
You can prepend or append new preview rules to the default previewers under [plugin] by prepend_previewers and append_previewers. See Configuration mixing for details. Here are the available options for a single rule:
name(String) β glob expression for matching the file name. Case insensitive by default; add\sto the beginning to make it sensitive.mime(String) β glob expression for matching the mime-type. Case insensitive by default; add\sto the beginning to make it sensitive.run(String) β the name of the Lua plugin to be ran.sync(Boolean) β whether to run in the sync context, default isfalse.
[plugin]
prepend_previewers = [
# HEIC previewer
{ mime = "image/heic", run = "heic" },
]
append_previewers = [
# My fallback previewer
{ name = "*" , run = "binary" },
]
If your append_previewers contains wildcard name rules ("*" or "*/"), they will always take precedence over the default wildcard rules as the fallback.
Yazi comes with these previewer plugins:
folderβ bridge between the Yazi file system and the previewcodeβ bridge between built-in code highlighting and the preview, providing async concurrent renderingjsonβ bridge betweenjqand the preview, providing async concurrent renderingnoopβ no operationimageβ presentation layer of built-in image preview, offering mixed preview capabilitiesvideoβ bridge betweenffmpegthumbnailerand the preview, offering mixed preview capabilitiespdfβ bridge betweenpdftoppmand the preview, offering mixed preview capabilitiesarchiveβ bridge betweenunarand the preview, offering mixed preview and concurrent rendering capabilities
If you want to create your own previewer, see Previewer API (https://yazi-rs.github.io/docs/plugins/overview#previewer).
preloaders (prepend_preloaders & append_preloaders)
You can prepend or append new preview rules to the default preloaders under [plugin] by prepend_preloaders and append_preloaders. See Configuration mixing for details. Here are the available options for a single rule:
name(String) β glob expression for matching the file name. Case insensitive by default; add\sto the beginning to make it sensitive.mime(String) β glob expression for matching the mime-type. Case insensitive by default; add\sto the beginning to make it sensitive.cond(String) β conditional expression. Only rules that meet this condition and satisfy either thenameormimewill be applied. For example,A & BmeansAandB, andA | !BmeansAor notB. Here are the available factors:mimeβ this file has a mime-type.
run(String) β the name of the Lua plugin to be ran.multi(Boolean) β whether to preload multiple files at once.prio(String) β preload priority,low,normalorhigh. The default isnormalif not specified.
[plugin]
prepend_preloaders = [
# HEIC preloader
{ mime = "image/heic", run = "heic" },
]
Yazi comes with these preloader plugins:
mimeβ preloads mime-type of files in chunksnoopβ no operationimageβ preloads and caches imagesvideoβ preloads and caches videospdfβ preloads and caches PDFs.
If you want to create your own preloader, see Preloader API (https://yazi-rs.github.io/docs/plugins/overview#preloader).
[input] β input boxes, but make them cute π
You can customize the title and position of each input. As for position, it consists of two parts: Origin and Offset.
The origin is the top-left corner of the input, and the offset is the increment from this origin. Together, they determine the area of the input on the screen.
Origin
For the origin, the following values are available:
top-lefttop-centertop-rightbottom-leftbottom-centerbottom-rightcenterhovered(the cursor position of hovered file)
Offset
As for the offset, it's a 4-element tuple: (x, y, width, height).
Placeholder
Some inputs have special placeholders that will be replaced with actual content on display:
trash_title:String{n}: Number of files to be trashed{s}:"s"ifn > 1, otherwise""
delete_title:String{n}: Number of files to be deleted{s}:"s"ifn > 1, otherwise""
find_title:[String, String]
It's a tuple of 2-element: first for "Find next", second for "Find previous".
search_title:String{n}: Name of the current search engine
shell_title:[String, String]
It's a tuple of 2-element: first for "Non-blocking shell", second for "Blocking shell".
quit_title:String{n}: Number of tasks are running{s}:"s"ifn > 1, otherwise""
[select] β same energy as [input] β¨
Same as the [input] section.
[which] β the which-key menu, sorted and slaying π₯
sort_byβ candidate sorting method."none"β don't sort"key"β sort by key"desc"β sort by description
sort_sensitiveβ sort case-sensitively."true"β case-sensitive"false"β sort by last modified time
sort_reverseβ display files in reverse order."true"β reverse order"false"β normal order
KEYBINDINGS CONFIGURATION (keymap.toml) π
[manager]
escapeβ cancel find, exit visual mode, clear selected, cancel filter, or cancel search.--allβ do all of the below, all at once, the whole sweep π--findβ cancel find--visualβ exit visual mode--selectβ clear selected--filterβ cancel filter--searchβ cancel search
By default it just auto-detects what you probably meant (main character energy tbh), and it'll only run the specific operation once you actually name the option β and yes bestie, you can stack multiple options together. Slay.
quit
Exit the process. That's it, that's the whole vibe. πͺπ¨
--no-cwd-fileβ don't write the current directory to the cwd-file
close
Close the current tab β but if it's the last tab, it exits the process instead. So it's giving "one more won't hurt" until it literally does π
arrow
[n]/[n%]β move the cursor up or down by n or n% lines. Negative values move up, positive values move down. Yes, percentages are a thing, we love a flexible queen β¨
leave
Go back to the parent directory of the hovered file β or, if nothing's hovered, the parent of the current working directory. Basically "take me up a level, idk where" π«Ά
enter
Enter the child directory. Go π in π side π the π folder.
back
Go back to the previous directory.
forward
Go forward to the next directory. The duality of back and forward, we stan a pair of icons π
seek
Scroll the contents in the preview panel.
[n]β negative values seek up, positive values seek down
Heads up: the default scroll keys are Alt + j and Alt + k, so make sure your terminal actually supports Alt key combos β or just change them in your keymap.toml, your call π
cd
Change the current directory.
[path]β the path to change to--interactiveβ use an interactive UI to input the path (for when you want the app to hold your hand, no judgement π)
reveal
Change the current directory to the parent of the specified file, and hover on it. Like a little spotlight moment for one specific file π
[path]β the path to reveal
select
--state=trueβ select the current file--state=falseβ deselect the current file--state=noneβ default, toggle the selection state of the current file
select_all
Select all files in the current working directory.
--state=trueβ select all files--state=falseβ deselect all files--state=noneβ default, toggle the selection state of all files
Ngl this one trips people up: --state=false will deselect all files in the current working directory only.
So if you've got files selected across multiple directories and you want to nuke the whole selection, use escape --select instead. Different tool, different job π§
visual_mode
Enter visual mode (selection mode). Main character selection era π
--unsetβ enter visual mode (unset mode)
open
Open the selected files using the rules in [open]. Your very own "idk, you pick" button for opening stuff π₯
--interactiveβ open the hovered/selected file(s) with an interactive UI to choose the opening method--hoveredβ always open the hovered file regardless of the selection state
yank
Yank the selected files. Copied, bestie, it's in the clipboard of destiny β¨
--cutβ cut the selected files
unyank
Cancel the yank status of files. Never mind, un-copied π
paste
Paste the yanked files.
--forceβ if the destination file already exists, overwrite it. no questions, no mercy π--followβ copy the file that a symbolic link points to, instead of the link itself. heads up: this only works during copying, bestie.
link π
makes a symbolic link to whatever files you've yanked. and yeah, on Windows this is a privileged action β you gotta be running as an administrator or it's simply not happening, periodt.
--relativeβ use a relative path for the symbolic link.--forceβ overwrite the destination file if it's already there.
remove ποΈ
moves your files to the trash/recycle bin on macOS/Windows. on Linux it follows The FreeDesktop.org Trash specification β the spec lives at https://specifications.freedesktop.org/trash-spec/trashspec-1.0.html, iykyk.
tiny lil Android caveat: on the Android platform you can only use this with the --permanently option, because Android straight up doesn't have the concept of a trash bin. it's giving "no bin, no problem" π
--forceβ don't show the confirmation dialog, just trash/delete the files directly.--permanentlyβ permanently delete the files. they're gone-gone, fr fr.--hoveredβ always remove the hovered file regardless of the selection state. (Nightly version of Yazi is required ATM)
create β¨
creates a file or a directory. the trick? end the name with / (Unix) or \ (Windows) and you get a directory. iconic behaviour tbh.
--forceβ overwrite the destination file directly if it exists, without showing the confirmation dialog.
rename π¦
renames a file or directory β or does a bulk rename if multiple files are selected ($EDITOR is used to edit the filenames by default). chef's kiss πΈ
--hovered: always rename the hovered file regardless of the selection state. (Nightly version of Yazi is required ATM)--force: overwrite the destination file directly if it exists, without showing the confirmation dialog.--empty: empty a part of the filename. pick your fighter:"stem": empty the stem. e.g."foo.jpg"->".jpg"."ext": empty the extension. e.g."foo.jpg"->"foo."."dot_ext": empty the dot and extension. e.g."foo.jpg"->"foo"."all": empty the whole filename. e.g."foo.jpg"->"".
--cursor: specify the cursor position of the renaming input box."end": the end of the filename."start": the start of the filename."before_ext": before the extension of the filename.
you can also combo --cursor with --empty β for example, rename --empty=stem --cursor=start empties the file's stem and moves the cursor to the start. π«
which means the input box content for the filename foo.jpg becomes |.jpg, where | is the cursor position. so satisfying.
copy π
copies the path of the files or directories that are selected or hovered on. literally the easiest way to get a path into your clipboard-adjacent life.
pathβ copy the absolute path.dirnameβ copy the path of the parent directory.filenameβ copy the name of the file.name_without_extβ copy the name of the file without the extension.
shell π
runs a shell command. yes queen, go off.
[run]β optional, and it's the command template to be run.--confirmβ when the template is provided, run it directly, and no input UI is shown.--blockβ open in a blocking manner. after you set this, Yazi hides into a secondary screen and displays the program on the main screen until it exits. during that time it can receive I/O signals, which is highkey useful for interactive programs.--orphanβ keep the process running even if Yazi has exited. once specified, the process gets detached from the task scheduling system. it's giving main character energy, living its own life π§
you can use the following shell variables in [run]:
$n(Unix) /%n(Windows): the N-th selected file, starting from 1. e.g.$2represents the second selected file.$@(Unix) /%*(Windows): all selected files, i.e.$1,$2, ...,$n.$0(Unix) /%0(Windows): the hovered file.
hidden π
sets the visibility of hidden files. do you see them or not, bestie.
showβ show hidden files.hideβ hide hidden files.toggleβ default, toggles the hidden state.
linemode β
set the line mode.
π linemode arguments, bestie
So linemode takes one of these, and here's the whole menu:
noneβ no line mode at all, we're keeping it clean β¨sizeβ shows the file size in bytes. Heads up tho: file sizes only get evaluated when you're sorting by size, so this only actually works after you've setsort_by = "size". And this behavior might change in the future β so don't get too attached πpermissionsβ shows the file's permissions. Unix-like systems only, sorry Windows girlies π«Άmtimeβ shows the last modified time. Obsessed with a timestamp, honestly πownerβ shows the file's owner. Unix-like systems only. (Nightly version of Yazi required atm π)
And here's the fun part: you can also specify any 1 to 20 characters, and then extend it inside a UI plugin. Which literally means you can build your own linemode by just overriding the Folder:linemode method β main character energy fr fr:
https://github.com/sxyazi/yazi/blob/latest/yazi-plugin/preset/components/folder.lua
π search
[engine]β the search engine, and your options are:fd,rg,none(which cancels the search β)--argsβ extra arguments passed straight to the engine you picked. Like, for example,search fd --args='-e -H'π (Nightly version of Yazi required atm)
Fun trick, iykyk: you can search with an empty keyword ("") viafdto get that flat view. It's giving everything, all at once π
π΅οΈ find
[query]β optional! The query you're finding for. If you don't give one, an interactive UI pops up so you can type it in π--previousβ find the previous occurrence instead. Going backwards bestie β¬ οΈ--smartβ smart-case finding, meaning it's case-sensitive if your query has uppercase characters, otherwise it's case-insensitive β¨--insensitiveβ case-insensitive find, periodt.
πΉ find_arrow
Moves the cursor to the next or previous occurrence β that's it, that's the whole vibe.
--previousβ move to the previous occurrence instead of the next one.
π§Ί filter
[query]β optional, the query you're filtering for. Don't pass one and an interactive UI shows up so you can type it π¦--smartβ smart-case filtering: case-sensitive if the query contains uppercase characters, otherwise case-insensitive, no cap.--insensitiveβ case-insensitive filter, periodt.
ποΈ sort
[by]β optional. If you don't provide it, the sort method stays exactly as it was, unchanged π
The values you can pass to [by] are:
"none"β don't sort. Chaos. We love her π"modified"β sort by last modified time."created"β sort by creation time. (Due to a Rust bug, this is not available at the moment, see sxyazi/yazi#356 and rust-lang/rust#108277 π)"extension"β sort by file extension."alphabetical"β sort alphabetically, e.g.1.md<10.md<2.md"natural"β sort naturally, e.g.1.md<2.md<10.mdπ"size"β sort by file size.
And the flags:
--reverseβ display files in reverse order.--reverseor--reverse=yesto reverse,--reverse=noto cancel it out π--dir-firstβ display directories first.--dir-firstor--dir-first=yesto enable,--dir-first=noto cancel.--translitβ transliterate filenames for sorting, seesort_translitfor the details.--translitor--translit=yesto enable,--translit=noto cancel πΈ
π tab_create
[path]β optional, creates a new tab using the path you specify.--currentβ optional, creates a new tab using the current path.
And if you specify neither[path]nor--current, it'll use the startup directory to create the tab. Default behavior stays winning β¨
β tab_close
[n]β closes the tab at positionn, counting from0. Zero-indexed babies, that's just how it is π
π tab_switch
[n]β switches to the tab at positionn, starting from0.--relativeβ switch to the tab at a position relative to the current tab. With this parameter,ncan totally be negative β go backwards, girl π¦
π tab_swap
Okay so back to that tab-swap command from the last bit β its arg table is literally:
[n]β swap the current tab with the tab at position n, where negative values move the tab forward, and positive values move it backward. tab gymnastics, periodt π
Then the rest of the manager-side commands:
tasks_showβ show the task manager. task-manager main character moment β¨helpβ open the help menu. π«Άpluginβ seeyazi-plugin (7).
[tasks] π§
closeβ hide the task manager.arrowβ move the cursor in the task manager:-1β move the cursor up 1 line.1β move the cursor down 1 line.
inspectβ inspect the task (press q to exit the inspect view). πcancelβ cancel the task. πhelpβ open the help menu.pluginβ seeyazi-plugin (7).
[select] π
closeβ cancel selection.--submitβ submit the selection. β
arrowβ move the cursor around:[n]β move the cursor up or down n lines. Negative value for up, positive value for down.
helpβ open the help menu.pluginβ seeyazi-plugin (7).
[input] π
closeβ cancel input.--submitβ submit the input. π«‘
escapeβ go back to normal mode, or cancel input.moveβ move the cursor left or right.[n]β move the cursor n characters left or right. Negative value for left, positive value for right.--in-operatingβ move the cursor only if itβs currently waiting for an operation.
backwardβ move back to the start of the current or previous word.forwardβ move forward to the start of the next word.--end-of-wordβ move forward to the end of the current or next word.
insertβ enter insert mode. This command is only available in normal mode.--appendβ insert after the cursor.
visualβ enter visual mode. This command is only available in normal mode.deleteβ delete the selected characters. This command is only available in normal mode.--cutβ cut the selected characters into clipboard, instead of only deleting them.--insertβ delete and enter insert mode.
yankβ copy the selected characters. This command is only available in normal mode.pasteβ paste the copied characters after the cursor. This command is only available in normal mode.--beforeβ paste the copied characters before the cursor.
undoβ undo the last operation. This command is only available in normal mode.redoβ redo the last operation. This command is only available in normal mode.helpβ open the help menu. This command is only available in normal mode.backspaceβ delete the character before the cursor. This command is only available in insert mode.--underβ delete the character under the cursor.
killβ kill the specified range of characters. This command is only available in insert mode.
okay so the argument table continues, and itβs giving precision π :
bolβ Kill backwards to the BOL.eolβ Kill forwards to the EOL.backwardβ Kill backwards to the start of the current word.forwardβ Kill forwards to the end of the current word.pluginβ Seeyazi-plugin (7). This command is only available in insert mode.
π [completion] π
closeβ Hide the completion menu.--submitβ Submit the completion.
close_inputβ Close the input box. Arguments are the same as[input] close.arrowβ takes[n]: Move the cursor up or down n lines. Negative value for up, positive value for down.helpβ Open the help menu.pluginβ Seeyazi-plugin (7).
π¦ [help] π¦
closeβ Hide the help menu.escapeβ Clear the filter, or hide the help menu.arrowβ takes[n]: Move the cursor up or down n lines. Negative value for up, positive value for down.filterβ Apply a filter for the help items.pluginβ Seeyazi-plugin (7).
π¨ COLOR SCHEME CONFIGURATION (theme.toml) π
okay so if you want ready-made themes and you do not wanna build one yourself, go check out the yazi-rs/flavors repository at https://github.com/yazi-rs/flavors β itβs giving pre-made slay β¨
π Types
π¨ Color
A color can be in Hex format with RGB values, like '#484D66'. Or it can be one of these 17 values, no cap:
resetblackwhiteredlightredgreenlightgreenyellowlightyellowbluelightbluemagentalightmagentacyanlightcyangraydarkgray
π Style
Style shows up in a format similar to '{ fg = "#e4e4e4", bg = "black", ... }', and it supports these properties:
fg(Color) β Foreground color πbg(Color) β Background color πbold(Boolean) β Bolddim(Boolean) β Dim (not supported by all terminals, heads up π«Ά)italic(Boolean) β Italicunderline(Boolean) β Underlineblink(Boolean) β Blinkblink_rapid(Boolean) β Rapid blinkreversed(Boolean) β Reversed foreground and background colorshidden(Boolean) β Hiddencrossed(Boolean) β Crossed out
πΈ [flavor]
use(String) β Flavor name, e.g."Dracula". See flavor documentation for more details. (https://yazi-rs.github.io/docs/flavors/overview/) π
ποΈ [manager]
cwd(Style) β CWD text style.
π Hovered
hovered(Style) β Hovered file style.preview_hovered(Style) β Hovered file style, in the preview pane.
π Find: The find feature
find_keyword(Style) β Style of the highlighted portion in the filename.find_position(Style) β Style of current file location in all found files to the right of the filename.
π Marker: Color block on the left side separator line in the filename
marker_selected(Style) β Selected file marker style.marker_copied(Style) β Copied file marker style.marker_cut(Style) β Cut file marker style.
π¦ Tab: Tab bar
tab_active(Style) β Active tab style.tab_inactive(Style) β Inactive tab style.tab_width(Number) β Tab maximum width. When set to a value greater than2, the remaining space will be filled with the tab name, which is current directory name.
β Border
border_symbol(String) β Border symbol. e.g."β".border_style(Style) β Border style.
π§ Highlighting: The built-in syntax highlighting feature
syntect_theme(String) β For example,"~/Downloads/Dracula.tmTheme". Only available in the user'stheme.tomland cannot be used inflavor.toml.
Yazi's builtin code highlighting themes, which are paths to .tmTheme files. You can find them on GitHub using "tmTheme" as a keyword π₯
π [status]
separator_open(String) β Opening separator symbol. e.g."[".separator_close(String) β Closing separator symbol. e.g."]".separator_style(Style) β Separator style.
π Mode
mode_normal(Style) β Normal mode style.mode_select(Style) β Select mode style.mode_unset(Style) β Unset mode style.
π Progress
progress_label(Style) β Progress label style.progress_normal(Style) β Style of the progress bar when it is not in an error state.progress_error(Style) β Style of the progress bar when an error occurs.
π Permissions
permissions_t(Style) β File type.permissions_r(Style) β Read permission.permissions_w(Style) β Write permission.permissions_x(Style) β Execute permission.permissions_s(Style) β-separator.
π«Ά [select]
border(Style) β Border style.active(Style) β Selected item style.inactive(Style) β Unselected item style.
π [input]
border(Style) β Border style.title(Style) β Title style.value(Style) β Value style.selected(Style) β Selected value style.
β¨ [completion]
border(Style) β Border style.active(Style) β Selected item style.inactive(Style) β Unselected item style.
π Icons
icon_file(String) β File icon.icon_folder(String) β Folder icon.icon_command(String) β Command icon.
π οΈ [tasks]
border(Style) β Border style.title(Style) β Title style.hovered(Style) β Hovered item style.cols(Number) β Number of columns. The value can be1,2,3.mask(Style) β Mask style.cand(Style) β Candidate key style.rest(Style) β Rest key style.desc(Style) β Description style.separator(String) β Separator symbol. e.g." -> ".separator_style(Style) β Separator style.
π‘ [help]
on(Style) β Key column style.run(Style) β Command column style.desc(Style) β Description column style.hovered(Style) β Hovered item style.footer(Style) β Footer style.
π¨ [filetype]
Set file list item display styles for specific file types, supporting matching by name and mime-type:
ββββββββββββββββββββββββββββββββββββββββββββββββ
β [filetype] β
β rules = [ β
β # Images β
β { mime = "image/*", fg = "yellow" }, β
β β
β # Videos β
β { mime = "video/*", fg = "magenta" }, β
β { mime = "audio/*", fg = "magenta" }, β
β β
β # Empty files β
β { mime = "inode/x-empty", fg = "cyan" }, β
β β
β # Orphan symbolic links β
β { name = "*", is = "orphan", fg = "red" }, β
β β
β # ... β
β β
β # Fallback β
β # { name = "*", fg = "white" }, β
β { name = "*/", fg = "blue" } β
β ] β
ββββββββββββββββββββββββββββββββββββββββββββββββ
Each rule supports complete Style properties. There are two special rule:
name = "*" matches all files.
name = "*/" matches all directories.
You can restrict the specific type of files through is, noting that it must be used with either name or mime. It accepts the following values:
blockβ Block devicecharβ Char deviceexecβ Executablefifoβ FIFOlinkβ Symbolic linkorphanβ Orphan symbolic linksockβ Socketstickyβ File with sticky bit set
πΌοΈ [icon]
Display icon based on the first matched rule.
You can prepend or append rules to the default through prepend_rules and append_rules See Configuration mixing for details.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β [icon] β
β prepend_rules = [ β
β { name = "*.rs" , text = "icon_glyph_here" }, β
β { name = "Desktop/", text = "icon_glyph_here" }, β
β # ... β
β β
β # Icon with a color β
β { name = "*.lua", text = "icon_glyph_here", fg = "#51a0cf" }, β
β β
β # You can also use `is` rule, just like `[filetype]` section β
β # Orphan symbolic links β
β { name = "*", is = "orphan", text = "icon_glyph_here" }, β
β ] β
β β
β append_rules = [ β
β # My fallback icons β
β { name = "*" , text = "icon_glyph_here" }, β
β { name = "*/", text = icon_glyph_here" }, β
β ] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Or, use rules to rewrite the entire default rules:
βββββββββββββββββββββ
β [icon] β
β rules = [ β
β # ...Some rules β
β ] β
βββββββββββββββββββββ
End with / for directories, wildcard rule (* or */) can be used for fallback matching all files or directories.
If your append_rules contains wildcard rules, they will always take precedence over the default wildcard rules as the fallback. πβ¨
π SEE ALSO
yazi-config(5), yazi-plugins(7)
okay bestie, thatβs the whole YAZI-CONFIG(1) glow-up π the source/version and date are serving footer realness at the very end, and they ate π
π«Ά
π¦ where this page comes from
- nixos 26.05: yazi 26.5.6
- nixpkgs unstable: yazi 26.9.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms