0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.1.1281: cannot specify a count with :chistory

Problem:    Cannot specify a count with :chistory.
Solution:   Add a count to :chistory and :lhistory. (Yegappan Lakshmanan,
            closes #4344)
This commit is contained in:
Bram Moolenaar 2019-05-05 21:00:26 +02:00
parent 25c9c680ec
commit 8ffc7c8b5f
5 changed files with 75 additions and 26 deletions

View File

@ -139,8 +139,8 @@ processing a quickfix or location list command, it will be aborted.
:[count]lab[ove] Same as ":cabove", except the location list for the :[count]lab[ove] Same as ":cabove", except the location list for the
current window is used instead of the quickfix list. current window is used instead of the quickfix list.
*:cbe* *:cbelow* *:cbel* *:cbelow*
:[count]cbe[low] Go to the [count] error below the current line in the :[count]cbel[ow] Go to the [count] error below the current line in the
current buffer. If [count] is omitted, then 1 is current buffer. If [count] is omitted, then 1 is
used. If there are no errors, then an error message used. If there are no errors, then an error message
is displayed. Assumes that the entries in a quickfix is displayed. Assumes that the entries in a quickfix
@ -164,8 +164,8 @@ processing a quickfix or location list command, it will be aborted.
number of entries before the current position, then number of entries before the current position, then
the first error in the file is selected. the first error in the file is selected.
*:lbef* *:lbefore* *:lbe* *:lbefore*
:[count]lbef[ore] Same as ":cbefore", except the location list for the :[count]lbe[fore] Same as ":cbefore", except the location list for the
current window is used instead of the quickfix list. current window is used instead of the quickfix list.
*:caf* *:cafter* *:caf* *:cafter*
@ -536,6 +536,29 @@ EXECUTE A COMMAND IN ALL THE BUFFERS IN QUICKFIX OR LOCATION LIST:
etc. etc.
< Otherwise it works the same as `:ldo`. < Otherwise it works the same as `:ldo`.
FILTERING A QUICKFIX OR LOCATION LIST:
*cfilter-plugin* *:Cfilter* *:Lfilter*
If you have too many entries in a quickfix list, you can use the cfilter
plugin to reduce the number of entries. Load the plugin with: >
packadd cfilter
Then you can use the following commands to filter a quickfix/location list: >
:Cfilter[!] /{pat}/
:Lfilter[!] /{pat}/
The |:Cfilter| command creates a new quickfix list from the entries matching
{pat} in the current quickfix list. {pat} is a Vim |regular-expression|
pattern. Both the file name and the text of the entries are matched against
{pat}. If the optional ! is supplied, then the entries not matching {pat} are
used. The pattern can be optionally enclosed using one of the following
characters: ', ", /. If the pattern is empty, then the last used search
pattern is used.
The |:Lfilter| command does the same as |:Cfilter| but operates on the current
location list.
============================================================================= =============================================================================
2. The error window *quickfix-window* 2. The error window *quickfix-window*
@ -822,14 +845,19 @@ lists. They set one of the existing error lists as the current one.
the current window instead of the quickfix list. the current window instead of the quickfix list.
*:chistory* *:chi* *:chistory* *:chi*
:chi[story] Show the list of error lists. The current list is :[count]chi[story] Show the list of error lists. The current list is
marked with ">". The output looks like: marked with ">". The output looks like:
error list 1 of 3; 43 errors ~ error list 1 of 3; 43 errors ~
> error list 2 of 3; 0 errors ~ > error list 2 of 3; 0 errors ~
error list 3 of 3; 15 errors ~ error list 3 of 3; 15 errors ~
When [count] is given, then the count'th quickfix
list is made the current list. Example: >
" Make the 4th quickfix list current
:4chistory
<
*:lhistory* *:lhi* *:lhistory* *:lhi*
:lhi[story] Show the list of location lists, otherwise like :[count]lhi[story] Show the list of location lists, otherwise like
`:chistory`. `:chistory`.
When adding a new error list, it becomes the current list. When adding a new error list, it becomes the current list.
@ -1641,22 +1669,6 @@ The backslashes before the pipe character are required to avoid it to be
recognized as a command separator. The backslash before each space is recognized as a command separator. The backslash before each space is
required for the set command. required for the set command.
*cfilter-plugin* *:Cfilter* *:Lfilter*
If you have too many matching messages, you can use the cfilter plugin to
reduce the number of entries. Load the plugin with: >
packadd cfilter
Then you can use these command: >
:Cfilter[!] /{pat}/
:Lfilter[!] /{pat}/
:Cfilter creates a new quickfix list from entries matching {pat} in the
current quickfix list. Both the file name and the text of the entries are
matched against {pat}. If ! is supplied, then entries not matching {pat} are
used.
:Lfilter does the same as :Cfilter but operates on the current location list.
============================================================================= =============================================================================
8. The directory stack *quickfix-directory-stack* 8. The directory stack *quickfix-directory-stack*

View File

@ -336,8 +336,8 @@ EX(CMD_checktime, "checktime", ex_checktime,
RANGE|BUFNAME|COUNT|EXTRA|TRLBAR, RANGE|BUFNAME|COUNT|EXTRA|TRLBAR,
ADDR_OTHER), ADDR_OTHER),
EX(CMD_chistory, "chistory", qf_history, EX(CMD_chistory, "chistory", qf_history,
TRLBAR, RANGE|COUNT|TRLBAR,
ADDR_NONE), ADDR_UNSIGNED),
EX(CMD_clist, "clist", qf_list, EX(CMD_clist, "clist", qf_list,
BANG|EXTRA|TRLBAR|CMDWIN, BANG|EXTRA|TRLBAR|CMDWIN,
ADDR_NONE), ADDR_NONE),
@ -828,8 +828,8 @@ EX(CMD_lhelpgrep, "lhelpgrep", ex_helpgrep,
EXTRA|NOTRLCOM|NEEDARG, EXTRA|NOTRLCOM|NEEDARG,
ADDR_NONE), ADDR_NONE),
EX(CMD_lhistory, "lhistory", qf_history, EX(CMD_lhistory, "lhistory", qf_history,
TRLBAR, RANGE|COUNT|TRLBAR,
ADDR_NONE), ADDR_UNSIGNED),
EX(CMD_ll, "ll", ex_cc, EX(CMD_ll, "ll", ex_cc,
RANGE|COUNT|TRLBAR|BANG, RANGE|COUNT|TRLBAR|BANG,
ADDR_QUICKFIX), ADDR_QUICKFIX),

