Vim als Ide für mql

 

Jedenfalls wollte ich den Meta-Editor aufgeben. Es ist ziemlich gut geworden, und ich möchte es mit euch teilen.

Voraussetzungen: 1. OS - linux (für Windows geeignet, aber nicht für mich); 2 - installiertes dos2unix-Dienstprogramm; 3 - installierter clangd (LSP-Server); 4 - Paketmanager vim-plug für vimhttps://github.com/junegunn/vim-plug. 5- Terminalverzeichnis "~/.wine/drive_c/Programme/MetaTrader 5"; 6 - ich verwende Konsolen-Vim, ich habe nicht getestet, wie es mit goo funktioniert.

Im Anhang finden Sie die erforderlichen Dateien. Anweisungen:

1. Fügen Sie in ~ .vimrc ein (oder kopieren Sie es in Ihre eigene). vim ausführen, :PlugInstall ausführen

2. vim neu starten, :CocConfig ausführen, kopieren

{
    "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. Kopieren Sie coc.nvim_vimrc nach ~/.vim/plugged/.

4. Kopieren Sie in einen der PATH-Pfade von compile_mql (ändern Sie ggf. Eigentümer/Gruppe, geben Sie Run-Rechte).

5. mql compiler weigert sich zu kompilieren, wenn Leerzeichen in den Pfaden vorhanden sind, erstellen Sie einen Link

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

6. In ~/.wine/MQL5/Include erstellen Sie compile_flags.txt mit Inhalt (statt YOUR_HOME_DIR schreiben Sie Ihr Heimatverzeichnis, ${HOME} funktioniert nicht):

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

7. Legen Sie vim.mqh in das Unterverzeichnis Include (bei mir ist es Include/myincl) (es muss in jedem Skript/Expert enthalten sein).

8. Erstellen Sie im Verzeichnis mit den Skripten/Experten die Datei compile_flags.txt mit diesem Inhalt:

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


Das war's. Jetzt brauchen wir den Meta-Editor gar nicht mehr anzufassen, erstellen die Datei, bearbeiten sie in vime und kompilieren auch dort. Das müssen wir zur Kenntnis nehmen:

1. es ist viel mehr fortgeschrittenes Werkzeug als Autovervollständigung und in Meta-Editor verwandt, clangd kann weder durch schlaue macrosnoy noch Vorlagen (Editor auf Vorlagen funktioniert nicht einmal in einfachen Fällen) verwirrt werden. Und vim selbst ist schneller (zumindest der Editor via vin).

2. Kompilieren in vime mit F7, Ergebnisse anzeigen mit :copen oder :clist/:cnext/... Mit der Möglichkeit, zu Fehler/Warnung zu springen, d.h. alles ist ernst.

3. Kombinationen auf alle Arten von Coder Tricks (gehen Sie zu Definition/...) schauen Sie in coc.nvim_vimrc, basic:

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. Ersetzen Sie bei der Übergabe von Arrays an eine Funktion & durch ref, sonst wird die Hilfe für diese Funktion nicht angezeigt (void examp_fn(int ref ar[]). Ignorieren wir die Beschwerden von Clang über Punkte bei der Dereferenzierung von Zeigern, es ist nicht kritisch.

5. In jeder Header-Datei müssen Sie den Schutz einschließen, etwa so:

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

6. clang mag #propert strict nicht

7. Jeder Beitrag mit einer neuen Version von Dateien wird mit dem Hashtag #vim_as_mql_ide_X versehen, um die Suche unter den möglichen Überschwemmungen zu erleichtern, wobei X die Version ist.

8. vim.mqh enthält Funktions-/Konstantendeklarationen. Natürlich habe ich nicht alles kopiert, und es wäre schön, wenn sich jemand dem Prozess anschließen und die Erklärungen ausfüllen könnte (aber die Formatierung der bestehenden Erklärungen - Einzüge, Kommentare - nicht ändern, um einen Vergleich zu ermöglichen). Die aktualisierte vim.mqh kann an mich geschickt werden, ich werde sie zu einer zusammenführen und veröffentlichen.

9. Als Spickzettel für vim können Sie https://www.linux.org.ru/forum/general/15373588 verwenden.


#vim_as_mql_ide_0.

Dateien:
 

Die neue Ausgabe hat meiner Meinung nach interessantere Plüschtiere als die offiziellen Ausgaben ))

