feat(history): add support for Nth history index in substitution
Extends the interactive history substitution function to support an optional third field `old/new/index`. - Keeps default behavior of targeting the most recent command (index 1). - Allows targeting a specific history entry by appending a number. - Validates that the index is a positive integer before attempting retrieval. - Safely handles cases where the requested history index does not exist. Example: 'cat/bat/5' now replaces 'cat' with 'bat' in the 5th previous command.
This commit is contained in:
@@ -6,8 +6,18 @@ function __interactive_history_sub
|
|||||||
set -l parts (string split '/' -- "$current_line")
|
set -l parts (string split '/' -- "$current_line")
|
||||||
set -l old $parts[1]
|
set -l old $parts[1]
|
||||||
set -l new $parts[2]
|
set -l new $parts[2]
|
||||||
set -l expanded (string replace -a -- "$old" "$new" "$last_cmd")
|
set -l history_index 1
|
||||||
|
|
||||||
|
if test (count $parts) -ge 3; and string match -qr '^[1-9][0-9]*$' -- "$parts[3]"
|
||||||
|
set history_index $parts[3]
|
||||||
|
end
|
||||||
|
|
||||||
|
set -l target_cmd $history[$history_index]
|
||||||
|
|
||||||
|
if test -n "$target_cmd"
|
||||||
|
set -l expanded (string replace -a -- "$old" "$new" "$target_cmd")
|
||||||
commandline -r "$expanded"
|
commandline -r "$expanded"
|
||||||
|
end
|
||||||
else
|
else
|
||||||
if test -z "$current_line"
|
if test -z "$current_line"
|
||||||
commandline -r "sudo $last_cmd"
|
commandline -r "sudo $last_cmd"
|
||||||
|
|||||||
Reference in New Issue
Block a user