Vim comme idéal pour mql

 

Bref, je voulais abandonner le métaéditeur. Ça s'est avéré plutôt bon, je veux le partager avec vous.

Configuration requise : 1. système d'exploitation - linux (adapté à Windows, mais pas pour moi) ; 2 - utilitaire dos2unix installé ; 3 - clangd (serveur LSP) installé ; 4 - gestionnaire de paquets vim-plug pour vimhttps://github.com/junegunn/vim-plug. 5- répertoire du terminal "~/.wine/drive_c/Program Files/MetaTrader 5" ; 6 - j'utilise vim en mode console, je n'ai pas testé son fonctionnement avec goo.

Vous trouverez ci-joint les fichiers nécessaires. Instructions :

1. Mettez dans ~ .vimrc (ou copiez dans le vôtre). Lancez vim, exécutez :PlugInstall

2. Redémarrer vim, exécuter :CocConfig, copier

{
    "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. Copiez coc.nvim_vimrc dans ~/.vim/plugged/.

4. Copiez dans l'un des chemins PATH de compile_mql (changez le propriétaire/groupe si nécessaire, donnez les permissions d'exécution).

5. le compilateur mql refuse de compiler lorsqu'il y a des espaces dans les chemins, créer un lien

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

6. Dans ~/.wine/MQL5/Include créer compile_flags.txt avec le contenu (au lieu de YOUR_HOME_DIR écrire votre répertoire personnel, ${HOME} ne fonctionne pas) :

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

7. Mettez vim.mqh dans le sous-répertoire Include (le mien est Include/myincl) (il doit être inclus dans chaque script/expert).

8. Dans le répertoire avec les scripts/experts créez compile_flags.txt avec le contenu :

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


C'est tout. Maintenant, nous n'avons plus besoin de toucher au méta-éditeur, nous créons le fichier, nous l'éditons dans vime, nous compilons là aussi. Nous devons noter :

1. il s'agit d'un outil beaucoup plus avancé que l'autocomplétion et que celui lié au méta-éditeur, clangd ne peut être confondu ni par des macrosnoy rusés ni par des modèles (l'éditeur sur les modèles ne fonctionne pas même dans des cas simples). Et vim lui-même est plus rapide (au moins l'éditeur via vin).

2. Compiler en vime avec F7, visualiser les résultats avec :copen ou :clist/:cnext/... Avec possibilité de passer à l'erreur/alerte, c'est-à-dire que tout est sérieux.

3. Combinaisons sur toutes sortes d'astuces de codeurs (allez dans définition/...) regardez dans coc.nvim_vimrc, basique :

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. Lorsque vous passez des tableaux à une fonction, remplacez & par ref, sinon l'aide de la sinature ne sera pas affichée pour cette fonction (void examp_fn(int ref ar[]). Ignorons les plaintes de clang concernant les points lors du déréférencement des pointeurs, ce n'est pas critique.

5. Dans chaque fichier d'en-tête, faites une garde d'inclusion, comme ceci :

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

6. clang n'aime pas #propert strict

7. Chaque message avec une version plus récente sera marqué d'un hashtag #vim_as_mql_ide_X pour faciliter la recherche parmi les inondations possibles, où X est la version.

8. vim.mqh contient des déclarations de fonctions/constantes. Bien sûr, je n'ai pas tout copié, ce serait bien que quelqu'un se joigne au processus et remplisse les déclarations (mais ne change pas le formatage de celles qui existent déjà - indentations, commentaires ; pour pouvoir faire facilement une différence). Vous pouvez m'envoyer le vim.mqh mis à jour et je le fusionnerai en un seul et le posterai.

9. Comme aide-mémoire pour vim, vous pouvez utiliser https://www.linux.org.ru/forum/general/15373588.


#vim_as_mql_ide_0.

Dossiers :
 

La nouvelle version, à mon avis, a des peluches plus intéressantes que les versions officielles ;))

