//--------------------------------------------------------------
// Описание |
//--------------------------------------------------------------
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はある種の下ネタ言語だ。なぜ、このような改良でここまで台無しにしなければならなかったのでしょうか?自分のものを使い始めたら、特にテンプレートが曲がって いたことが判明し、本当にホースを怒らせることになりました。
プロみたいにバカスカやるのはダメだったのかな。一般的に、私はこれらのチップと格闘し、ストリームエディターを使ってコードを修正することに疲れています。もしかしたら、誰かが役に立つかもしれないので、µlのすべての宣言を含むvim.mqhを添付します。
いや、μlはある種の下ネタ言語だ。なぜ、このような改良を加えて、ここまで台無しにしなければならなかったのでしょうか?自分のものを使い始めたら、特にテンプレートが曲がって 作られていることが判明し、本当にホースを怒らせてしまったんです。
プロみたいにバカスカやるのはダメだったのかな。一般的に、私はこれらのチップと格闘し、ストリームエディターを使ってコードを修正することに疲れています。もしかしたら誰かが役に立つかもしれないので、すべてのµl宣言を含むvim.mqhを添付します。
みんな、仕上げをすることにしたんだ。主な変更点は以下の通りです。
1.テンプレートクラスのメンバ関数をあるべき姿に宣言する。
2.私は、stdファイルを本格的に編集することはせず、clangパーサーをオンにするときに切り離すだけにしました。
もし、そこから型ヒントを得たいのであれば、対応する宣言をしなければならない(私は必要ない)。
READMEファイルです。
HH: vim.hh は std 以外の宣言、つまりオートコンプリートを含んでいます。
#vim_as_mql_ide_4
C++のプログラマーは、柔軟で明るい頭脳を持った人たちだと思っていたのですが...。誰もがそうではないことがわかりました。
C++はできるのか?ええ、驚かせてください。
C++をご存じですか?ええ、驚きましたよ。
何(言語)で、どのIDEでプログラミングするかに違いはない、大事なのは環境ではなく、頭だ!」と。
例えば私は、ME(MT5)に初めて触れたとき、Pascal(Delphi)でプログラミングをしていました。
3分で母国語のようにプログラミングができるようになりました。
猫はやることがないと、タマを舐める...。
何(言語)で、どのIDEでプログラミングするかに違いはない、大事なのは環境ではなく、頭だ!」と。
例えば私は、ME(MT5)に初めて触れたとき、Pascal(Delphi)でプログラミングをしていました。
3分で母国語のようにプログラミングができるようになりました。
猫はやることがないと、タマを舐める...。
vimの使い方を知らない人に説明するのは大変です。単なるエディターではなく、ハマると「メモ帳」でマウスでサクサクと操作するのが解剖学的に気持ち悪くなってくるのです。便利な道具が欲しいだけ、普通の欲求だと私は思います。
正直、MetaEditorが開いているのを見ると、コーディング意欲が減退し、生産性に悪影響が出るのですが、なぜそんな迷惑な要素を求めるのでしょうか?vimの使い方を知らない人に説明するのは大変です。単なるエディターではなく、ハマると「メモ帳」でマウスでサクサクと操作するのが解剖学的に気持ち悪くなってくるのです。便利な道具が欲しいだけ、普通の欲求だと私は思います。
正直、MetaEditorが開いているのを見るとコーディング意欲が減退し、生産性に悪影響を及ぼすのですが、なぜそんな迷惑な要素を求めるのでしょうか?何も説明しなくていいんです!
vimが好きなら好きでいいじゃないですか。
が、それだけでは飽き足らず、自分の意見を他人に押し付ける ようになったんですね。
これ以上は意味がない。
何も説明しなくていいんです!
vimが好きなら好きでいいじゃないですか。
が、それだけでは飽き足らず、自分の意見を他人に押し付ける ようになったんですね。
これ以上は必要ない。
:) 別に押し付けてるわけじゃないんですよ、私のスレッドに来てくれたんですから。ここに来ることを強制されたわけではないので、続けるかどうかは私次第です。