mirror of
https://github.com/junegunn/fzf.vim.git
synced 2026-09-10 00:33:20 +08:00
Add ctrl-o to show the entry without closing fzf (#1621)
Files, GFiles, GFiles?, Rg/Ag, Buffers, History, Locate, Lines, BLines, Tags, BTags, Marks, Changes, Commits and BCommits. Writes the entry to an fzf#vim#ipc fifo, so it needs the asynchronous fzf#run from junegunn/fzf@5cb7bab7 (junegunn/fzf#4897, 0.74.4), which the g:loaded_fzf check detects. Commands declare '_show' for the entry kind and '_hint' for footer keys, so the footer and the binding cannot disagree. s:can_show withholds both when the run would block, when the window to open in is not visible, or when g:fzf_action, the paste key or the command itself already claims the key. g:fzf_vim.show_key configures the key, empty to turn it off, comma-separated to bind several ('ctrl-o,double-click'). Named for its 'Show' footer label, since Enter already occupies 'Open' there. Only the first key is labelled, and a clash on any of them drops all of them, so the footer cannot list a key that does nothing. Binding Enter drops its 'Open' hint too, since fzf accepts on Enter rather than through g:fzf_action. s:show_entry parses each entry the way that command's sink does and runs win_execute() in the window fzf started from. That keeps the focus in fzf and works from a popup, which win_gotoid() cannot leave. It opens with 'keepalt keepjumps hide', so stepping through entries leaves the alternate file and the jumplist unchanged. BLines, BTags and a lowercase mark carry a position but no buffer, so the callback carries the buffer the run started on as well as the window. fzf#run is asynchronous, so runs can overlap, and a second run would stop the first's ipc channel and overwrite the script locals its sink reads back afterwards. Channels are now keyed by fifo path and per-run state is bound into the callback instead, which is why Buffers, Colors, Jumps, Maps, Helptags and complete change here.
This commit is contained in:
@@ -102,6 +102,15 @@ Commands
|
||||
line content (`:Lines`, `:BLines`, `:Marks`, `:Changes`), matched text
|
||||
(`:Rg`, `:Ag`, `:Grep`), tag name (`:Tags`, `:BTags`), or commit hash
|
||||
(`:Commits`, `:BCommits`)
|
||||
- Most commands support `CTRL-O` to open the current entry in the window fzf
|
||||
was started from, leaving fzf open, so you can look through several entries
|
||||
in a single run (`:Files`, `:GFiles`, `:GFiles?`, `:Buffers`, `:History`,
|
||||
`:Locate`, `:Rg`, `:Ag`, `:Grep`, `:Lines`, `:BLines`, `:Tags`, `:BTags`,
|
||||
`:Marks`, `:Changes`, `:Commits`, `:BCommits`). Requires fzf 0.74.4 or
|
||||
later, and is not offered in fullscreen mode, with a layout that leaves no
|
||||
other window (`enew`, `tabnew`), on Windows, or when the key is already
|
||||
used by `g:fzf_vim.paste_key`, `g:fzf_action`, or the command itself, as
|
||||
`CTRL-ALT-X` is in `:Buffers`
|
||||
- Bang-versions of the commands (e.g. `Ag!`) will open fzf in fullscreen
|
||||
- You can set `g:fzf_vim.command_prefix` to give the same prefix to the commands
|
||||
- e.g. `let g:fzf_vim.command_prefix = 'Fzf'` and you have `FzfFiles`, etc.
|
||||
@@ -173,6 +182,25 @@ command inserts). Customize it with `g:fzf_vim.paste_key`.
|
||||
let g:fzf_vim.paste_key = 'alt-enter'
|
||||
```
|
||||
|
||||
#### Show key
|
||||
|
||||
Most commands support a key that opens the current entry in the window fzf
|
||||
was started from and leaves fzf open, so you can look through several entries
|
||||
in one run (see the command list above). It is labelled `Show` in the footer
|
||||
to set it apart from `Enter Open`, which opens the entry and closes fzf.
|
||||
Customize it with `g:fzf_vim.show_key`, or set it to an empty string to turn
|
||||
the key off. A comma-separated list binds every key in it. It takes the key
|
||||
over from `$FZF_DEFAULT_OPTS`, so pick another key or turn it off to keep a
|
||||
binding of your own.
|
||||
|
||||
```vim
|
||||
" Key to open the current entry, leaving fzf open (default: 'ctrl-o')
|
||||
let g:fzf_vim.show_key = 'ctrl-o'
|
||||
|
||||
" Use CTRL-O and double-click
|
||||
let g:fzf_vim.show_key = 'ctrl-o,double-click'
|
||||
```
|
||||
|
||||
#### Command-level options
|
||||
|
||||
```vim
|
||||
|
||||
Reference in New Issue
Block a user