mirror of
https://github.com/Xevion/dotfiles.git
synced 2026-01-31 02:24:11 -06:00
docs: add comprehensive Fish shell keybindings reference
This commit is contained in:
@@ -0,0 +1,263 @@
|
|||||||
|
# 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
|
||||||
|
|
||||||
|
```
|
||||||
|
Ctrl+a ─────────────────────────────────────────────────── Ctrl+e
|
||||||
|
│ │
|
||||||
|
└─ Ctrl+b ◄─── cursor ───► Ctrl+f ────────────────┘
|
||||||
|
│
|
||||||
|
Ctrl+Left/Right (by word)
|
||||||
|
Shift+Left/Right (by WORD)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Kill Ring
|
||||||
|
|
||||||
|
Fish maintains a "kill ring" of deleted text:
|
||||||
|
|
||||||
|
1. `Ctrl+k` / `Ctrl+u` / `Alt+d` - Kill (cut) text
|
||||||
|
2. `Ctrl+y` - Yank (paste) most recent kill
|
||||||
|
3. `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
|
||||||
|
|
||||||
|
```fish
|
||||||
|
# List all bindings
|
||||||
|
bind
|
||||||
|
|
||||||
|
# List preset (built-in) bindings
|
||||||
|
bind --preset
|
||||||
|
|
||||||
|
# List user-defined bindings
|
||||||
|
bind --user
|
||||||
|
|
||||||
|
# Show what a specific key does
|
||||||
|
bind \ea # Shows Alt+a binding
|
||||||
|
```
|
||||||
|
|
||||||
|
### Adding Custom Bindings
|
||||||
|
|
||||||
|
```fish
|
||||||
|
# In config.fish
|
||||||
|
bind \ek 'echo "Hello"' # Alt+k
|
||||||
|
bind -M insert \ek 'echo "Hello"' # Also bind in insert mode (vi)
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user