mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 9.1.0420: :browse oldfiles prompts even with single entry
Problem: :browse oldfiles prompts even with single entry Solution: Do not prompt, but edit the file directly, also when using :filter /pat/ browse oldfiles closes: #14794 Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
*usr_21.txt* For Vim version 9.1. Last change: 2019 Apr 25
|
*usr_21.txt* For Vim version 9.1. Last change: 2024 May 17
|
||||||
|
|
||||||
VIM USER MANUAL - by Bram Moolenaar
|
VIM USER MANUAL - by Bram Moolenaar
|
||||||
|
|
||||||
@@ -207,6 +207,23 @@ You get the same list of files as with |:oldfiles|. If you want to edit
|
|||||||
|
|
||||||
Type "2" and press <Enter> to edit the second file.
|
Type "2" and press <Enter> to edit the second file.
|
||||||
|
|
||||||
|
If you know that the filename contains a pattern, you can also |:filter| the
|
||||||
|
list of files: >
|
||||||
|
|
||||||
|
:filter /resume/ :browse oldfiles
|
||||||
|
<
|
||||||
|
Since there is only one single matching filename, Vim will directly edit that
|
||||||
|
file without prompting. If the filter matches several files, you'll get
|
||||||
|
prompted for the list of matching files instead: >
|
||||||
|
|
||||||
|
:filter! /resume/ browse oldfiles
|
||||||
|
< 1: ~/.viminfo ~
|
||||||
|
3: /tmp/draft ~
|
||||||
|
Type number and <Enter> (q or empty cancels): ~
|
||||||
|
|
||||||
|
Note: this time we filtered out all files NOT matching resume.
|
||||||
|
|
||||||
|
|
||||||
More info at |:oldfiles|, |v:oldfiles| and |c_#<|.
|
More info at |:oldfiles|, |v:oldfiles| and |c_#<|.
|
||||||
|
|
||||||
|
|
||||||
|
@@ -5622,6 +5622,9 @@ ex_oldfiles(exarg_T *eap UNUSED)
|
|||||||
listitem_T *li;
|
listitem_T *li;
|
||||||
int nr = 0;
|
int nr = 0;
|
||||||
char_u *fname;
|
char_u *fname;
|
||||||
|
// for a single filtered match, remember the number
|
||||||
|
// so we can jump directly to it without prompting
|
||||||
|
int matches = -1;
|
||||||
|
|
||||||
if (l == NULL)
|
if (l == NULL)
|
||||||
{
|
{
|
||||||
@@ -5637,6 +5640,10 @@ ex_oldfiles(exarg_T *eap UNUSED)
|
|||||||
fname = tv_get_string(&li->li_tv);
|
fname = tv_get_string(&li->li_tv);
|
||||||
if (!message_filtered(fname))
|
if (!message_filtered(fname))
|
||||||
{
|
{
|
||||||
|
if (matches < 0)
|
||||||
|
matches = nr;
|
||||||
|
else
|
||||||
|
matches = 0;
|
||||||
msg_outnum((long)nr);
|
msg_outnum((long)nr);
|
||||||
msg_puts(": ");
|
msg_puts(": ");
|
||||||
msg_outtrans(fname);
|
msg_outtrans(fname);
|
||||||
@@ -5654,7 +5661,15 @@ ex_oldfiles(exarg_T *eap UNUSED)
|
|||||||
if (cmdmod.cmod_flags & CMOD_BROWSE)
|
if (cmdmod.cmod_flags & CMOD_BROWSE)
|
||||||
{
|
{
|
||||||
quit_more = FALSE;
|
quit_more = FALSE;
|
||||||
nr = prompt_for_number(FALSE);
|
// we only need to prompt if there is more than 1 match
|
||||||
|
if (matches > 0)
|
||||||
|
{
|
||||||
|
nr = matches;
|
||||||
|
// msg_putchar above sets needs_wait_return
|
||||||
|
need_wait_return = FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
nr = prompt_for_number(FALSE);
|
||||||
msg_starthere();
|
msg_starthere();
|
||||||
if (nr > 0)
|
if (nr > 0)
|
||||||
{
|
{
|
||||||
|
@@ -1299,4 +1299,34 @@ func Test_viminfo_merge_old_jumplist()
|
|||||||
bw!
|
bw!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_viminfo_oldfiles_filter()
|
||||||
|
let v:oldfiles = []
|
||||||
|
let _viminfofile = &viminfofile
|
||||||
|
let &viminfofile=''
|
||||||
|
let lines = [
|
||||||
|
\ '# comment line',
|
||||||
|
\ '*encoding=utf-8',
|
||||||
|
\ "> /tmp/vimrc_one.vim",
|
||||||
|
\ "\t\"\t11\t0",
|
||||||
|
\ "",
|
||||||
|
\ "> /tmp/foobar.txt",
|
||||||
|
\ "\t\"\t11\t0",
|
||||||
|
\ "",
|
||||||
|
\ ]
|
||||||
|
call writefile(lines, 'Xviminfo1', 'D')
|
||||||
|
rviminfo! Xviminfo1
|
||||||
|
new
|
||||||
|
" filter returns a single item
|
||||||
|
let a = execute('filter /vim/ oldfiles')->split('\n')
|
||||||
|
call assert_equal(1, len(a))
|
||||||
|
" filter returns more than a single match
|
||||||
|
let a = execute('filter #tmp# oldfiles')->split('\n')
|
||||||
|
call assert_equal(2, len(a))
|
||||||
|
" don't get prompted for the file, but directly open it
|
||||||
|
filter /vim/ browse oldfiles
|
||||||
|
call assert_equal("/tmp/vimrc_one.vim", expand("%"))
|
||||||
|
bw
|
||||||
|
let &viminfofile = _viminfofile
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
420,
|
||||||
/**/
|
/**/
|
||||||
419,
|
419,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user