mqlのIDEとしてのVim

 

とにかく、メタエディタを手放したくなりました。なかなかいい感じに仕上がったので、紹介したいと思います。

要件: 1 - OS - linux (Windows に適していますが、私には適していません); 2 - dos2unix ユーティリティをインストール; 3 - clangd (LSP サーバ) をインストール; 4 - vim 用パッケージマネージャ vim-plughttps://github.com/junegunn/vim-plug. 5- ターミナルディレクトリ "~/.wine/drive_c/Program Files/MetaTrader 5"; 6 - console vim を使っていますので、 goo でどう動くかは未検証です。

必要なファイルを添付します。指示する。

1..vimrcに入れる(またはコピーして自分のものにする)。vimを起動し、:PlugInstallを実行します。

2.vimを再起動し、:CocConfigを実行し、コピーする。

{
    "signature.enable": true,
    "signature.target": "float",
    "signature.maxWindowHeight": 100,

    "languageserver": {
        "clangd": {
            "command": "clangd",
            "filetypes": [
                "c",
                "cpp",
                "objc",
                "objcpp"
            ],
            "rootPatterns": [
                ".clangd",
                "compile_flags.txt",
                "compile_commands.json",
                ".vim/",
                ".git/",
                ".hg/"
            ],
            "initializationOptions": {
                "cache": {
                    "directory": "/tmp/clangd"
                }
            }
        }
    }
}

3.coc.nvim_vimrcを~/.vim/plugged/にコピーします。

4.compile_mqlのPATHパスのいずれかにコピーする(必要に応じてオーナー/グループを変更し、実行権限を与える)。

5. mqlコンパイラは、パスにスペースがあるとコンパイルを拒否するため、リンクを作成します。

ln -s "${HOME}/.wine/drive_c/Program Files/MetaTrader 5/MQL5" "${HOME}/.wine/"

6.~/.wine/MQL5/Includeにcompile_flags.txtを作成します(YOUR_HOME_DIRの代わりにホームディレクトリを書きます、${HOME}は使えません)。

-xc++-header
-IYOUR_HOME_DIR/.wine/MQL5/Include
-DVIM

7.vim.mqhをIncludeサブディレクトリ(私のはInclude/myincl)に入れる(すべてのscript/expertに含まれる必要がある)。

8.scripts/expertsのあるディレクトリにcompile_flags.txtを作成し、内容を確認します。

-xc++
-IYOUR_HOME_DIR/.wine/MQL5/Include
-DVIM


それだけです。これで、メタエディタを全く触らずに、ファイルを作成し、vimeで編集し、そこでコンパイルすることができるようになりました。注意する必要があります。

1. オートコンプリートやメタエディタの関連ツールよりもはるかに高度なツールであり、clangdはずる賢いマクロやテンプレート(テンプレート上のエディタは単純なケースでさえ機能しない)にも惑わされない。そしてvim自体も(少なくともvin経由のエディタは)高速化されています。

2.F7でvimeでコンパイル、:copenまたは:clist/:cnext/...で結果を表示します。エラー/警告にジャンプする可能性があるため、すべてが深刻であることを意味します。

3.コーダーのトリックのすべての種類の組み合わせ(定義/...に移動) coc.nvim_vimrc、基本を探します。

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

4.関数に配列を渡すときは、&をrefに置き換えてください。そうしないと、その関数のsinatureヘルプが表示されません(void examp_fn(int ref ar[]))。ポインタを再参照するときのドットに関するclangの苦情は無視しましょう。

5.各ヘッダーファイルには、以下のようにインクルードガードを記述してください。

#ifndef  NEW_FILE_MQH
#define  NEW_FILE_MQH
...// кодим здесь
#endif //NEW_FILE_MQH

6. clang は #propert strict が好きではありません。

7.新しいバージョンのファイルの投稿には、ハッシュタグ #vim_as_mql_ide_X が付けられ、洪水の可能性があるファイルから簡単に検索できるようになります。

