3 ms·
Can you explain the fzf binding? I don’t get what’s going on there
by 0x008 6y ago
Can you explain the fzf binding? I don’t get what’s going on there
- C0d3r 6y agofzf can be used as a cool selector in the terminal, it just outputs what you picked from the list, so if you run `ls | fzf`, it will pass the list of files/dirs into fzf, where you can fuzzy search, select and it outputs to STDOUT. So if you want to edit a file from inside a directory easily, you can do: vim $(find | fzf)
- FeepingCreature 6y agoOkay, the actual fzf call is just the $(fzf). But when you use a keybinding with -x, your shell executes the command directly. So when you press return in fzf, indicated by the exit code being zero, we additionally do three things: - echo a facsimile of the prompt followed by the edit command so that it looks like you just typed "edit filename" - insert that facsimile into the history buffer so that you can redo the edit command with arrow-up - actually start the editor - and clear the commandline of anything you may have written beforehand, which would otherwise still be there and break the illusion. The reasoning behind this dance is that if you just do an ordinary bind, you just get the edit_fuzzy call in your bash history, which is pretty useless. You want the actual generated edit call, not the edit_fuzzy call. So we use bind -x and "pretend that you typed in the edit call manually". We could just make ctrl-E insert the edit command into the readline buffer, but then we'd have to press return twice. ${PS1@P} is "PS1, expanded as if it were a prompt (P)".