//--------------------------------------------------------------
// Описание |
//--------------------------------------------------------------
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...
正是它,无法关闭它,吓坏了,删除了它。
我不知道谁想出了这个混蛋,我也不想知道。
不,μl是某种底层语言。为什么他们要用这种改进方式把它搞得如此糟糕?我开始用自己的东西,结果发现模板特别歪,真是把水管气坏了。
难道他们就不能像职业选手那样愚蠢地做吗?总的来说,我已经厌倦了在所有这些芯片中挣扎,并使用流编辑器来修改代码。也许有人会觉得有用 - 附上vim.mqh,其中有µl的所有声明。
不,μl是某种底层语言。为什么他们要把它搞得如此糟糕,进行所有这些类型的改进?我开始用自己的东西,结果发现模板特别歪,真是把水管气坏了。
难道他们就不能像职业选手那样愚蠢地做吗?总的来说,我已经厌倦了在所有这些芯片中挣扎,并使用流编辑器来修改代码。也许有人会觉得有用 - 附上vim.mqh和所有µl声明。
伙计们,我决定把它完成。主要的变化是
1.声明模板类的成员函数,因为它们应该是。
2.我决定不对std文件做任何严肃的编辑,只是在打开它们的时候把它们从clang解析器中切断。
如果你想从那里得到类型提示,你必须做相应的声明(我不需要)。
README文件。
HH:vim.hh包含除std之外的所有声明,即自动完成。
#vim_as_mql_ide_4
我曾经认为,C++程序员是具有灵活和聪明头脑的人...事实证明,并非所有人都是如此。
你会做C++吗?是的,让我吃惊。
你知道C++吗?是的,你让我吃惊。
在什么(语言)和什么IDE中编程有什么区别,主要的不是环境,而是头脑!"。
例如,当我第一次接触到ME(MT5)时,我是用Pascal(Delphi)编程的。
在三分钟内,我就像用我的母语编程了。
当一只猫无事可做时,它就会舔自己的蛋蛋......
在什么(语言)和什么IDE中编程有什么区别,主要的不是环境,而是头脑!"。
例如,当我第一次接触到ME(MT5)时,我是用Pascal(Delphi)编程的。
在三分钟内,我就像用我的母语编程了。
当一只猫无事可做时,它就会舔自己的蛋蛋......
这很难向那些不知道如何使用vim的人解释。这不仅仅是一个编辑器,你会沉迷于它,在'记事本'中用鼠标略过,会变得解剖学上的不舒服。我只是想要一个方便的工具,在我看来,一个正常的愿望。
说实话,当我看到MetaEditor打开时,编码的欲望就会减少,这对工作效率产生了负面影响,我为什么要有这种恼人的因素?这很难向那些不知道如何使用vim的人解释。这不仅仅是一个编辑器,你会沉迷于它,在 "记事本 "中用鼠标略过,会变得解剖学上不舒服。我只是想要一个方便的工具,在我看来,一个正常的愿望。
说实话,当我看到MetaEditor打开时,编码的欲望就会减少,这对工作效率产生了负面影响,我为什么要有这种恼人的因素?你不需要解释什么!
你喜欢vim,好,就用它。
但这对你来说还不够,你已经开始把 你的观点强加 给其他人。
再往前走就没有意义了。
你不需要解释什么!
你喜欢vim,好,就用它。
但这对你来说还不够,你已经开始把 你的观点强加 给其他人。
没有必要再继续下去了。
:) 我没有强加给你任何东西,你来到了我的主题。你不是被迫来这里的,是否继续下去由我决定。