Завершение кода VIM в любом месте строки - PullRequest
10 голосов
/ 08 ноября 2011

По умолчанию завершение кода в поиске VIM с начала слова.Возможно ли сделать это где-нибудь в слове.Например, если у меня есть «MY_DEVICE_CTRL_ADR» и «MY_DEVICE_STAT_ADR» в заголовочном файле C, могу ли я начать печатать CTRL_ и затем VIM завершить его для меня?

1 Ответ

5 голосов
/ 09 ноября 2011

Хорошо, это очень грубо и готово, но, похоже, работает (по крайней мере, в простых случаях).

Прежде всего, здесь есть функция, которая выполняет vimgrep для данного файла. Это должна быть отдельная функция, чтобы ее можно было потом беззвучно вызывать.

function! File_Grep( leader, file )
    try
        exe "vimgrep /" . a:leader . "/j " . a:file
    catch /.*/
        echo "no matches"
    endtry
endfunction

Теперь здесь есть функция пользовательского завершения, которая вызывает File_Grep() и возвращает список подходящих слов. Ключ - это вызов функции add(), которая добавляет совпадение в список, если поисковый термин (a:base) появляется ВСЕГДА в строке. (См. help complete-functions для структуры этой функции.)

function! Fuzzy_Completion( findstart, base )
    if a:findstart
        " find start of completion
        let line = getline('.')
        let start = col('.') - 1
        while start > 0 && line[start - 1] =~ '\w'
            let start -= 1
        endwhile
        return start
    else
        " search for a:base in current file
        let fname = expand("%")
        silent call File_Grep( a:base, fname )
        let matches = []
        for this in getqflist()
            call add(matches, matchstr(this.text,"\\w*" . a:base . "\\w*"))
        endfor
        call setqflist([])
        return matches
    endif
endfunction

Тогда вам просто нужно сказать Vim использовать полную функцию:

set completefunc=Fuzzy_Completion

и вы можете использовать <c-x><x-u>, чтобы вызвать завершение. Конечно, эту функцию можно использовать для поиска любого файла, а не текущего файла (просто измените строку let fname).

Даже если это не тот ответ, который вы искали, надеюсь, он поможет вам в ваших поисках!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...