Vim自动完成包括带有supertab的文件名

时间:2014-03-20 14:40:38

标签: vim

在vim中,SuperTab插件是否支持自动填充本地文件名?例如,在C ++程序中,我希望能够键入:

#include "file 标签

如果有一个名为" fileparser.h"的文件。在本地目录中,让SuperTab自动完成到:

#include "fileparser.h

使用我当前的配置,自动完成菜单中的唯一元素是C ++实体,如类名,没有文件名。

1 个答案:

答案 0 :(得分:2)

来自插件的帮助:

    let g:SuperTabDefaultCompletionType = "<c-x><c-u>"

Note: a special value of 'context' is supported which will result in
super tab attempting to use the text preceding the cursor to decide which
type of completion to attempt.  Currently super tab can recognize method
calls or attribute references via '.', '::' or '->', and file path
references containing '/'.

    let g:SuperTabDefaultCompletionType = "context"

    /usr/l<tab>     # will use filename completion

是的,有文件类型完成,但仅当完成基础已包含斜杠时(在您的示例中不是这种情况)。您可以轻松修改插件以接受前面的#include,就像这样(第三行是新的):

function! s:ContextText() " {{{
let exclusions = exists('g:SuperTabContextTextFileTypeExclusions') ?
    \ g:SuperTabContextTextFileTypeExclusions : []

if index(exclusions, &ft) == -1
    let curline = getline('.')
    let cnum = col('.')
    let synname = synIDattr(synID(line('.'), cnum - 1, 1), 'name')
    if curline =~ '.*/\w*\%' . cnum . 'c' ||
    \ curline =~ '#include\s.*\%' . cnum . 'c' ||
    \ ((has('win32') || has('win64')) && curline =~ '.*\\\w*\%' . cnum . 'c')
    return "\<c-x>\<c-f>"

或者,您可以通过<C-x><C-f>触发内置文件类型。