-*options.txt* For Vim version 9.1. Last change: 2025 Mar 07
+*options.txt* For Vim version 9.1. Last change: 2025 Mar 12
VIM REFERENCE MANUAL by Bram Moolenaar
*'completefuzzycollect'* *'cfc'*
'completefuzzycollect' 'cfc' string (default: empty)
global
- This option enables fuzzy collection for (only some) specific
- |ins-completion| modes, adjusting how items are gathered for fuzzy
- matching based on input.
- The option can contain the following values (separated by commas),
- each enabling fuzzy collection for a specific completion mode:
- files file names
- keyword keyword completion in 'complete' and current file
- whole_line whole lines
+ A comma-separated list of option enables fuzzy collection for specific
+ |ins-completion| modes, affecting how items are gathered during
+ completion. When set, fuzzy matching is used to find completion
+ candidates instead of the standard prefix-based matching. This option
+ can contain the following values are:
+
+ keyword keywords in the current file |i_CTRL-X_CTRL-N|
+ keywords with the ".", "w", "b", "u", "U" and
+ "k{dict}" flags in 'complete'. |i_CTRL-N| |i_CTRL-P|
+
+ files file names |i_CTRL-X_CTRL-F|
+
+ whole_line whole lines |i_CTRL-X_CTRL-L|
+
+ When used with 'completeopt' "longest" option, fuzzy collection can
+ identify the longest common string among the best fuzzy matches and
+ automatically insert it.
*'completeitemalign'* *'cia'*
'completeitemalign' 'cia' string (default: "abbr,kind,menu")
ins_compl_next_state_T *st,
int *compl_type_arg,
pos_T *start_match_pos,
- int in_fuzzy)
+ int fuzzy_collect)
{
int compl_type = -1;
int status = INS_COMPL_CPT_OK;
st->first_match_pos = *start_match_pos;
// Move the cursor back one character so that ^N can match the
// word immediately after the cursor.
- if (ctrl_x_mode_normal() && (!in_fuzzy && dec(&st->first_match_pos) < 0))
+ if (ctrl_x_mode_normal() && (!fuzzy_collect && dec(&st->first_match_pos) < 0))
{
// Move the cursor to after the last character in the
// buffer, so that word at start of buffer is found
int i;
int found_new_match;
int type = ctrl_x_mode;
- int in_fuzzy = (get_cot_flags() & COT_FUZZY) != 0;
if (!compl_started)
{
if ((ctrl_x_mode_normal() || ctrl_x_mode_line_or_eval())
&& (!compl_started || st.found_all))
{
- int status = process_next_cpt_value(&st, &type, ini, in_fuzzy);
+ int status = process_next_cpt_value(&st, &type, ini, cfc_has_mode());
if (status == INS_COMPL_CPT_END)
break;
* - `*len` is set to the length of the matched word.
* - `*score` contains the match score.
*
- * If no match is found, `*ptr` is updated to to the end of the line.
+ * If no match is found, `*ptr` is updated to the end of the line.
*/
int
fuzzy_match_str_in_line(
pos_T circly_end;
int found_new_match = FALSE;
int looped_around = FALSE;
-
- int whole_line = ctrl_x_mode_whole_line();
- if (whole_line)
- current_pos.lnum += dir;
+ int whole_line = ctrl_x_mode_whole_line();
if (buf == curbuf)
circly_end = *start_pos;
circly_end.coladd = 0;
}
+ if (whole_line && start_pos->lnum != pos->lnum)
+ current_pos.lnum += dir;
+
do {
// Check if looped around and back to start position
{
// Get the current line buffer
*ptr = ml_get_buf(buf, current_pos.lnum, FALSE);
+ if (!whole_line)
+ *ptr += current_pos.col;
+
// If ptr is end of line is reached, move to next line
// or previous line based on direction
if (*ptr != NULL && **ptr != NUL)
{
if (!whole_line)
{
- *ptr += current_pos.col;
// Try to find a fuzzy match in the current line starting
// from current position
found_new_match = fuzzy_match_str_in_line(ptr, pattern,
else
next_word_end = find_word_end(next_word_end);
}
- else if (looped_around)
- found_new_match = FALSE;
*len = next_word_end - *ptr;
current_pos.col = *len;
call feedkeys("STe\<C-X>\<C-N>x\<CR>\<Esc>0", 'tx!')
call assert_equal('Tex', getline(line('.') - 1))
+ call setline(1, ['fuzzy', 'fuzzycollect', 'completefuzzycollect'])
+ call feedkeys("Gofuzzy\<C-X>\<C-N>\<C-N>\<C-N>\<CR>\<Esc>0", 'tx!')
+ call assert_equal('fuzzycollect', getline(line('.') - 1))
+ call feedkeys("Gofuzzy\<C-X>\<C-N>\<C-N>\<C-N>\<C-N>\<CR>\<Esc>0", 'tx!')
+ call assert_equal('completefuzzycollect', getline(line('.') - 1))
+
bw!
bw!
set completeopt& cfc& cpt&
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1197,
/**/
1196,
/**/