1. Préprocesseur clang vissé à µl. Vous pouvez maintenant mettre en œuvre toutes les astuces du préprocesseur, même celles du type http://jhnet.co.uk/articles/cpp_magic. L'ensemble du processus ressemble à ceci : F7->préprocesseur Clang->préprocesseur/compilateur MQL. Pour passer mql aux constructions spécifiques du compilateur mql (enfin, pour ne pas ennuyer et embrouiller clang avec des bêtises, il n'aime pas beaucoup ça) faites ce qui suit

#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

ajouter mqlcpp__ avant les directives au préprocesseur μl, sinon il sera traité par le premier préprocesseur. Inclure les en-têtes de la bibliothèque std comme suit

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

Pourquoi ? Ils n'ont pas de gardes inclus. Si c'est le cas (trois lignes supplémentaires dans chaque fichier), vous pouvez les inclure comme d'habitude.

2. Vous pouvez maintenant déréférencer les pointeurs d'une manière normale, et non de la manière dont vous voulez que le MC les déréférence.

this->member;
pntr->field;

3. Il en va de même pour le passage de tableaux dans les fonctions - vous pouvez maintenant le faire d'une manière normale et généralement acceptée.

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

4) Le code source avec un encodage utf-16 ne fonctionnera pas (il le sera si le code source contient du cyrillique). Mais le recodage en utf-8 est simple.

$ dos2unix file1 ...


La syntaxe est un plus, ça se voit. Pratique pour le portage vers/depuis µl + signifie un bon support du côté de clang (autocomplétion etc.).


ZS : comme la recherche sur les forums en général est un feu (la recherche sur les forums via le moteur de recherche n'est pas non plus un as), je ferai un lien vers la dernière version sur la page principale de mon profil.


#vim_as_mql_ide_1

Dossiers :
 

Plus. En même temps, je vais garder le sujet en haut, peut-être que les développeurs le liront.

Le fait est que votre éditeur est vraiment nul (mise en évidence de toutes les occurrences d'une variable, changement automatique du nom de la variable/fonction tout au long du projet, recherche de toutes les références à une variable, etc... eh bien, regardez n'importe quel IDE "adulte" et comparez). Le préprocesseur semble être là, mais en fait c'est une souche. Pour ce qui est des modèles, c'est la même chose : absence de paramètre de modèle non-type, pas de possibilité de spécialiser les modèles. Vous pourriez peut-être planifier un développement dans cette direction un jour ?

 
Vladimir Simakov:

Plus. Je vais garder le sujet en tête aussi, peut-être que les développeurs le liront.

Le fait est que votre éditeur est vraiment ringard (mise en évidence de toutes les occurrences d'une variable, substitution automatique du nom de la variable/fonction dans tout le projet, recherche de toutes les références à une variable, etc., eh bien, regardez n'importe quel IDE "adulte" et comparez). Le préprocesseur semble être là, mais en fait c'est une souche. Pour ce qui est des modèles, c'est la même chose : absence de paramètre de modèle non-type, pas de possibilité de spécialiser les modèles. Vous pourriez peut-être planifier un développement dans cette direction un jour ?

Avant de le qualifier de ringard, ayez la gentillesse de dresser une liste de toutes les fonctionnalités de l'éditeur.

Vous verrez également que vos affirmations sont soit dépassées, soit complètement fausses.

 
Renat Fatkhullin:

Avant de le qualifier de ringard, auriez-vous l'amabilité de rédiger une liste complète des fonctionnalités de l'éditeur ?

En même temps, vous verrez que vos affirmations sont soit dépassées, soit complètement fausses.

Rédacteur en chef :


Mettre en évidence toutes les occurrences d'une variable (quelqu'un peut-il me dire comment faire cela dans l'éditeur ?):

Substitution automatique du nom de la variable/fonction - c'est ce que je veux dire :


Recherche de toutes les références à une variable - je n'ai pas besoin de ce seul fichier ou de tous les fichiers du répertoire en général, j'ai besoin de montrer toutes les références (analogue à Shift+F12 en MVS)

Ce ne sont que mes observations.

Le préprocesseur et les modèles sont une autre histoire, mais j'ai raison (je vérifierai à nouveau la spécialisation des modèles ce soir), n'est-ce pas ?
 
Veillez à ajouter le thème "Dark" (et les paramètres de couleur en général) et la connectivité github au MetaEditor.
 
Renat Fatkhullin:

Avant de le qualifier de ringard, ayez la gentillesse d'écrire la liste complète des fonctionnalités de l'éditeur.

Et vous verrez que vos affirmations sont soit dépassées, soit complètement fausses.

Vous êtes sérieux ? Un simple modèle dépasse les capacités de votre éditeur.

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

Et ne serait-il pas possible d'ajouter des schémas de couleurs pour tant d'années (je suis intéressé par le sombre, je ne supporte pas le clair) ? Et les macros dans vime, je ne peux pas vivre sans elles...

Mais je ne suis pas là pour le développement de l'éditeur, il y en a tellement de prêts à l'emploi, pourquoi les réinventer.

 
Combien de code j'ai écrit en ME en 6 ans de programmation continue dans ce langage ! J'ai toujours aimé ça. J'ai cependant essayé d'autres IDE. Il n'y a rien de plus. Et j'en avais très peu besoin, de toute façon. C'est pourquoi je ne soutiens pas les revendications gonflées. Tout cela ressemble à une critique du ballon par une équipe de joueurs de football)). (comme la mauvaise couleur, rebondit tristement...)
 

Les gars, ne faites pas votre méta-éditeur avec moi, vraiment.

Personnellement, je l'aime bien.

Eh bien, celui-ci est cool, aussi.

 
Vladimir Simakov:

Rédacteur en chef :


Mise en évidence de toutes les occurrences d'une variable (quelqu'un peut-il m'indiquer comment faire cela dans l'éditeur ?)

