]> Sergey Matveev's repositories - stargrave-blog.git/commit
Помощник в вставке import-ов в Python коде
authorSergey Matveev <stargrave@stargrave.org>
Fri, 12 Aug 2016 20:13:03 +0000 (23:13 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Fri, 12 Aug 2016 20:13:03 +0000 (23:13 +0300)
commite64b581865b0f78c78824285fa5e752b989d85dc
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parentc1aeca58417273bea23ad2f3bb106c431107e7bf
Помощник в вставке import-ов в Python коде

Написал небольшого помощника для вставки import-ов в Python коде.
Например из pyasn1 библиотеки приходится часто импортировать
encode/decode функции, ObjectIdentifier объекты. Запоминать, тем более
набирать, длинные "from pyasn1.codec.der.encoder import encode  # type:
ignore" не хочется в принципе. Часто делается grep/git grep с поиском
используемого import и его copy-paste в код. Теперь можно просто набрать
encode, нажать <F3> и в виде меню completion он покажет все найденные
"from .* encode" строчки.

    function! ImportCompl()
        normal diw
        let output = system('git grep "from .* ' . @" . '" -- "**/*.py" | perl -e "while(<>){s/^.*:\d+://; \$a{\$_}++}; print reverse sort keys %a"')
        call complete(col('.'), split(output, "\n"))
        return ''
    endfunction
    autocmd FileType python inoremap <F3> <C-R>=ImportCompl()<CR>

Выбор git grep вместо grep из-за скорости работы (не хочется чтобы было
100мс или больше времени ожидания результата поиска). Выхлоп git grep
можно обработать и внутри vimscript, но это сильно больше кода, хотя и
экономия целого процесса. Perl вместо sed+uniq+sort+whatever из-за
скорости и экономии процессов.