Fish Shell Keybindings
Complete reference for Fish shell keybindings, including built-in defaults, plugins, and custom configurations.
Custom Bindings
Personal keybindings configured in this dotfiles repository.
| Keybinding |
Action |
Source |
| Alt+a |
fzf_search_abbr |
config.fish - Search abbreviations/aliases with fzf |
Quick Reference
Most Useful "Hidden" Bindings
These are the bindings most users don't know about:
| Keybinding |
What it does |
| Alt+s |
Toggle sudo prefix |
| Alt+. |
Repeat last argument from previous command |
| Alt+e |
Edit long commands in your editor |
| Alt+o |
Preview file under cursor |
| Alt+l |
Quick ls of path under cursor |
| Alt+w |
whatis for command under cursor |
| Alt+p |
Pipe output through pager automatically |
| Alt+# |
Comment out command (save to history without running) |
| Alt+Up/Down |
Search history for current token |
| F1 |
Instant man page for current command |
| Ctrl+x / Ctrl+v |
Native clipboard integration |
| Shift+Delete |
Delete current history entry |
Emacs-Style Navigation Cheatsheet
Kill Ring
Fish maintains a "kill ring" of deleted text:
Ctrl+k / Ctrl+u / Alt+d - Kill (cut) text
Ctrl+y - Yank (paste) most recent kill
Alt+y - Cycle through previous kills
Plugin Bindings
Keybindings added by Fish plugins (Fisher).
Atuin (History)
| Keybinding |
Action |
Description |
| Ctrl+r |
_atuin_search |
Search shell history (replaces built-in history-pager) |
fzf.fish (PatrickF1/fzf.fish)
| Keybinding |
Action |
Description |
| Ctrl+Alt+f |
fzf_search_directory |
Search files in current directory |
| Ctrl+Alt+l |
fzf_search_git_log |
Search git log |
| Ctrl+Alt+s |
fzf_search_git_status |
Search git status |
| Ctrl+Alt+p |
fzf_search_processes |
Search running processes |
| Alt+Ctrl+v |
fzf_search_variables |
Search shell variables (remapped from Ctrl+v) |
Note: Ctrl+r (history) is disabled in fzf.fish config to let Atuin handle it.
Built-in Bindings
Default Fish shell keybindings (emacs mode).
Execution & Completion
| Keybinding |
Action |
Description |
| Enter |
execute |
Execute current command |
| Ctrl+j |
execute |
Execute current command |
| Ctrl+m |
execute |
Execute current command |
| Ctrl+Enter |
execute |
Execute current command (prevents mistypes) |
| Tab |
complete |
Autocomplete |
| Ctrl+i |
complete |
Autocomplete (same as Tab) |
| Shift+Tab |
complete-and-search |
Complete and open search pager |
| Ctrl+s |
pager-toggle-search |
Toggle search in completion pager |
Navigation (Line)
| Keybinding |
Action |
Description |
| Ctrl+a |
beginning-of-line |
Jump to start of line |
| Ctrl+e |
end-of-line |
Jump to end of line |
| Home |
beginning-of-line |
Jump to start of line |
| End |
end-of-line |
Jump to end of line |
| Ctrl+f |
forward-char |
Move right one character |
| Ctrl+b |
backward-char |
Move left one character |
| Right |
forward-char |
Move right one character |
| Left |
backward-char |
Move left one character |
Navigation (Word)
| Keybinding |
Action |
Description |
| Ctrl+Right |
forward-word |
Jump forward one word |
| Ctrl+Left |
backward-word |
Jump backward one word |
| Shift+Right |
forward-bigword |
Jump forward one WORD (whitespace-delimited) |
| Shift+Left |
backward-bigword |
Jump backward one WORD |
| Alt+f |
nextd-or-forward-token |
Next directory OR forward token |
| Alt+b |
prevd-or-backward-word |
Previous directory OR backward word |
| Alt+Right |
nextd-or-forward-token |
Next directory OR forward token |
| Alt+Left |
prevd-or-backward-token |
Previous directory OR backward token |
Navigation (Buffer)
| Keybinding |
Action |
Description |
| Alt+< |
beginning-of-buffer |
Jump to start of buffer |
| Alt+> |
end-of-buffer |
Jump to end of buffer |
Text Editing (Delete)
| Keybinding |
Action |
Description |
| Backspace |
backward-delete-char |
Delete character before cursor |
| Shift+Backspace |
backward-delete-char |
Delete character before cursor |
| Ctrl+h |
backward-delete-char |
Delete character before cursor |
| Delete |
delete-char |
Delete character at cursor |
| Ctrl+d |
delete-or-exit |
Delete character or exit if line empty |
| Ctrl+w |
backward-kill-path-component |
Delete previous path component |
| Ctrl+u |
backward-kill-line |
Delete from cursor to start of line |
| Ctrl+k |
kill-line |
Delete from cursor to end of line |
| Alt+Backspace |
backward-kill-token |
Delete previous token |
| Ctrl+Alt+h |
backward-kill-token |
Delete previous token |
| Ctrl+Backspace |
backward-kill-word |
Delete previous word |
| Alt+Delete |
kill-token |
Delete token ahead |
| Ctrl+Delete |
kill-word |
Delete word ahead |
| Alt+d |
kill-word / dirh |
Delete word ahead OR show directory history if empty |
Text Editing (Transform)
| Keybinding |
Action |
Description |
| Ctrl+t |
transpose-chars |
Swap current and previous characters |
| Alt+t |
transpose-words |
Swap current and previous words |
| Alt+u |
upcase-word |
UPPERCASE the current word |
| Alt+c |
capitalize-word |
Capitalize the current word |
Undo & Redo
| Keybinding |
Action |
Description |
| Ctrl+z |
undo |
Undo last edit |
| Ctrl+/ |
undo |
Undo last edit |
| Ctrl+_ |
undo |
Undo last edit (XTerm) |
| Ctrl+Shift+z |
redo |
Redo last undone edit |
| Alt+/ |
redo |
Redo last undone edit |
Clipboard & Yank
| Keybinding |
Action |
Description |
| Ctrl+x |
fish_clipboard_copy |
Copy commandline to system clipboard |
| Ctrl+v |
fish_clipboard_paste |
Paste from system clipboard |
| Ctrl+y |
yank |
Yank (paste) last killed text |
| Alt+y |
yank-pop |
Cycle through kill ring |
History Navigation
| Keybinding |
Action |
Description |
| Up |
up-or-search |
Previous history / prefix search |
| Down |
down-or-search |
Next history / prefix search |
| Ctrl+p |
up-or-search |
Previous history / prefix search |
| Ctrl+n |
down-or-search |
Next history / prefix search |
| PageUp |
beginning-of-history |
Jump to oldest history entry |
| PageDown |
end-of-history |
Jump to newest history entry |
| Shift+Delete |
history-delete |
Delete current history entry |
History Token Search
| Keybinding |
Action |
Description |
| Alt+Up |
history-token-search-backward |
Search history for token under cursor (backward) |
| Alt+Down |
history-token-search-forward |
Search history for token under cursor (forward) |
| Alt+. |
history-token-search-backward |
Insert last argument from previous command |
Special Functions
| Keybinding |
Action |
Description |
| Alt+s |
fish_commandline_prepend sudo |
Toggle sudo prefix on current line |
| Alt+e |
edit_command_buffer |
Open command in $EDITOR |
| Alt+v |
edit_command_buffer |
Open command in $EDITOR |
| Alt+p |
__fish_paginate |
Pipe command output through pager |
| Alt+# |
__fish_toggle_comment_commandline |
Toggle # comment on line |
| Alt+l |
__fish_list_current_token |
List/expand current token (like ls on path) |
| Alt+o |
__fish_preview_current_file |
Preview file under cursor |
| Alt+w |
__fish_whatis_current_token |
Show whatis for command under cursor |
| F1 |
__fish_man_page |
Open man page for current command |
| Alt+h |
__fish_man_page |
Open man page for current command |
Line Control
| Keybinding |
Action |
Description |
| Ctrl+l |
clear-screen |
Clear screen (with scrollback push if supported) |
| Ctrl+c |
clear-commandline |
Clear current command line |
| Ctrl+g |
cancel |
Cancel current operation |
| Escape |
cancel |
Cancel / exit mode |
| Ctrl+[ |
cancel |
Cancel (escape sequence) |
Text Insertion
| Keybinding |
Action |
Description |
| Space |
self-insert expand-abbr |
Insert space and expand abbreviations |
| ; |
self-insert expand-abbr |
Insert semicolon and expand abbreviations |
| | |
self-insert expand-abbr |
Insert pipe and expand abbreviations |
| & |
self-insert expand-abbr |
Insert ampersand and expand abbreviations |
| > |
self-insert expand-abbr |
Insert redirect and expand abbreviations |
| < |
self-insert expand-abbr |
Insert redirect and expand abbreviations |
| ) |
self-insert expand-abbr |
Insert paren and expand abbreviations |
| Shift+Enter |
commandline -i \n |
Insert newline without executing |
| Alt+Enter |
commandline -i \n |
Insert newline without executing |
| Ctrl+Space |
Insert literal space |
Insert space without expanding abbreviations |
| Shift+Space |
self-insert expand-abbr |
Insert space (same as Space) |
Configuration
Keybindings are configured in:
- Built-in:
fish_default_key_bindings function (emacs mode)
- Custom:
~/.config/fish/config.fish (this repo: home/dot_config/fish/config.fish.tmpl)
- Plugins: Managed via Fisher, configured in
config.fish
Checking Current Bindings
Adding Custom Bindings