Substitution automatique des noms de variable/fonction - c'est ce que je veux dire :


Recherche de toutes les références à une variable - je n'ai pas besoin de ce seul fichier ou de tous les fichiers du répertoire en général, j'ai besoin de montrer toutes les références (analogue à Shift+F12 dans MVS)

Ce ne sont que mes observations.

Le préprocesseur et les modèles sont une autre histoire, mais j'ai raison (je vérifierai à nouveau la spécialisation des modèles ce soir), n'est-ce pas ?

Est-il possible d'appeler "ça" par des touches de raccourci ? ?? Je pense que c'est ctrl+h si c'est le cas. Et votre mère ne permet pas d'appuyer sur ctrl+h dans l'éditeur mql ? Avant de déposer une plainte, essayez des variantes non décrites dans l'aide.

Mais avec la mise en évidence de toutes les variables, je suis d'accord. Ce n'est pas un problème, mais ce n'est pas non plus une fatalité sans elle. Tout comme je ne souffre pas de l'effondrement d'une partie du code.

Voici un autre petit détail : les touches de la souris "Avant/Arrière" fonctionnent dans l'éditeur mql comme dans d'autres applications.

 
Alexey Viktorov:

Y a-t-il une touche de raccourci pour l'appeler ??? Je pense que c'est ctrl+h s'il y en a un. Ta mère ne te permet pas d'appuyer sur ctrl+h dans l'éditeur mql ? Avant de déposer une plainte, essayez des variantes non décrites dans l'aide.

Mais avec la mise en évidence de toutes les variables, je suis d'accord. Ce n'est pas un problème, mais ce n'est pas non plus une fatalité sans elle. Et je ne souffre pas de voir une partie du code s'effondrer également.

Une autre petite astuce : les boutons de la souris "Avancer/Retarder" fonctionnent dans l'éditeur mql ainsi que dans d'autres applications.

Seulement dans l'éditeur, il ne modifiera que le fichier en cours, alors que je parlais de l'ensemble du projet. Allez, vous avez mal nommé la méthode, et elle se trouve dans 90% des fichiers de votre bibliothèque est appelée plus d'une fois, et le nombre de fichiers est déjà des dizaines. Donc oui, 5-10 minutes de renommage fonctionnent dans tous les endroits, mais quand dans d'autres IDE vous le faites à la volée....