8. vim.mqhには関数/定数宣言が含まれています。もちろん、私はすべてをコピーしたわけではありません。誰かがプロセスに接続し、宣言(ただし、既存のものの書式 - インデント、コメント - を変更しない)を投げ込むことができれば、簡単に差分を作成できるようになります。 更新したvim.mqhを送っていただければ、1つに統合して掲載します。

9.vim のチートシートとして、https://www.linux.org.ru/forum/general/15373588 を使用することができます。


#vim_as_mql_ide_0.

ファイル:
 

新作は、個人的には、公式リリースよりも面白いぬいぐるみが多いと思います ))

1.clangプリプロセッサーをµlにねじ込みました。これで、どんなプリプロセッサのトリックでも、このようなhttp://jhnet.co.uk/articles/cpp_magic でも実装できるようになりました。 F7→clangプリプロセッサー→mqlプリプロセッサー/コンパイラーという流れで、全体の流れはこんな感じです。mqlをmqlコンパイラ固有のコンストラクトに渡すには(まあ、clangを困らせたり混乱させたりしないように、それはあまり好きではありません)次のようにします。

#ifndef  VIM
input int            MA_Period=13; // Ну или INPUT макрос
input int            MA_Shift=0;
#else
int            MA_Period=13;
int            MA_Shift=0;
#endif

#ifndef  VIM
mqlcpp_#import "user32.dll"
#endif
   int GetCursorPos(int ref point[]);
   int GetWindowRect(HWND hWnd, int ref rect[]);
#ifndef  VIM
mqlcpp_#import
#endif

は、μlプリプロセッサへの指示の前にmqlcpp__を追加してください。そうしないと、最初のプリプロセッサによって処理されます。stdライブラリのヘッダーを以下のようにインクルードします。

#ifndef  VIM
mqlcpp_#include <Arrays/ArrayObj.mqh>
#endif

なぜ?インクルードガードがないんです。もしそうであれば(各ファイルに3行ずつ余分な行がある)、通常通りインクルードすることができます。

2.これで、三菱商事が望むような方法ではなく、通常の方法でポインタを参照解除することができるようになりました。

this->member;
pntr->field;

3.配列の関数への受け渡しも同様に、一般的に受け入れられている通常の方法で行うことができるようになりました

void fn(int ar[]);   // в топку &

4) エンコーディングがutf-16のソースコードは動作しません(ソースコードにキリル文字が含まれる場合は動作します)。しかし、utf-8で再コード化するのは簡単です。

$ dos2unix file1 ...


シンタックスは、プラスアルファで、わかる。µlへの移植に便利 + clang側からのサポートが充実していることを意味する (オートコンプリートなど)。


ZS: フォーラムの検索が一般的に炎上しているので(検索エンジン経由のフォーラム検索もエースではない)、私のプロフィールのメインページに最新版へのリンクを作る予定です。


#vim_as_mql_ide_1

ファイル:
 

プラス同時に、このトピックを一番上に置いておくと、もしかしたら開発者が読んでくれるかもしれませんね。

要は、このエディタは本当にいい加減なのです(変数のすべての出現箇所のハイライト表示、プロジェクト 全体の変数/関数名の自動変更、変数へのすべての参照の検索、などなど・・・まあ、どんな「大人の」IDEでも見て比べてみてください)。プリプロセッサがあるように見えて、実はガチガチ。テンプレートについても同様で、非タイプのテンプレートパラメータが存在せず、テンプレートを特殊化することもできません。今度、この方向で開発を計画してもいいのでは?

 
Vladimir Simakov:

プラストピックもトップにしておくと、開発者が読んでくれるかもしれませんね。

要は、このエディタは本当に安っぽいということです(変数のすべての出現箇所のハイライト表示、プロジェクト全体の変数/関数名の自動置換、変数へのすべての参照の検索など、まあ、どんな「大人の」IDEでも見て比べてみてください)。プリプロセッサがあるように見えて、実はガチガチ。テンプレートについても同様で、非タイプのテンプレートパラメータが存在せず、テンプレートを特殊化することもできません。今度、この方向で開発を計画してもいいのでは?

安っぽいと言う前に、エディターの全機能の一覧を書くくらいの親切心は必要です。

また、あなたの発言が時代遅れであるか、完全に間違っていることもおわかりいただけるでしょう。

 
Renat Fatkhullin:

安っぽいと言われる前に、エディタの機能一覧を書いていただけませんか。

同時に、あなたの発言は時代遅れか、完全に間違っていることも分かるでしょう。

編集部


変数のすべての出現箇所を強調表示する(エディタでこれを行う方法を誰か教えてください)。

変数名/関数名の自動置換 - そういうことです。


変数へのすべての参照を検索 - このファイルだけ、またはすべてのディレクトリファイル一般は必要ありません、私はすべての参照を表示する必要があります(MVSのShift + F12に類似しています)。

これはあくまでも私の観察によるものです。

プリプロセッサとテンプレートは別物ですが、(今夜もう一度テンプレートの特製を確認してみます)そうですよね?
 
MetaEditorに「Dark theme」(とカラー設定全般)とgithub接続を追加することを確認します。
 
Renat Fatkhullin:

安っぽいと言う前に、エディターの機能一覧を全部書くくらいの親切心を持ちましょう。

あなたの発言は時代遅れか、完全に間違っていることがわかるでしょう。

本気ですか?単純なテンプレートはエディタの能力を超えています。

template <typename T>
class Qwerty
{
public:
   void func1() {}
};
...
Qwerty<int> qwerty;
qwerty.

また、何年も前から配色を追加することはできないのでしょうか(ダーク系に興味がある、ライト系は我慢できない)。そして、ビームのマクロ、これがないと生きていけない・・・。

しかし、私はエディタの開発に来たのではありません。既製のものがたくさんあるのに、なぜ再発明するのか。

 
MEで6年間継続的にプログラミングをしてきて、どれだけのコードを書いたか!?昔から好きだったんです。他のIDEも試しましたが。そこに余分なものはないのです。それに、とにかくほとんど必要なかったんです。だから、私は肥大化した主張を支持しないのです。全てはサッカー選手チームによるボールへの批判にしか見えない))。(色違いとか、悲しいことにバウンドするとか...)
 

みんな、メタ編集は勘弁してくれ、本当に。

個人的には好きなんですけどね。

まあ、これもカッコいいんですけどね。

 
Vladimir Simakov:

編集部


変数のすべての出現箇所をハイライト表示(エディターでこれを行う方法を誰か教えてください)。

変数名/関数名の自動置換 - そういうことです。


変数へのすべての参照を検索 - このファイルだけ、またはディレクトリ内のすべてのファイル一般は必要ありません、私はすべての参照を表示する必要があります(MVSのShift + F12に類似しています)。

これはあくまでも私の観察によるものです。

プリプロセッサとテンプレートは別の話ですが、(今夜もう一度テンプレートの特製を確認してみます)そうなんでしょう?

ホットキーで "それ "を呼び出すことは可能なのか?強いて言えばctrl+hかな。そして、あなたのお母さんは、mqlエディタでctrl+hを押すことを許可しないのですか? クレームをつける前に、ヘルプに書かれていないバリアントを試してみてください。

しかし、すべての変数を強調することで、私は同意します。問題ないが、なくても致命的でもない。コードの一部を折りたたまないと苦しくないのと同じです。

また、マウスの「進む/戻る」キーは、他のアプリケーションと同じようにmqlエディタで使えます。

 
Alexey Viktorov:

それ」を呼び出すホットキーはあるのか?全くなければctrl+hだと思います。お母さんは、mqlエディタでctrl+hを押せないのですか?クレームをつける前に、ヘルプに書かれていないバリアントを試してみてください。

しかし、すべての変数を強調することで、私は同意します。問題ないが、なくても致命的でもない。そして、コードの一部も崩さずに苦にしない。

もう一つ小さなヒントとして、マウスボタンの「進む/戻る」は、他のアプリケーションと同様にmql editorでも機能します。

プロジェクト 全体について話していたのに、エディターでは現在のファイルだけが変更されます。ユーモアで言うと、メソッド名が貧弱で、ライブラリの9割のファイルで複数回呼ばれていて、ファイル数はもう数十個になります。そうそう、5~10分のリネーム作業はどこの場所でもできますが、他のIDEではその場でやっていると...。