summaryrefslogtreecommitdiffstats
path: root/.config/bash/inputrc
blob: 1225508ee7dc7789c17f244265c81fc06c3ca2ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# ------------------------------------------------------------------------------
# Readline configuration file
# ------------------------------------------------------------------------------
#
# https://www.gnu.org/software/bash/manual/bash.html#Readline-Init-File
#
# Executed by Readline when a program starts the Readline library
#
# Options that take a string parameter cannot have a comment next to them, e.g.
# `set bell-style none # Some comment` will not work.

# ------------------------------------------------------------------------------
# Variable settings
# ------------------------------------------------------------------------------

# Completion configuration
#
# It's worth noting what's going on here since it's not clear from the
# documentation.
#
# There are three cases to cover for the behavior I want:
#   - Only one match → complete
#   - Multiple matches → show the list
#   - Multiple matches with common prefix → complete prefix and show the list
#
# By default, `menu-complete()` will select the first completion, this covers
# the first case. `show-all-if-ambiguous` covers the second case by showing the
# list when there are multiple choices. `menu-complete-display-prefix` covers
# the third case by completing the common prefix.
set show-all-if-ambiguous on
set menu-complete-display-prefix on

set editing-mode vi                     # Vi keybindings
set match-hidden-files off              # Don't match hidden files, unless a leading '.' is typed explicitly
set completion-ignore-case on           # Ignore case when matching completions
set search-ignore-case on               # Ignore case when searching
set skip-completed-text on              # Don't insert match when completing in the middle of a word
set completion-query-items 100          # Prompt before showing more than this number of completions
set completion-display-width -1         # Use all available width to show completions
set print-completions-horizontally on   # Sort completions horizontally
set colored-stats on                    # Show completions using colors depending on file type
set visible-stats on                    # Append a character denoting file type
set colored-completion-prefix on        # Color the common prefix of completions
set expand-tilde off                    # Don't expand tilde automatically
set show-mode-in-prompt on              # Show current mode (vi-insert, vi-command) in prompt
# String to display for each mode
set vi-cmd-mode-string -CMD-
set vi-ins-mode-string -INS-
# Don't ring the terminal bell
set bell-style none

# ------------------------------------------------------------------------------
# Key bindings
# ------------------------------------------------------------------------------
#
# To unbind: bind to `""`
#
# https://www.gnu.org/software/bash/manual/bash.html#Bindable-Readline-Commands-1

$if mode=vi

# vi-insert ____________________________________________________________________
set keymap vi-insert
$include ~/.config/bash/vi.inputrc

"\C-i": menu-complete                   # Tab           cycle completions forward
"\e[Z": menu-complete-backward          # Shift+Tab     cycle completions backward
"\C-a": insert-completions              # Ctrl+a        insert all completions

"\eE": shell-expand-line                # Alt+E         shell expansion
"\e/": complete-filename                # Alt+/         filename expansion
"\e~": complete-username                # Alt+~         username expansion
"\e$": complete-variable                # Alt+$         variable expansion
"\e@": complete-hostname                # Alt+@         hostname expansion
"\e!": complete-command                 # Alt+!         command expansion
"\e\t": dynamic-complete-history        # Alt+Tab       history entry (not lines!) expansion

"\eh": backward-char                    # Alt+h         one char backward
"\el": forward-char                     # Alt+l         one char forward
"\C-b": beginning-of-line               # Ctrl+b        beginning of line
"\C-e": end-of-line                     # Ctrl+e        end of line

"\ee": "ranger\r"                       # Alt+e         open `ranger`

# vi-command ___________________________________________________________________
set keymap vi-command
$include ~/.config/bash/vi.inputrc

"u": vi-undo                            # u             undo
"v": ""                                 # v             unbind v, avoid conflict with Alt+v from foot.ini

$endif