6 Commits

Author SHA1 Message Date
Junegunn Choi
34a564c81f Update README 2026-02-02 09:42:52 +09:00
Enno
ddc14a6a54 Avoid cooked terminal mode (#1604)
as `:help system()` states

		When prepended by |:silent| the terminal will not be set to
		cooked mode.  This is meant to be used for commands that do
		not need the user to type.  It avoids stray characters showing
		up on the screen which require |CTRL-L| to remove. >
			:silent let f = system('ls *.vim')
2025-12-09 08:49:13 +09:00
Junegunn Choi
879db51d09 Update README.md 2025-09-03 09:59:37 +09:00
phanium
3725f364cc Fix cmd hisotry correctly (#1594) 2025-06-20 17:04:48 +09:00
Junegunn Choi
98dcd77a18 Fix dictionary alignments 2025-06-08 10:51:25 +09:00
Scott Lai
a2ed9fb885 Add :BMarks command (#1593)
And allow passing arguments of :marks to :Marks command. Close #1158.

Co-authored-by: Junegunn Choi <junegunn.c@gmail.com>
2025-06-08 10:48:17 +09:00
4 changed files with 28 additions and 16 deletions

View File

@@ -79,6 +79,7 @@ Commands
| `:BTags [QUERY]` | Tags in the current buffer | | `:BTags [QUERY]` | Tags in the current buffer |
| `:Changes` | Changelist across all open buffers | | `:Changes` | Changelist across all open buffers |
| `:Marks` | Marks | | `:Marks` | Marks |
| `:BMarks` | Marks in the current buffer |
| `:Jumps` | Jumps | | `:Jumps` | Jumps |
| `:Windows` | Windows | | `:Windows` | Windows |
| `:Locate PATTERN` | `locate` command output | | `:Locate PATTERN` | `locate` command output |

View File

@@ -669,9 +669,8 @@ function! s:history_sink(type, lines)
let key = a:lines[0] let key = a:lines[0]
let item = matchstr(a:lines[1], ' *[0-9]\+ *\zs.*') let item = matchstr(a:lines[1], ' *[0-9]\+ *\zs.*')
if key == 'ctrl-e' if key == 'ctrl-e'
call histadd(a:type, item)
redraw redraw
call feedkeys(a:type."\<up>", 'n') call feedkeys(a:type.item, 'nt')
else else
if a:type == ':' if a:type == ':'
call histadd(a:type, item) call histadd(a:type, item)
@@ -719,7 +718,7 @@ function! s:get_git_root(dir)
return FugitiveWorkTree() return FugitiveWorkTree()
endif endif
let dir = len(a:dir) ? a:dir : substitute(split(expand('%:p:h'), '[/\\]\.git\([/\\]\|$\)')[0], '^fugitive://', '', '') let dir = len(a:dir) ? a:dir : substitute(split(expand('%:p:h'), '[/\\]\.git\([/\\]\|$\)')[0], '^fugitive://', '', '')
let root = systemlist('git -C ' . shellescape(dir) . ' rev-parse --show-toplevel')[0] silent let root = systemlist('git -C ' . shellescape(dir) . ' rev-parse --show-toplevel')[0]
return v:shell_error ? '' : (len(a:dir) ? fnamemodify(a:dir, ':p') : root) return v:shell_error ? '' : (len(a:dir) ? fnamemodify(a:dir, ':p') : root)
endfunction endfunction
@@ -1008,7 +1007,7 @@ function! fzf#vim#grep2(command_prefix, query, ...)
let name = join(words, '-') let name = join(words, '-')
let fallback = s:is_win ? '' : ' || :' let fallback = s:is_win ? '' : ' || :'
let opts = { let opts = {
\ 'source': s:is_win ? 'cd .' : ':', \ 'source': s:is_win ? 'cd .' : ':',
\ 'options': ['--ansi', '--prompt', toupper(name).'> ', '--query', a:query, \ 'options': ['--ansi', '--prompt', toupper(name).'> ', '--query', a:query,
\ '--disabled', \ '--disabled',
\ '--multi', '--bind', 'alt-a:select-all,alt-d:deselect-all', \ '--multi', '--bind', 'alt-a:select-all,alt-d:deselect-all',
@@ -1236,9 +1235,9 @@ function! s:command_sink(lines)
endif endif
let cmd = matchstr(a:lines[1], s:tab.'\zs\S*\ze'.s:tab) let cmd = matchstr(a:lines[1], s:tab.'\zs\S*\ze'.s:tab)
if empty(a:lines[0]) if empty(a:lines[0])
call feedkeys(':'.cmd.(a:lines[1][0] == '!' ? '' : ' '), 'n') call feedkeys(':'.cmd.(a:lines[1][0] == '!' ? '' : ' '), 'nt')
else else
call feedkeys(':'.cmd."\<cr>", 'n') call feedkeys(':'.cmd."\<cr>", 'nt')
endif endif
endfunction endfunction
@@ -1362,15 +1361,25 @@ function! s:mark_sink(lines)
execute 'normal! `'.matchstr(a:lines[1], '\S').'zz' execute 'normal! `'.matchstr(a:lines[1], '\S').'zz'
endfunction endfunction
function! fzf#vim#marks(...) function! fzf#vim#marks(...) abort
let [initial_marks, extra] = (a:0 && type(a:1) == type('')) ?
\ [a:1, a:000[1:]] : ['', a:000]
redir => cout redir => cout
silent marks execute 'silent! marks' initial_marks
redir END redir END
let list = split(cout, "\n") let list = split(cout, "\n")
" If first line is not the expected header, no marks found
if empty(list) || list[0] =~# '^E'
return s:warn('No marks found')
endif
return s:fzf('marks', { return s:fzf('marks', {
\ 'source': extend(list[0:0], map(list[1:], 's:format_mark(v:val)')), \ 'source': extend(list[0:0], map(list[1:], 's:format_mark(v:val)')),
\ 'sink*': s:function('s:mark_sink'), \ 'sink*': s:function('s:mark_sink'),
\ 'options': '+m -x --ansi --tiebreak=index --header-lines 1 --tiebreak=begin --prompt "Marks> "'}, a:000) \ 'options': '+m -x --ansi --tiebreak=index --header-lines 1 --tiebreak=begin --prompt "Marks> "'}, extra)
endfunction endfunction
" ------------------------------------------------------------------ " ------------------------------------------------------------------
@@ -1420,9 +1429,9 @@ function! fzf#vim#jumps(...)
let s:jump_current = pos let s:jump_current = pos
let current = -pos-1 let current = -pos-1
return s:fzf('jumps', { return s:fzf('jumps', {
\ 'source' : map(s:jumplist, 's:jump_format(v:val)'), \ 'source': map(s:jumplist, 's:jump_format(v:val)'),
\ 'sink*' : s:function('s:jump_sink'), \ 'sink*': s:function('s:jump_sink'),
\ 'options' : ['+m', '-x', '--ansi', '--tiebreak=index', '--cycle', '--scroll-off=999', '--sync', '--bind', 'start:pos('.current.')+offset-middle', '--tac', '--tiebreak=begin', '--prompt', 'Jumps> ', '--preview-window', '+{3}/2', '--tabstop=2', '--delimiter', '[:\s]+'], \ 'options': ['+m', '-x', '--ansi', '--tiebreak=index', '--cycle', '--scroll-off=999', '--sync', '--bind', 'start:pos('.current.')+offset-middle', '--tac', '--tiebreak=begin', '--prompt', 'Jumps> ', '--preview-window', '+{3}/2', '--tabstop=2', '--delimiter', '[:\s]+'],
\ }, a:000) \ }, a:000)
endfunction endfunction

View File

@@ -1,4 +1,4 @@
fzf-vim.txt fzf-vim Last change: March 3 2025 fzf-vim.txt fzf-vim Last change: June 8 2025
FZF-VIM - TABLE OF CONTENTS *fzf-vim* *fzf-vim-toc* FZF-VIM - TABLE OF CONTENTS *fzf-vim* *fzf-vim-toc*
============================================================================== ==============================================================================
@@ -110,8 +110,8 @@ COMMANDS *fzf-vim-commands*
============================================================================== ==============================================================================
*:Files* *:GFiles* *:Buffers* *:Colors* *:Ag* *:Rg* *:RG* *:Lines* *:BLines* *:Tags* *:BTags* *:Files* *:GFiles* *:Buffers* *:Colors* *:Ag* *:Rg* *:RG* *:Lines* *:BLines* *:Tags* *:BTags*
*:Changes* *:Marks* *:Jumps* *:Windows* *:Locate* *:History* *:Snippets* *:Commits* *:BCommits* *:Changes* *:Marks* *:BMarks* *:Jumps* *:Windows* *:Locate* *:History* *:Snippets* *:Commits*
*:Commands* *:Maps* *:Helptags* *:Filetypes* *:BCommits* *:Commands* *:Maps* *:Helptags* *:Filetypes*
-----------------------+-------------------------------------------------------------------------------------- -----------------------+--------------------------------------------------------------------------------------
Command | List ~ Command | List ~
@@ -130,6 +130,7 @@ COMMANDS *fzf-vim-commands*
`:BTags [QUERY]` | Tags in the current buffer `:BTags [QUERY]` | Tags in the current buffer
`:Changes` | Changelist across all open buffers `:Changes` | Changelist across all open buffers
`:Marks` | Marks `:Marks` | Marks
`:BMarks` | Marks in the current buffer
`:Jumps` | Jumps `:Jumps` | Jumps
`:Windows` | Windows `:Windows` | Windows
`:Locate PATTERN` | `locate` command output `:Locate PATTERN` | `locate` command output

View File

@@ -67,7 +67,8 @@ call s:defs([
\'command! -bar -bang Snippets call fzf#vim#snippets(<bang>0)', \'command! -bar -bang Snippets call fzf#vim#snippets(<bang>0)',
\'command! -bar -bang Commands call fzf#vim#commands(<bang>0)', \'command! -bar -bang Commands call fzf#vim#commands(<bang>0)',
\'command! -bar -bang Jumps call fzf#vim#jumps(fzf#vim#with_preview({ "placeholder": "{2..4}"}), <bang>0)', \'command! -bar -bang Jumps call fzf#vim#jumps(fzf#vim#with_preview({ "placeholder": "{2..4}"}), <bang>0)',
\'command! -bar -bang Marks call fzf#vim#marks(<bang>0)', \'command! -bar -bang -nargs=* Marks call fzf#vim#marks(<q-args>, <bang>0)',
\'command! -bar -bang -nargs=* BMarks call fzf#vim#marks("abcdefghijklmnopqrstuvwxyz", <bang>0)',
\'command! -bar -bang Changes call fzf#vim#changes(<bang>0)', \'command! -bar -bang Changes call fzf#vim#changes(<bang>0)',
\'command! -bar -bang Helptags call fzf#vim#helptags(fzf#vim#with_preview({ "placeholder": "--tag {2}:{3}:{4}" }), <bang>0)', \'command! -bar -bang Helptags call fzf#vim#helptags(fzf#vim#with_preview({ "placeholder": "--tag {2}:{3}:{4}" }), <bang>0)',
\'command! -bar -bang Windows call fzf#vim#windows(fzf#vim#with_preview({ "placeholder": "{2}" }), <bang>0)', \'command! -bar -bang Windows call fzf#vim#windows(fzf#vim#with_preview({ "placeholder": "{2}" }), <bang>0)',