LINUX.ORG.RU

настройка vim для работы с ядром.

 ,


1

3

Тут понадобилось разгрести тонны китайско-индусского кода для старых ядер на предмет портирования на новые, поэтому возникла надобность в плюшках, которыми раньше не пользовался. Использовал и использую vim в качестве текстового редактора, на Debian testing.

Нужен энфорсинг кодинг-стайла ядра, чтобы явно показвалось где натыкали пробелов, C++ комментарии, нет пробелов посде for/while и прочее. Также нужен автокомплит с прототипом а-ля эклипс для функций и макросов, список мест, где функция вызывается, call tree (по возможности).

Про cscope и ctags знаю (возможно не все).

Было бы интересно узнать что как кто себе сетапит.

Сейчас у меня все по простому, тут даже cscope включать не стал, обходился, но в чужом большом коде без понятия о стиле и адекватности уже утонул... нужно вспоможение...

★★★★★
Ответ на: комментарий от anonymous

А в эклипсе кодинг-стайл энфорсить как? Там довольно жесткие требования. Да и есть там некая тяга к C++ и C++-комментариям... Ну и на моей рабочей машинке с 2GB RAM с эклипсом не очень развернешься.

slapin ★★★★★
() автор топика
Ответ на: комментарий от slapin

Preferences -> C/C++ -> Code Style. Я когда-то эклипсом пользовался на 256м, правда на совсем маленьком проекте, но все относительно нормально работало. Я не знаю, как на уровне коде работает конфигурация ядро, но можно попробовать в make menuconfig поотключать все ненужные фичи и драйвера, авось эклипс не будет их индексировать.

anonymous
()

Нужен энфорсинг кодинг-стайла ядра

заюзай indent вместо ручной правки.

автокомплит с прототипом

clangcomplete на ура работает.

в остальном таки да, ctags и cscope.

anonymous
()
Ответ на: комментарий от anonymous

