Vim в качестве ide для mql - страница 10

 
Dmitry Fedoseev:

Хотел спросить что такое вим...


точно так и есть, не смог закрыть, психанул, удалил

кто придумал это убожество понятия не имею и не хочу

 

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

template <typename T>
class Q {
public:
  void fn() {}
};
template <typename T> void Q<T>::fn() {}  // запрещено по плюсовому
template <typename T> void Q::fn() {}

Неужели нельзя было тупо сделать как в плюсах. В общем надоело бороться со всеми этими фишками, приводить код потоковыми редакторами в потребный вид. Может кому пригодится - в прицепе vim.mqh со всеми декларациями мкл.

Файлы:
vim.mqh  87 kb
 
Vict:

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

Неужели нельзя было тупо сделать как в плюсах. В общем надоело бороться со всеми этими фишками, приводить код потоковыми редакторами в потребный вид. Может кому пригодится - в прицепе vim.mqh со всеми декларациями мкл.

Может вам лучше другой форум посещать?
Или просто вы не умеете нормально выражать свои претензии - без эпитетов школьной столовой?
 

Ребят, решил допилить. Основные изменения

1. Объявляем функции-члены шаблонных классов как положено:

template <typename Tr_, typename Cbspec_>
double Trend3_cml<Tr_, Cbspec_>::get_breakprice() {}

2. Решил отказаться от серьёзных правок в стд файлы, тупо отгородить их от clang анализатора при включении:

#ifndef VIM
#include <Object.hh>
#endif

если хочется подсказки по типам оттуда, то нужно делать соответствующие декларации (мне не надо).


README файл:

//--------------------------------------------------------------
// Описание                                                    |
//--------------------------------------------------------------
1. Компиляция (общая схема процесса)
   F7->clang препроцессор->правка исходников потоковыми
   редакторами(во временном файле)->mql препроцессор/компилятор.
   Просмотр ошибок :copen или :clist
2. Правка исходников. Цель - максимально писать в c++ подобном
   стиле (дабы угодить clang анализатору, да и приятней как-то),
   для этого (исходники правятся автоматически при каждой
   компиляции, во временном файле):
   * меняем -> на .
   * добавляется амперсанд при передаче массива в функцию
   * убираем угловые скобки при объявлении функции-члена
     шаблонного класса (во второй строке)
   -------------code begin-----------
   template <typename Tr_, typename Cbspec_>
   double Trend3_cml<Tr_, Cbspec_>::get_breakprice() {}

   void f(Type ar[]) {}

   ptr->call()
   -------------code end-------------
3. Рекомендую использовать расширение hh для заголовочных
   файлов, так будет подсказка при вводе имени файла при
   его включении.
4. Запись мкл специфичных конструкций
   Во время написания кода в виме определён макрос VIM,
   благодаря которому можно прятать от clang анализатора
   ошибочные (с его точки зрения) конструкции:
   -------------code begin-----------
   #ifndef VIM
   input int i;  // input мкл специфичная
   #else
   int i;
   #endif
   -------------code end-------------
   В такое же макроусловие оборачиваем включение файлов
   стандартной библиотеки (там может быть что угодно,
   clang анализатор может споткнуться).
   -------------code begin-----------
   #ifndef VIM
   #include <Object.hh>
   #endif
   -------------code end-------------
5. Передача директив мкл препроцессору. Во время правки
   исходников префикс mqlcpp_ будет удалён.
   -------------code begin-----------
   #ifndef VIM
   mqlcpp_#property strict
   #endif
   -------------code end-------------
6. При первой компиляции в файлы стандартной библиотеки
   добавляются include guard'ы (первая компиляция - нет
   guard'а в Object.mqh). Пользовательские файлы не
   модифицируются, поддиректории MQL/Include с пользовательскими
   данными задаются через compile_mql::user_include_subdir. В свои
   mqh добавлять guard'ы самостоятельно. Также при первой
   компиляции будет изменено расширение файлов стд на hh,
   если compile_mql::subst_std_extension='1'.
7. Подавление предупреждений мкл компилятора. Коды
   предупреждений задаются через compile_mql::waring_black_list