1. Geschraubter Clang-Präprozessor für µl. Jetzt können Sie beliebige Präprozessor-Tricks implementieren, sogar solche http://jhnet.co.uk/articles/cpp_magic. Der gesamte Prozess sieht wie folgt aus: F7->clang preprocessor->mql preprocessor/compiler. Um mql an mql-Compiler-spezifische Konstrukte zu übergeben (um clang nicht zu verärgern und zu verwirren, er mag es nicht besonders), tun Sie folgendes

#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

fügen Sie mqlcpp__ vor den Direktiven für den Präprozessor μl hinzu, andernfalls wird es vom ersten Präprozessor verarbeitet. Fügen Sie die Header aus der std-Bibliothek wie folgt ein

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

Warum? Sie haben keine Wachen. Wenn dies der Fall ist (drei zusätzliche Zeilen in jeder Datei), können Sie sie wie üblich einfügen.

2. Sie können jetzt Dereferenzierung Zeiger in einem normalen Weg, nicht die Art, die Sie wollen, dass die MC zu dereferenzieren sie.

this->member;
pntr->field;

3. Das Gleiche gilt für die Übergabe von Arrays an Funktionen - Sie können dies nun auf normale, allgemein akzeptierte Weise tun

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

4) Quellcode mit utf-16-Kodierung wird nicht funktionieren (dies ist der Fall, wenn der Quellcode kyrillisch ist). Aber die Umkodierung in utf-8 ist einfach.

$ dos2unix file1 ...


Die Syntax ist ein Plus, das merkt man. Praktisch für die Portierung nach/von µl + bedeutet gute Unterstützung von der Clang-Seite (Autocomplete etc.).


ZS: da Forensuche im Allgemeinen Feuer ist (Forensuche über Suchmaschine auch nicht Ass), wird einen Link zur neuesten Version auf der Hauptseite meines Profils machen.


#vim_as_mql_ide_1

Dateien:
 

Plus. Gleichzeitig werde ich das Thema ganz oben lassen, vielleicht lesen die Entwickler es ja.

Der Punkt ist, dass Ihr Editor wirklich lahm ist (Hervorhebung aller Vorkommen einer Variablen, automatische Änderung des Variablen-/Funktionsnamens im gesamten Projekt, Suche nach allen Verweisen auf eine Variable, usw... nun, schauen Sie sich eine beliebige "erwachsene" IDE an und vergleichen Sie). Der Präprozessor scheint vorhanden zu sein, aber in Wirklichkeit ist er ein Stumpf. Für Vorlagen gilt das Gleiche: keine Nicht-Typ-Vorlagen-Parameter, keine Möglichkeit, Vorlagen zu spezialisieren. Vielleicht können Sie einmal eine Entwicklung in diese Richtung planen?

 
Vladimir Simakov:

Plus. Ich werde das Thema auch im Auge behalten, vielleicht lesen die Entwickler es ja.

Der Punkt ist, dass Ihr Editor wirklich kitschig ist (Hervorhebung aller Vorkommen einer Variablen, automatische Ersetzung von Variablen-/Funktionsnamen im gesamten Projekt, Suche nach allen Verweisen auf eine Variable usw., nun, schauen Sie sich eine beliebige "erwachsene" IDE an und vergleichen Sie). Der Präprozessor scheint da zu sein, aber in Wirklichkeit ist er ein Stumpf. Für Vorlagen gilt das Gleiche: keine Nicht-Typ-Vorlagen-Parameter, keine Möglichkeit, Vorlagen zu spezialisieren. Vielleicht können Sie einmal eine Entwicklung in diese Richtung planen?

Bevor Sie es als kitschig bezeichnen, seien Sie so freundlich, eine Liste aller Funktionen des Editors zu erstellen.

Sie werden auch sehen, dass Ihre Aussagen entweder veraltet oder völlig falsch sind.

 
Renat Fatkhullin:

Bevor Sie es kitschig nennen, wären Sie so freundlich, eine vollständige Liste der Funktionen des Editors zu erstellen.

Gleichzeitig werden Sie feststellen, dass Ihre Aussagen entweder veraltet oder völlig falsch sind.

Herausgeber:


Alle Vorkommen einer Variablen hervorheben (kann mir jemand sagen, wie man das im Editor macht?):

Automatische Ersetzung von Variablen-/Funktionsnamen - das meine ich:


Suche nach allen Verweisen auf eine Variable - ich brauche nicht nur diese Datei oder alle Verzeichnisdateien im Allgemeinen, ich muss alle Verweise anzeigen (analog zu Shift+F12 in MVS)

Dies ist nur eine Beobachtung von mir.

