LINUX.ORG.RU

[vim][Дополнение методов по . и ->] C_lang

 


0

2

Хочется, чтоб появлялось окно подсказки с доступными методами класса. myobject.«Вот тут должно появиться окно»,в общем как в студии или QtCreator. Скачал clang complete отсюда http://www.vim.org/scripts/script.php?script_id=3302. Положил вроде куда нужно:

$ ls /home/trenkinan/.vim/plugins/clang_complete/

clang_complete.vim

$ cat ~/.vimrc

syn on set expandtab set shiftwidth=2 set ts=4 set ai let g:clang_complete_auto=0 let g:clang_complete_copen= 1

Но все равно не работает, куда копать?



Последнее исправление: trenkinan (всего исправлений: 3)
Ответ на: комментарий от UVV

А разве не должны появляться еще и аргументы в подсказке? Да и вроде как без ctrl+P должно быть...

trenkinan
() автор топика

> g:clang_complete_auto=0

Выставить в 1. Ну и про сам clang не забываем.

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

> Ctrl + p

Это дополнение слова, которое просто ищет подходящие варианты по открытым файлам и ничего не знает про синтаксис языков программирования.

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

> В сторону KDevelop. Ваш К.О.

Я извиняюсь, но ты дебил, а не наш К.О. Вопрос про vim и если тебе нечего сказать помолчи.

anonymous
()

> Но все равно не работает, куда копать?

В сторону документации и путей к хидерам в ~/.clang_complete
Ну и сам clang должен быть установлен.

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

~/.clang_complete отсутствует, хотелось бы для компиляции в дальнейшем использовать gcc. Хотя сейчас по make vim говорит что не видит makefile(даже если таковой имеется)

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

Еще раз повторю, прочтите документацию.

Пропишите пути к необходимым хидерам.

Использовать для сборки своего проекта можете любой компилятор, но для работы плагина нужен clang.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu
$clang -x c++-header work/test_project/
main.cpp      person.cpp    person.h      person.h.gch  tags
$clang -x c++-header work/test_project/person.h

Проглатывает но толку пока никакого...

trenkinan
() автор топика

head .vimrc :

" Use Vim settings, rather then Vi settings (much better!).
" This must be first, because it changes other options as a side effect.
set nocompatible

" clang 
let g:clang_snippets=1
let g:clang_complete_copen=1
let g:clang_hl_errors=1
let g:clang_conceal_snippets=0

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

в .vimrc у меня это есть...

let g:clang_snippets=1
let g:clang_complete_copen=1
let g:clang_hl_errors=1
let g:clang_conceal_snippets=0

Щито?

При чем тут это? Вопрос исключительно про дополнение.

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

> Проглатывает но толку пока никакого...

Вы умеете читать? Что прописано в файле ~/.clang_complete ?
Что пишет плагин в окно quickfix?

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

> выставил clang_complete_auto=1

Рекомендую этот параметр выставить в «0» - на больших проектах с кучей инклудов в хидерах могут быть нежелательные тормоза.
Лучше просить дополнить по стандартному хоткею (crl + x, ctrl + o) или по tab если установлен плагин supertab, или сделан соответствующий мэпинг.

Плагин omnicppcomplete нужно отключить или убрать вовсе.

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

.vimrc у меня это есть...

А я тебе не про это говорю. Это:

set nocompatible

У тебя есть?

При чем тут это?

Вот при чем:


tabstop' 'ts'          number  (default 8)
                        local to buffer
        Number of spaces that a <Tab> in the file counts for.  Also see
        :retab command, and 'softtabstop' option.

        Note: Setting 'tabstop' to any other value than 8 can make your file
        appear wrong in many places (e.g., when printing it).

        There are four main ways to use tabs in Vim:
        1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
           (or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
           will use a mix of tabs and spaces, but typing <Tab> and <BS> will
           behave like a tab appears every 4 (or 3) characters.
        2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
           'expandtab'.  This way you will always insert spaces.  The
           formatting will never be messed up when 'tabstop' is changed.
        3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
           modeline to set these values when editing the file again.  Only
           works when using Vim to edit the file.
        4. Always set 'tabstop' and 'shiftwidth' to the same value, and
           'noexpandtab'.  This should then work (for initial indents only)
           for any tabstop setting that people use.  It might be nice to have
           tabs after the first non-blank inserted as spaces if you do this
           though.  Otherwise aligned comments will be wrong when 'tabstop' is
           changed.

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

set nocompatible выставлен,
~/.clang_complete у меня отсутствует.
насчет tabstop все равно не понял к чему, может что то упустил, не спец в английском, я не использую два других дополнения от riprip, только clang_complete. Как замена табы - > пробелы может повлиять на подсказки

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

Положил вроде куда нужно:

$ ls /home/trenkinan/.vim/plugins/clang_complete/

clang_complete.vim

Нет, не туда ты положил. Все *.vim должны быть прямо в ~/.vim/plugins/ без поддиректорий. Vim просто не видит этого плагина.

насчет tabstop все равно не понял

По нормальному ts должен быть равен sw. И лучше делать их равным 8 или хотя бы 4.

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

Мой .vimrc

syn on
set expandtab
set shiftwidth=4
set ts=4
set ai 
let g:clang_snippets=1
let g:clang_complete_copen=1
let g:clang_hl_errors=1
let g:clang_conceal_snippets=0
colorscheme pablo
set nocompatible
ls /home/trenkinan/.vim/plugins/
clang_complete.vim
Толку опять никакого

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

~/.clang_complete у меня отсутствует.

Создай и пропиши пути к хидерам(-I/path/to/hpp/files/).

PS в gentoo есть USE=«system-cxx-headers»

tn1
()
Ответ на: комментарий от trenkinan
set nocompatible

Первой строкой.

В консоли:

 $ which clang
/usr/bin/clang

Файл:

#include <stdio.h>

template< template<class> class InternalTemplate, typename Type > class Test
{
    public:

        InternalTemplate<Type> m_Member;
};

template< class T > class TestInt
{
    public:

        T m_IntMember;
};

class Class
{
    public:

        void Print() { printf("Class::Print\n"); }
};

int main( int, char** )
{
    Test<TestInt,Class> Object;
    Object.m_Member.m_IntMember
    return 0;
}

Точка после «Object.m_Member.m_IntMember» должна давать: http://saveimg.ru/show-image.php?id=13f05d0c9d33d3ccf7af8fa5fcc42a1e

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

which clang выдает тоже, что и у вас. set nocompatible поставил первой строкой, сделал

touch ~/.clang_complete
clang -x c++-header work/test_project/person.h
вот мой «проект»: main.cpp:
#include <iostream>
#include "person.h"

using namespace std;

int main()
{
    cout<<"Hello!\n";
    person my;
    my.SetAge(25);
   
   //Если здесь ставить my. то ничего не появится
    
    return 0;
}

person.h:

class person
{
private:
    int age,height,salary;
    char FirstName[10],SecondName[10];
public:
    bool SetAge(int years);
    bool SetHeight(int cm);
    bool SetSalary(int dollars);
    bool SetFirstName(char FirstName[10]);
    bool SetSecondName(char *p);
    int  GetAge(){return person::age;}
    int  GetHeight(){return person::height;}
    int  GetSalary(){return person::salary;}

};

bool person::SetAge(int years)
{
    if(years >= 18 && years <= 100)
    {
        person::age = years;
        return 0;
    }
    else
    {
        return 0; // Bad value of age
    }
}
bool person::SetFirstName(char FirstName[10])
{
    int i = 0;
    while(i <= 10)
    {   
        person::FirstName[i] = FirstName[i];
        i++;
    }
    return 0;
}

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

> clang -x c++-header work/test_project/person.h

Что это?

вот мой «проект»


Зачем он мне? Ты проверил на работу, на том файле, что я выложил?

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

что это?

На сколько я понял таким образом указывается хедер. Проверил ваш файл, никаких подсказок не появляется Если использовать ctrl+p то теперь слега задумывается

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

Пистон стоит?

таким образом указывается хедер.

Не правильно понял. В .clang_complete прописываются опции коммандной строки компилятора. Для указания пути к заголовочным файлам надо указывать -I/path/to/headers.

Проверил ваш файл, никаких подсказок не появляется

Ок, давай простой случай.

$ cat clang_complete.cpp 

class AAA
{
public:
   int aaa;
   int bbb;
};


int myfunction()
{
  AAA a;
  a.
  return 0;
}


$ clang -w -fsyntax-only -Xclang -code-completion-at=clang_complete.cpp:13:5 clang_complete.cpp 
COMPLETION: AAA : AAA::
COMPLETION: aaa : [#int#]aaa
COMPLETION: bbb : [#int#]bbb
COMPLETION: operator= : [#AAA &#]operator=(<#AAA const &#>)
COMPLETION: ~AAA : [#void#]~AAA()

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk
~/work $ clang -w -fsyntax-only -Xclang -code-completion-at=clang_complete.cpp:13:5 clang_complete.cpp
clang_complete.cpp:13:3: error: no member named 're' in 'class AAA'
re
^
clang_complete.cpp:13:5: error: expected '}'
re
^
2 diagnostics generated.

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

~/work $ clang -w -fsyntax-only -Xclang -code-completion-at=clang_complete.cpp:13:5 clang_complete.cpp 
COMPLETION: a : [#class AAA#]a
COMPLETION: AAA : AAA
COMPLETION: bool
COMPLETION: char
COMPLETION: class
COMPLETION: const
COMPLETION: Pattern : const_cast<<#type-id#>>(<#expression#>)
COMPLETION: Pattern : delete <#expression#>
COMPLETION: Pattern : delete[] <#expression#>
COMPLETION: Pattern : do{<#statements#>
}while(<#expression#>);
COMPLETION: double
COMPLETION: Pattern : dynamic_cast<<#type-id#>>(<#expression#>)
COMPLETION: enum
COMPLETION: extern
COMPLETION: false
COMPLETION: float
COMPLETION: Pattern : for(<#init-statement#>;<#condition#>;<#inc-expression#>){<#statements#>
}
COMPLETION: Pattern : goto <#identifier#>;
COMPLETION: Pattern : if(<#condition#>){<#statements#>
}
COMPLETION: int
COMPLETION: long
COMPLETION: myfunction : [#int#]myfunction()
COMPLETION: Pattern : new <#type-id#>(<#expressions#>)
COMPLETION: Pattern : new <#type-id#>[<#size#>](<#expressions#>)
COMPLETION: operator
COMPLETION: Pattern : reinterpret_cast<<#type-id#>>(<#expression#>)
COMPLETION: Pattern : return <#expression#>;
COMPLETION: short
COMPLETION: signed
COMPLETION: Pattern : sizeof(<#expression-or-type#>)
COMPLETION: static
COMPLETION: Pattern : static_cast<<#type-id#>>(<#expression#>)
COMPLETION: struct
COMPLETION: Pattern : switch(<#condition#>){
}
COMPLETION: Pattern : throw <#expression#>
COMPLETION: true
COMPLETION: Pattern : try{<#statements#>
}catch(<#declaration#>){<#statements#>
}
COMPLETION: typedef
COMPLETION: Pattern : typeid(<#expression-or-type#>)
COMPLETION: Pattern : typename <#qualified-id#>
COMPLETION: Pattern : typeof(<#expression-or-type#>)
COMPLETION: union
COMPLETION: unsigned
COMPLETION: Pattern : using namespace <#identifier#>;
COMPLETION: void
COMPLETION: volatile
COMPLETION: wchar_t
COMPLETION: Pattern : while(<#condition#>){<#statements#>
}

Никаких результатов

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

vimrc:

set nocompatible
syn on
set expandtab
set shiftwidth=4
set ts=4
set ai
"let g:clang_complete_auto=1
"let g:clang_complete_copen= 1
" clang 
let g:clang_snippets=1
let g:clang_complete_copen=1
let g:clang_hl_errors=1
let g:clang_conceal_snippets=0
colorscheme pablo


~ $ ls -R .vim
.vim:
plugins

.vim/plugins:
clang_complete.vim

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

Хм. Скорее всего на сайте не рабочая версия. В смысле, там только часть нужных файлов. Возьми с git'a полную версию: https://github.com/Rip-Rip/clang_complete

скопируй директории с файлами как есть в .vim

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

Не, исключено. Если файл в plugins есть - плагин есть. Если файла нет, то и плагина нет.

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