indent таки не всегда адекватен :( Хотя надо бы явно выделять отклонения в тексте, потому как нужно копипастить. Плюс индент имеет свойство нечитаемый китайский код делать еще более нечитаемым (if'ы за 182-й колонкой выстраивать столбиком, например). самое главное для меня сейчас это использование функций и call tree, потому как там тонны кода, который вообще нигде не используется, и надо его весь выпилить. Плюс надо искать изменения в API, то есть все вызовы данной функции, в отдельном буфере с навигацией.

slapin ★★★★★
() автор топика
Ответ на: комментарий от slapin

самое главное для меня сейчас это использование функций и call tree, потому как там тонны кода, который вообще нигде не используется, и надо его весь выпилить. Плюс надо искать изменения в API, то есть все вызовы данной функции, в отдельном буфере с навигацией.

Find-grep же, что еще могут предложить текстовые редакторы вроде vim/emacs, которые не умеют строить адекватную модель кода?

kamre ★★★
()
Ответ на: комментарий от anonymous

Нихера не очевидно. Конфиг раскрывается в #defineы, и заблокированный по #ifndef код вполне может не обрабатываться.

anonymous
()
Ответ на: комментарий от kamre

А что подразумевается под адекватной моделью кода? Я сильно боюсь, что даже эклипс сломает зубы об ядро в таком плане.

Я просто собственными глазами видел данные фичи в vim у знакомого несколько лет назад. Сейчас спросить некого, и google не помогает. Я уверен что все есть, помогите подобрать нужные плагины пожалуйста!

slapin ★★★★★
() автор топика
Ответ на: комментарий от slapin

А что подразумевается под адекватной моделью кода?

Когда код аккуратно разбирается парсером, учитывается сематника языка и вся информация о связях между разными частями кода присутствует в модели кода.

Я сильно боюсь, что даже эклипс сломает зубы об ядро в таком плане.

Конкретно C-шный код (в отличии от плюсового) CDT разбирает хорошо. Но препроцессор может быть проблемой, а именно ветки под #if/#ifdef. Парсер не активные ветки пропускает, и CDT потом вызов функции в такой ветке не покажет. Еще, конечно, отжор памяти на больших проектах может быть проблемой. Но попробовать стоит.

Я просто собственными глазами видел данные фичи в vim у знакомого несколько лет назад.

По vim ничего не скажу. А для emacs есть xrefactory, который для чистых C вроде даже opensource.

kamre ★★★
()
Ответ на: комментарий от slapin

if'ы за 182-й колонкой выстраивать столбиком, например

там в CodingStyle написано, что за строки длиннее 80 символов надо убивать. И таки да, за строки длиннее 80 символов надо убивать.

anonymous
()
Ответ на: комментарий от anonymous

Ну, то, что он их выстраивает столбиком, никак не спасает, приходится править оригинал. Я не говорю, что indent плох, я говорю, что он не всегда подходит.

slapin ★★★★★
() автор топика
Ответ на: комментарий от ttnl

А поясни, что тут относится к теме? set wildmenu - режим комплишна в коммандлайне с выводом всех вариантов set laststatus=2 - все окна содержат стстуслайн set statusline=%<%f\ [%Y%R%W]%1*%{(&modified)?'\ [+]\ ':"}%*%=%c%V,%l\ %P\ [%n]

это сам статуслайн. Что оно отрисовывает? Попробовать смогу только часа через 2

slapin ★★★★★
() автор топика
Ответ на: комментарий от kamre

как же ты надоедлив. суешься в каждый тред про вим и емакс и несешь чушь про адекватную модель кода.

anonymous
()
Ответ на: комментарий от anonymous

как же ты надоедлив

стараюсь!

суешься в каждый тред про вим и емакс

все сомневаюсь, может я чего не осилил, и в них все-таки можно добавить корректную навигацию по исходникам, но в каждой теме какие-то не рабочие костыли предлагают

несешь чушь про адекватную модель кода

обосновать про чушь сможешь? как должна работать корректная навигация по коду?

kamre ★★★
()
Ответ на: комментарий от kamre

я тут как бы имел в виду, что ты крадешь тему у топикстартера. если нравится эклипс - флаг тебе в руки, а эту и другие темы не засоряй. если есть чем помочь топикстартеру - говори по делу, а если нет - то пройди мимо, никого не интересуют твои умственные изыскания.

anonymous
()
Ответ на: комментарий от slapin

А поясни, что тут относится к теме?

Мне таких настроек для нужд описанных тобой в теме полностью хватает.

ttnl ★★★★★
()

Плагин clang_complete и внешняя тулза astyle для переформатирования сорцов.

andreyu ★★★★★
()
Ответ на: комментарий от kamre

Когда код аккуратно разбирается парсером, учитывается сематника языка и вся информация о связях между разными частями кода присутствует в модели кода.

Лучше, чем компилятор этого никто не сделает. Посему clang_complete более чем адекватное решение.

andreyu ★★★★★
()
Ответ на: комментарий от kamre

А где там навигация по исходникам в vim?

Навигация по ctags.

andreyu ★★★★★
()
30 мая 2012 г.
Ответ на: комментарий от anonymous

У меня в генте clang когда-то давно вроде работал нормально, в федоре отвалился напрочь, не работает. Как настраивал?

e7z0x1 ★★★★★
()
Ответ на: комментарий от e7z0x1

В ~/.clang_complete прописаны пути к нужным хидерам.

-I/usr/include/hgex                                                                       
-I/usr/lib64/gcc/x86_64-pc-linux-gnu/4.5.3/include
-I/usr/include

В ~/.vimrc

" -----------------------------------------------------------------------------
" Clang_complete related options
" -----------------------------------------------------------------------------
let g:clang_complete_auto = 0 " Disable auto popup, use <Tab> to autocomplete
let g:clang_complete_copen = 1 " Show clang errors in the quickfix window
" This gives access to many more clang features. Furthermore it automatically
" caches all includes in memory. Updates after changes in the same file
" will therefore be a lot faster.
let g:clang_use_library = 1 
let g:clang_library_path = '/usr/lib64/llvm'
" do some snippets magic after a ( or a , inside function call.
let g:clang_snippets = 1 
" -----------------------------------------------------------------------------

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

А, тогда видимо не в нем дело. Не помнишь плагина, который бы в дополнительном буфере выдавал прототип функции и ещё что-то там такое.

e7z0x1 ★★★★★
()
Ответ на: комментарий от e7z0x1

Не помнишь плагина, который бы в дополнительном буфере выдавал прототип функции и ещё что-то там такое.

Может это protodef.vim? У меня он установлен, но я им не пользуюсь. Привык к a.vim

andreyu ★★★★★
()

Нужен энфорсинг кодинг-стайла ядра

Для начала astyle/indent, а потом checkstyle.pl'ем и ручками, ручками.

LamerOk ★★★★★
()
Ответ на: комментарий от andreyu

Мне кажется это не то(судя по видео). Там отличие было в том что пишешь printf например когда скобку ставишь, то автоматом показывает прототип.

e7z0x1 ★★★★★
()
Ответ на: комментарий от e7z0x1

Там отличие было в том что пишешь printf например когда скобку ставишь, то автоматом показывает прототип.

У меня, если я не ошибаюсь, занимается этим snipmate. Но на 100% не уверен, возможно это делает опция let g:clang_snippets = 1 в clang_complete.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Не-не-не, это делает например clang, он показывает в тексте. А я к тому что прототип показывается в отдельном буфере. Кстати у меня автосрабатывание работает только с отключенным paste-режимом почему-то. Вообще жалко что не может дополнять автоматом что угодно, без точек и стрелок, только код, наверно править. Хотя на длинных проектах скорее всего будет тормозить(хотя они вроде говорят что все кешируется)

e7z0x1 ★★★★★
()
Ответ на: комментарий от e7z0x1

Всё-то вам на ложечку положи, да в рот засунь.

autocomplpop.vim

LamerOk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.