Vim als Ide für mql - Seite 10

 
Dmitry Fedoseev:

Wollte fragen, was ist vim...


was genau es ist, konnte es nicht schließen, flippte aus und löschte es.

Ich habe keine Ahnung, wer sich diesen Bastard ausgedacht hat, und ich will es auch nicht.

 

Nein, das μl ist eine Art Untersprache. Warum mussten sie es mit all diesen Verbesserungen so sehr vermasseln? Ich habe angefangen, mein eigenes Ding zu benutzen, und es stellte sich heraus, dass die Schablonen vor allemschief waren, das macht den Schlauch richtig sauer:

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

Hätten sie es nicht dumm anstellen können wie bei den Profis? Im Allgemeinen bin ich es leid, mit all diesen Chips zu kämpfen und Stream-Editoren zu verwenden, um den Code zu ändern. Vielleicht findet es jemand nützlich - anbei vim.mqh mit allen Deklarationen von µl.

Dateien:
vim.mqh  87 kb
 
Vict:

Nein, das μl ist eine Art Untersprache. Warum mussten sie es mit all diesen Verbesserungen so sehr vermasseln? Ich habe angefangen, mein eigenes Ding zu benutzen, und es hat sich herausgestellt, dass die Schablonen vor allemschief waren, das macht den Schlauch richtig sauer:

Hätten sie es nicht dumm anstellen können wie bei den Profis? Im Allgemeinen bin ich es leid, mit all diesen Chips zu kämpfen und Stream-Editoren zu verwenden, um den Code zu ändern. Vielleicht findet es jemand nützlich - angehängt vim.mqh mit allen µl-Deklarationen.

Vielleicht sollten Sie ein anderes Forum besuchen?
Oder wissen Sie vielleicht einfach nicht, wie Sie Ihre Behauptungen richtig ausdrücken können - ohne Schulkantinen-Epitheta?
 

Leute, ich habe beschlossen, die Sache zu Ende zu bringen. Die wichtigsten Änderungen sind

1. deklarieren Sie die Mitgliedsfunktionen der Vorlagenklassen so, wie sie sein sollen:

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

2. Ich beschloss, keine ernsthaften Änderungen an den std-Dateien vorzunehmen, sondern sie einfach vom Clang-Parser abzuschneiden, wenn ich sie einschalte:

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

wenn Sie von dort Typ-Hinweise wünschen, müssen Sie entsprechende Deklarationen vornehmen (ich brauche sie nicht).


README-Datei:

//--------------------------------------------------------------
// Описание                                                    |
//--------------------------------------------------------------
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'ов в стд),
   иначе правильная работа невозможна.


HH: vim.hh enthält alle Deklarationen außer std, d.h. Auto-Vervollständigung.

#vim_as_mql_ide_4

Dateien:
 
Ich dachte immer, dass C++-Programmierer Menschen mit einem flexiblen und hellen Verstand sind... Das ist aber nicht bei allen so.
 
Dmitry Fedoseev:
Ich dachte immer, dass C++-Programmierer Menschen mit einem flexiblen und hellen Verstand sind... Das ist aber nicht bei allen so.

Können Sie C++? Ja, das überrascht mich.

 
Vict:

Kennen Sie C++? Ja, du hast mich überrascht.

Was macht es für einen Unterschied, in welcher (Sprache) und in welcher IDE zu programmieren, die Hauptsache ist nicht die Umgebung, sondern der Kopf!

Ich habe zum Beispiel in Pascal (Delphi) programmiert, als ich mich mit ME (MT5) vertraut gemacht habe,

In drei Minuten konnte ich programmieren wie in meiner Muttersprache.

Wenn eine Katze nichts zu tun hat, leckt sie sich die Eier...

 
prostotrader:

Was macht es für einen Unterschied, in welcher (Sprache) und in welcher IDE zu programmieren, die Hauptsache ist nicht die Umgebung, sondern der Kopf!

Ich habe zum Beispiel in Pascal (Delphi) programmiert, als ich mich mit ME (MT5) vertraut gemacht habe,

In drei Minuten konnte ich programmieren wie in meiner Muttersprache.

Wenn eine Katze nichts zu tun hat, leckt sie sich die Eier...

Es ist schwer, es Leuten zu erklären, die nicht wissen, wie man vim benutzt. Es ist nicht nur ein Editor und man wird süchtig danach, es wird anatomisch unangenehm, mit der Maus in "Notizblöcken" zu blättern. Ich möchte nur ein handliches Werkzeug, meiner Meinung nach ein normaler Wunsch.

Ehrlich gesagt, wenn ich sehe, dass sich MetaEditor öffnet, sinkt die Lust am Programmieren, was sich negativ auf die Produktivität auswirkt. Warum sollte ich diesen störenden Faktor wollen?
 
Vict:

Es ist schwer, es Leuten zu erklären, die nicht wissen, wie man vim benutzt. Es ist nicht nur ein Editor und man wird süchtig nach ihm, es wird anatomisch unbequem, mit der Maus in "Notizblöcken" zu blättern. Ich möchte nur ein handliches Werkzeug, meiner Meinung nach ein normaler Wunsch.

Ehrlich gesagt, wenn ich sehe, dass sich MetaEditor öffnet, sinkt die Lust am Programmieren, was sich negativ auf die Produktivität auswirkt. Warum sollte ich diesen störenden Faktor wollen?

Sie brauchen nichts zu erklären!

Sie mögen vim, schön, benutzen Sie ihn,

Aber das reicht Ihnen nicht, Sie haben begonnen, anderen Menschen Ihre Ansichten aufzuzwingen.

Es hat keinen Sinn, noch weiter zu gehen.

 
prostotrader:

Sie brauchen nichts zu erklären!

Sie mögen vim, schön, benutzen Sie ihn,

Aber das reicht Ihnen nicht, Sie haben begonnen, anderen Menschen Ihre Ansichten aufzuzwingen.

Es gibt keinen Grund, weiterzumachen.

:) Ich dränge dir nichts auf, du bist in meinen Thread gekommen. Sie wurden nicht gezwungen, hierher zu kommen, ob Sie weitermachen, liegt an mir.