View File

@ -3742,6 +3742,27 @@ qf_history(exarg_T *eap)
qf_info_T *qi = qf_cmd_get_stack(eap, FALSE); qf_info_T *qi = qf_cmd_get_stack(eap, FALSE);
int i; int i;
if (eap->addr_count > 0)
{
if (qi == NULL)
{
emsg(_(e_loclist));
return;
}
// Jump to the specified quickfix list
if (eap->line2 > 0 && eap->line2 <= qi->qf_listcount)
{
qi->qf_curlist = eap->line2 - 1;
qf_msg(qi, qi->qf_curlist, "");
qf_update_buffer(qi, NULL);
}
else
emsg(_(e_invrange));
return;
}
if (qf_stack_empty(qi)) if (qf_stack_empty(qi))
msg(_("No entries")); msg(_("No entries"));
else else

View File

@ -1831,9 +1831,23 @@ func HistoryTest(cchar)
call assert_equal(' error list 2 of 3; 2 ' . common, res[1]) call assert_equal(' error list 2 of 3; 2 ' . common, res[1])
call assert_equal('> error list 3 of 3; 3 ' . common, res[2]) call assert_equal('> error list 3 of 3; 3 ' . common, res[2])
" Test for changing the quickfix lists
call assert_equal(3, g:Xgetlist({'nr' : 0}).nr)
exe '1' . a:cchar . 'hist'
call assert_equal(1, g:Xgetlist({'nr' : 0}).nr)
exe '3' . a:cchar . 'hist'
call assert_equal(3, g:Xgetlist({'nr' : 0}).nr)
call assert_fails('-2' . a:cchar . 'hist', 'E16:')
call assert_fails('4' . a:cchar . 'hist', 'E16:')
call g:Xsetlist([], 'f') call g:Xsetlist([], 'f')
let l = split(execute(a:cchar . 'hist'), "\n") let l = split(execute(a:cchar . 'hist'), "\n")
call assert_equal('No entries', l[0]) call assert_equal('No entries', l[0])
if a:cchar == 'c'
call assert_fails('4chist', 'E16:')
else
call assert_fails('4lhist', 'E776:')
endif
" An empty list should still show the stack history " An empty list should still show the stack history
call g:Xsetlist([]) call g:Xsetlist([])

View File

@ -767,6 +767,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 */
/**/
1281,
/**/ /**/
1280, 1280,
/**/ /**/