KrasniyRus 26.03.2011 14:57
Есть вопрос! — Vi omni completion
Давненько хочется слезть с больших IDE, на любимый Vi, но мешает то, что я никак не могу понять как работает автокомплит.Доки курил, но ясности это как-то не добавило, а вопросы такие:
1. Можно ли сделать чтобы user defined классы в проекте (скажем через плагин project) подхватывались "на лету"?
2. Что такое omni completion и с чем его есть для Python? (доки курил, но плохо раскуриваются)
Принимаются ссылки на годные маны (разжевали для новичка и положили в мозг) или рабочие конфиги vi (не сильно навороченные), с использования которых можно начать, ну или может кто возьмет на себя титанический труд по объяснению на пальцах
P.S.: В гугле не забанили, просто все что нахожу это для тех кто вкурил и уже пользуется, а вот информации о том как пользоваться начать, я так нигде и не смог найти.
Заранее всем спасибо!
Denis 26.03.2011 15:39 #
+ 1 -
Аналогичная проблема. В интернете куча материала, но ничего адекватного для себя не нашел. Особенно интересует подхват классов/функций/методов из подключаемых файлов.
Ой огроменное человеческое тебе спасибо! Именно такой тулзы долгое время и хватало!
ropevim как уже писали.
Как работает посмотри в моем конфиге. https://github.com/klen/.vim
Можешь просто взять bundle https://github.com/klen/.vim/tree/master/bundle/ropevim
и подключить его к себе, тогда ничего дополнительно ставить не прийдется, правда все никак не соберусь оформить это в качестве отдельного плагина.
Как работает посмотри в моем конфиге. https://github.com/klen/.vim
Можешь просто взять bundle https://github.com/klen/.vim/tree/master/bundle/ropevim
и подключить его к себе, тогда ничего дополнительно ставить не прийдется, правда все никак не соберусь оформить это в качестве отдельного плагина.
Спасибо!
Я так понимаю с omni completion никто толком не заморачивался?
Т.к. из офф. доков интересен тот момент что оно вроде как для всех языков пригодно. Т.к. на python я в основном скриптики для себя пишу, а хотелось бы заменить netbeans/exclipse в идеале =)
Я так понимаю с omni completion никто толком не заморачивался?
Т.к. из офф. доков интересен тот момент что оно вроде как для всех языков пригодно. Т.к. на python я в основном скриптики для себя пишу, а хотелось бы заменить netbeans/exclipse в идеале =)
Ну, я бы выделил несколько ключевых моментов.
-
подхватывались "на лету"Могу сказать только о C/C++, на питоне почти не пишу. Подхватывать на лету без чудес костылестроения не получится, но можно сделать, чтобы всё подхватывалось при сохранении и/или по хоткею (через ctags, которые, кстати, умеют в python):
function! UPDATE_TAGS()
let _f_ = expand("%:p")
let _cmd_ = '"ctags -a --c++-kinds=+pl --fields=+iaS --extra=+q " '
let _resp = system(_cmd_)
unlet _cmd_
unlet _f_
unlet _resp
endfunction
autocmd BufWritePost *.cpp,*.hpp,*.c,*.h,*.cxx,*.hxx call UPDATE_TAGS()
" обновить ctags
map <C-u> :!ctags -R --c++-kinds=+pl --fields=+iaS --extra=+q .<CR>
- Omni completion я юзал опять-таки только для C/C++ - оно при нажатии на точку, -> или :: вываливает менюшку с возможными вариантами.
- Ещё есть няшка SuperTab, работающая примерно аналогично клавише Tab в шеллах - дополняет всё, что можно. Настраивается так:
set wildmenu " дикое меню :3"
set completeopt=menu,menuone,longest,preview " всплывающая менюшка"
set complete=.,t,b,k " порядок автодополнения: словарь текущего буфера, ctags, словарь всех буферов
Спасибо за ответ
1. На чудо я и не надеялся, главное наличие такой возможности =)
2. А можно строки из конфига как его включали ставили ли до плагины?
1. На чудо я и не надеялся, главное наличие такой возможности =)
2. А можно строки из конфига как его включали ставили ли до плагины?
до плагины
Всмысле, дополнительные? Не, не ставил.
А можно строки из конфига как его включали
" OmniCppComplete {
set tags+=~/.vim/tags/qt4
set tags+=~/.vim/tags/libstdc++ " эти файлики сгенерил ручками из хедеров qt и исходников libstdc++ соответственно"
let OmniCpp_NamespaceSearch = 2
let OmniCpp_ShowPrototypeInAbbr = 1 " показывать параметры"
let OmniCpp_ShowScopeInAbbr = 1
let OmniCpp_MayCompleteDot = 1 " автодоплнять после ."
let OmniCpp_MayCompleteArrow = 1 " автодоплнять после ->"
let OmniCpp_MayCompleteScope = 2 " автодоплнять после ::"
let OmniCpp_DefaultNamespaces = <"std", "_GLIBCXX_STD">
let OmniCpp_LocalSearchDecl = 1
" автоматически открывать и закрывать окошко предпросмотра"
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
" }