Der Präprozessor und die Schablonen sind eine andere Geschichte, aber ich habe doch recht (ich überprüfe die Schablonenspezialisierung heute Abend noch einmal), oder?
 
Stellen Sie sicher, dass Sie dem MetaEditor das "Dunkle Thema" (und die Farbeinstellung im Allgemeinen) und die Github-Verbindung hinzufügen.
 
Renat Fatkhullin:

Bevor Sie es als kitschig bezeichnen, seien Sie so freundlich, die gesamte Liste der Funktionen des Editors zu schreiben.

Und Sie werden sehen, dass Ihre Aussagen entweder veraltet oder völlig falsch sind.

Ist das Ihr Ernst? Eine einfache Vorlage übersteigt die Möglichkeiten Ihres Editors.

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

Und könnte es nicht möglich sein, Farbschemata für so viele Jahre hinzuzufügen (ich interessiere mich für die dunkle Variante, die helle kann ich nicht ausstehen)? Und Makros in Vime, ich kann nicht ohne sie leben...

Aber ich bin nicht wegen der Entwicklung des Editors hier, es gibt so viele fertige, warum sollte man ihn neu erfinden.

 
Wie viel Code ich in 6 Jahren kontinuierlicher Programmierung in ME geschrieben habe! Ich habe es immer gemocht. Ich habe aber auch andere IDEs ausprobiert. Da gibt es nichts Zusätzliches. Und ich brauchte sowieso nur sehr wenig davon. Deshalb unterstütze ich auch keine aufgeblähten Forderungen. Es sieht alles aus wie eine Kritik am Ball durch ein Team von Fußballspielern)). (z.B. falsche Farbe, prallt leider ab...)
 

Leute, macht jetzt nicht einen auf Meta-Editor, wirklich.

Mir persönlich gefällt das.

Nun, das hier ist auch cool.

 
Vladimir Simakov:

Herausgeber:


Hervorhebung aller Vorkommen einer Variablen (kann mir jemand sagen, wie man das im Editor macht?):

Automatische Ersetzung von Variablen-/Funktionsnamen - das meine ich:


Suche nach allen Verweisen auf eine Variable - ich brauche nicht nur diese Datei oder generell alle Dateien im Verzeichnis, ich muss alle Verweise anzeigen (analog zu Shift+F12 in MVS)

Dies ist nur eine Beobachtung von mir.

Der Präprozessor und die Schablonen sind eine andere Geschichte, aber ich habe doch recht (ich überprüfe die Schablonenspezialisierung heute Abend noch einmal), oder?

Ist es möglich, "es" über Hotkeys aufzurufen??? Ich glaube, es ist ctrl+h, wenn überhaupt. Und Ihre Mutter erlaubt es nicht, die Tastenkombination Strg+h im MQL-Editor zu drücken? Bevor Sie eine Reklamation einreichen, probieren Sie Varianten aus, die nicht in der Hilfe beschrieben sind.

Aber mit der Hervorhebung aller Variablen bin ich einverstanden. Das ist kein Problem, aber es ist auch nicht tödlich ohne sie. Genauso wie ich es nicht ertrage, wenn ein Teil des Codes zusammenbricht.

Und noch eine Kleinigkeit: Die "Vorwärts/Rückwärts"-Maustasten funktionieren im mql-Editor genauso wie in anderen Anwendungen.

 
Alexey Viktorov:

Gibt es einen Hotkey, um "es" aufzurufen??? Ich glaube, es ist ctrl+h, wenn es überhaupt eine gibt. Erlaubt Ihnen Ihre Mutter nicht, im mql-Editor die Tastenkombination Strg+h zu drücken? Bevor Sie eine Reklamation einreichen, probieren Sie Varianten aus, die nicht in der Hilfe beschrieben sind.

Aber mit der Hervorhebung aller Variablen bin ich einverstanden. Das ist kein Problem, aber es ist auch nicht tödlich ohne sie. Und ich leide nicht darunter, dass ein Teil des Codes nicht auch kollabiert.

Noch ein kleiner Tipp: Die Maustasten "Vorwärts/Rückwärts" funktionieren im mql-Editor genauso wie in anderen Anwendungen.

Nur im Editor wird nur die aktuelle Datei geändert, während ich über das gesamte Projekt sprach. Humor mir, Sie benannt eine Methode schlecht, und es ist in 90% der Dateien in Ihrer Bibliothek wird mehr als einmal aufgerufen, und die Anzahl der Dateien ist bereits zehn. Also ja, 5-10 Minuten Umbenennungsarbeit an allen Stellen, aber wenn man es in einer anderen IDE "on the fly" macht...