aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2025-03-14 07:42:54 +0800
committerzeertzjq <zeertzjq@outlook.com>2025-03-27 07:26:42 +0800
commite39cdafed96813567128c931a6b784b6858dcc13 (patch)
tree94e60e20ce3f0767d80d70cec9b180e30d0d4c5c
parent5975ddbdb85073ce055a24915de7f6960e201dc4 (diff)
downloadrneovim-e39cdafed96813567128c931a6b784b6858dcc13.tar.gz
rneovim-e39cdafed96813567128c931a6b784b6858dcc13.tar.bz2
rneovim-e39cdafed96813567128c931a6b784b6858dcc13.zip
vim-patch:9.1.1201: 'completefuzzycollect' does not handle dictionary correctly
Problem: 'completefuzzycollect' does not handle dictionary correctly Solution: check for ctrl_x_mode_dictionary (glepnir) closes: vim/vim#16867 https://github.com/vim/vim/commit/587601671cd06ddc4d78f907d98578cdab96003f Cherry-pick a documentation fix from later. Co-authored-by: glepnir <glephunter@gmail.com>
-rw-r--r--runtime/doc/options.txt17
-rw-r--r--runtime/lua/vim/_meta/options.lua17
-rw-r--r--src/nvim/insexpand.c11
-rw-r--r--src/nvim/options.lua17
-rw-r--r--test/old/testdir/test_ins_complete.vim9
5 files changed, 41 insertions, 30 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 9f084c5d44..dd2460722e 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1526,17 +1526,18 @@ A jump table for the options with a short description can be found at |Q_op|.
find completion candidates instead of the standard prefix-based
matching. This option can contain the following values:
- 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|
+ keyword keywords in the current file |i_CTRL-X_CTRL-N|
+ keywords with flags ".", "w", |i_CTRL-N| |i_CTRL-P|
+ "b", "u", "U" and "k{dict}" in 'complete'
+ keywords in 'dictionary' |i_CTRL-X_CTRL-K|
- files file names |i_CTRL-X_CTRL-F|
+ files file names |i_CTRL-X_CTRL-F|
- whole_line whole lines |i_CTRL-X_CTRL-L|
+ 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.
+ When using the 'completeopt' "longest" option value, fuzzy collection
+ can identify the longest common string among the best fuzzy matches
+ and insert it automatically.
*'completeitemalign'* *'cia'*
'completeitemalign' 'cia' string (default "abbr,kind,menu")
diff --git a/runtime/lua/vim/_meta/options.lua b/runtime/lua/vim/_meta/options.lua
index a3cb5042aa..20d8ac3058 100644
--- a/runtime/lua/vim/_meta/options.lua
+++ b/runtime/lua/vim/_meta/options.lua
@@ -1050,17 +1050,18 @@ vim.bo.cfu = vim.bo.completefunc
--- find completion candidates instead of the standard prefix-based
--- matching. This option can contain the following values:
---
---- 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`
+--- keyword keywords in the current file `i_CTRL-X_CTRL-N`
+--- keywords with flags ".", "w", `i_CTRL-N` `i_CTRL-P`
+--- "b", "u", "U" and "k{dict}" in 'complete'
+--- keywords in 'dictionary' `i_CTRL-X_CTRL-K`
---
---- files file names `i_CTRL-X_CTRL-F`
+--- files file names `i_CTRL-X_CTRL-F`
---
---- whole_line whole lines `i_CTRL-X_CTRL-L`
+--- 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.
+--- When using the 'completeopt' "longest" option value, fuzzy collection
+--- can identify the longest common string among the best fuzzy matches
+--- and insert it automatically.
---
--- @type string
vim.o.completefuzzycollect = ""
diff --git a/src/nvim/insexpand.c b/src/nvim/insexpand.c
index 47238468db..422eb409fe 100644
--- a/src/nvim/insexpand.c
+++ b/src/nvim/insexpand.c
@@ -792,14 +792,13 @@ int ins_compl_add_infercase(char *str_arg, int len, bool icase, char *fname, Dir
/// Check if ctrl_x_mode has been configured in 'completefuzzycollect'
static bool cfc_has_mode(void)
{
- switch (ctrl_x_mode) {
- case CTRL_X_NORMAL:
+ if (ctrl_x_mode_normal() || ctrl_x_mode_dictionary()) {
return (cfc_flags & kOptCfcFlagKeyword) != 0;
- case CTRL_X_FILES:
+ } else if (ctrl_x_mode_files()) {
return (cfc_flags & kOptCfcFlagFiles) != 0;
- case CTRL_X_WHOLE_LINE:
+ } else if (ctrl_x_mode_whole_line()) {
return (cfc_flags & kOptCfcFlagWholeLine) != 0;
- default:
+ } else {
return false;
}
}
@@ -1670,7 +1669,7 @@ static void ins_compl_files(int count, char **files, bool thesaurus, int flags,
regmatch_T *regmatch, char *buf, Direction *dir)
FUNC_ATTR_NONNULL_ARG(2, 7)
{
- bool in_fuzzy_collect = cfc_has_mode() && ctrl_x_mode_normal();
+ bool in_fuzzy_collect = cfc_has_mode();
char *leader = in_fuzzy_collect ? ins_compl_leader() : NULL;
int leader_len = in_fuzzy_collect ? (int)ins_compl_leader_len() : 0;
diff --git a/src/nvim/options.lua b/src/nvim/options.lua
index 96548580ba..f566582c0c 100644
--- a/src/nvim/options.lua
+++ b/src/nvim/options.lua
@@ -1472,17 +1472,18 @@ local options = {
find completion candidates instead of the standard prefix-based
matching. This option can contain the following values:
- 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|
+ keyword keywords in the current file |i_CTRL-X_CTRL-N|
+ keywords with flags ".", "w", |i_CTRL-N| |i_CTRL-P|
+ "b", "u", "U" and "k{dict}" in 'complete'
+ keywords in 'dictionary' |i_CTRL-X_CTRL-K|
- files file names |i_CTRL-X_CTRL-F|
+ files file names |i_CTRL-X_CTRL-F|
- whole_line whole lines |i_CTRL-X_CTRL-L|
+ 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.
+ When using the 'completeopt' "longest" option value, fuzzy collection
+ can identify the longest common string among the best fuzzy matches
+ and insert it automatically.
]=],
full_name = 'completefuzzycollect',
list = 'onecomma',
diff --git a/test/old/testdir/test_ins_complete.vim b/test/old/testdir/test_ins_complete.vim
index 31991dd6f0..135e85b6c2 100644
--- a/test/old/testdir/test_ins_complete.vim
+++ b/test/old/testdir/test_ins_complete.vim
@@ -2988,8 +2988,17 @@ func Test_complete_fuzzy_collect()
call feedkeys("Gofuzzy\<C-X>\<C-N>\<C-N>\<C-N>\<C-N>\<CR>\<Esc>0", 'tx!')
call assert_equal('completefuzzycollect', getline(line('.') - 1))
+ " keywords in 'dictonary'
+ call writefile(['hello', 'think'], 'test_dict.txt', 'D')
+ set dict=test_dict.txt
+ call feedkeys("Sh\<C-X>\<C-K>\<C-N>\<CR>\<Esc>0", 'tx!')
+ call assert_equal('hello', getline(line('.') - 1))
+ call feedkeys("Sh\<C-X>\<C-K>\<C-N>\<C-N>\<CR>\<Esc>0", 'tx!')
+ call assert_equal('think', getline(line('.') - 1))
+
bw!
bw!
+ set dict&
set completeopt& cfc& cpt&
endfunc