mirror of
https://github.com/junegunn/fzf.vim.git
synced 2026-09-10 16:53:22 +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:
@@ -155,6 +155,14 @@ COMMANDS *fzf-vim-commands*
|
||||
command: file path (Files, GFiles, Buffers, History, Locate), 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.
|
||||
@@ -241,6 +249,26 @@ buffer instead of opening them. Customize it with `g:fzf_vim.paste_key`.
|
||||
let g:fzf_vim.paste_key = 'alt-enter'
|
||||
<
|
||||
|
||||
Show key~
|
||||
*fzf-vim-show-key*
|
||||
*g:fzf_vim.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. 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.
|
||||
>
|
||||
" 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~
|
||||
*fzf-vim-command-level-options*
|
||||
|
||||
|
||||
Reference in New Issue
Block a user