8. Автокомплит, переход к определению, ... реализованы через 
   clangd(lsp сервер)<-->coc(lsp клиент). Основные сочетания
   клавиш
     gd - defenition
     gy - type defenition
     gy - implementation
     gr - reference
     K  - show documentation
     [g - diagnost previous
     ]g - diagnost next
     <leadir>rn - rename    (у меня leadir - ,)
     <space>a - diagnost list
     <space>o - outline list
     <space>s - symbol list
9. Кодировка исходников должна быть utf-8 (mqh из std
   конвертируются автоматически). Для пользовательских файлов
   $ dos2unix file1 file2 ...
//--------------------------------------------------------------
// Установка                                                   |
//--------------------------------------------------------------
1. Зависимости: clang, clangd, dos2unix, nodejs, neovim
2. Cоздаём ссылку без пробелов на Meta Trader/MQL, указываем
   путь к ссылке в compile_mql::mql_link
   (дефолтно mql_link="$HOME/.wine/MQL5")
3. Копируем файлы в соответствующие директории (compile_mql, ..).
   vim.hh кидаем в поддиректорию Include (у меня это
   Include/myincl) (он должен быть включён в каждый 
   скрипт/эксперт).
4. В виме выполнить :PlugInstall
5. В MQL/Include создаём compile_flags.txt с содержимым (вместо
   YOUR_HOME_DIR вписать свою домашнюю директорию, ${HOME} не
   работает):
     -xc++-header
     -IYOUR_HOME_DIR/.wine/MQL5/Include
     -DVIM
6. В директории со скриптами/экспертами создаём
   compile_flags.txt с содержимым:
     -xc++
     -IYOUR_HOME_DIR/.wine/MQL5/Include
     -DVIM
7. Правим compile_mql::user_include_subdir (дефолтно ''),
   делаем компиляцию чего-нибудь (для вставки guard'ов в стд),
   иначе правильная работа невозможна.


ЗЫ: vim.hh содержит все мкл декларации кроме стд, т.е. автодополнение полноценное.

#vim_as_mql_ide_4

Файлы:
 
Когда-то думал, что с++ программисты, это люди с гибким и светлым разумом... Оказывается не все.
 
Dmitry Fedoseev:
Когда-то думал, что с++ программисты, это люди с гибким и светлым разумом... Оказывается не все.

Ты умеешь с++? Да, удивил.

 
Vict:

Ты умеешь с++? Да, удивил.

Какая разница на чем программировать (язык) и в каком IDE, главное не среда. а голова!

Я, например, программирую на Паскале (Делфи), когда в первый раз познакомился с МЕ (МТ5),

через три минуты уже программировал как на родном.

Когда коту делать нечего, он яйца лижет...

 
prostotrader:

Какая разница на чем программировать (язык) и в каком IDE, главное не среда. а голова!

Я, например, программирую на Паскале (Делфи), когда в первый раз познакомился с МЕ (МТ5),

через три минуты уже программировал как на родном.

Когда коту делать нечего, он яйца лижет...

Сложно объяснить людям, которые vim не умеют. Это не просто редактор и к нему прирастаешь, юлозить мышью в "блокнотах" становится анатомически некомфортно. Мне просто нужен удобный инструмент, по-моему, нормальное желание.

Честно, когда вижу открывающийся МетаЭдитор, то желание кодить убавляется, что отрицательно сказывается на продуктивности, зачем мне этот раздражающий фактор?
 
Vict:

Сложно объяснить людям, которые vim не умеют. Это не просто редактор и к нему прирастаешь, юлозить мышью в "блокнотах" становится анатомически некомфортно. Мне просто нужен удобный инструмент, по-моему, нормальное желание.

Честно, когда вижу открывающийся МетаЭдитор, то желание кодить убавляется, что отрицательно сказывается на продуктивности, зачем мне этот раздражающий фактор?

Не нужно ничего объяснять!

Вам нравится vim, - отлично, пользуйтесь,

но Вам этого мало, Вы начали навязывать свои взгляды другим людям. 

Не стоит продолжать далее.

 
prostotrader:

Не нужно ничего объяснять!

Вам нравится vim, - отлично, пользуйтесь,

но Вам этого мало, Вы начали навязывать свои взгляды другим людям. 

Не стоит продолжать далее.

:) я вам ниего не навязываю, это вы пришли в мою тему. Вас сюда насильно не гнали, продолжать ли - решу сам.

Причина обращения: