Vi/Vim 字典获取整行

Vi/Vim Dictionary Get Whole Line

我有一个字典文件用于在 VI 中自动完成。我知道我需要使用 "CTRL+ X, CTRL+K" 来搜索和自动完成单词或行。 示例文件 dic.:

xi_x1_a1

xi_x1_a2

xi_x1_a3

xi_x1_a4

xi_x2_a4

xi_x1_a6

xi_x1_b

...

在Vi/Vim中,如果我输入:xi "CTRL+X, CTRL+k",那么我将在光标处接收字典中的所有行。它没有用,因为我的字典文件有很多行。

怎么只能输入"a4, CTRL+x, CTRL+k"?然后我在光标中只得到两条自动完成行的匹配行。

xi_x1_a4

xi_x2_a4

感谢帮助。

您需要使用 completefunc。这允许您指定您想要完成的方式。

如果您编辑 ~/.vimrc 并输入如下内容:

function! MyCompleteFunc(findstart, base)
  if (a:findstart == 1)
    normal b
    return col(".") - 1
  else
    " Hardcoded path to dictionary. You could tweak this to use
    " whatever dictionary you have set with `set dictionary=`
    let l:data = readfile("/home/david/mydic.txt")
    return filter(l:data, 'v:val =~ ".*' . a:base . '.*"')
  endif
endfunction

set completefunc=MyCompleteFunc

它应该可以解决问题。

然后你就可以使用 CTRL+xCTRL+u

有关详细信息,请参阅 :help i_^x:help 'completefunc':help complete-function