aboutsummaryrefslogtreecommitdiff
path: root/external/zsh/plugins/fzf-history.zsh
diff options
context:
space:
mode:
Diffstat (limited to 'external/zsh/plugins/fzf-history.zsh')
-rw-r--r--external/zsh/plugins/fzf-history.zsh19
1 files changed, 19 insertions, 0 deletions
diff --git a/external/zsh/plugins/fzf-history.zsh b/external/zsh/plugins/fzf-history.zsh
new file mode 100644
index 0000000..f91cc99
--- /dev/null
+++ b/external/zsh/plugins/fzf-history.zsh
@@ -0,0 +1,19 @@
+full_history() {
+ [[ ${@[-1]-} = *[0-9]* ]] && builtin fc -l "$@" || builtin fc -l "$@" 1;
+}
+
+trim() { sed 's/^\s*//g'; }
+reverse() { sed -n '1!G;h;$p'; }
+unique() { awk '!seen[$0]++'; }
+
+search_history() {
+ local result=$(full_history | trim | cut -d' ' -f 2- | reverse | unique | fzf);
+
+ # Replace the buffer with the editor output.
+ print -Rz - "$(echo -n "$result" | trim)";
+
+ zle send-break # Force reload from the buffer stack
+}
+
+zle -N search_history;
+bindkey '^R' search_history;