Vim come ide per mql

 

Comunque, volevo rinunciare al metaeditor. È venuto fuori piuttosto bene, voglio condividerlo con voi.

Requisiti: 1. OS - linux (adatto a Windows, ma non a me); 2 - installata l'utilità dos2unix; 3 - installato clangd (server LSP); 4 - gestore di pacchetti vim-plug per vimhttps://github.com/junegunn/vim-plug. 5- directory terminale "~/.wine/drive_c/Program Files/MetaTrader 5"; 6 - uso vim da console, non ho testato come funziona con goo.

In allegato ci sono i file necessari. Istruzioni:

1. Mettete in ~ .vimrc (o copiate nel vostro). Eseguire vim, eseguire :PlugInstall

2. Riavviare vim, eseguire :CocConfig, copiare

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

4. Copia in uno dei percorsi PATH di compile_mql (cambia proprietario/gruppo se necessario, dai i permessi di esecuzione).

5. il compilatore mql si rifiuta di compilare quando ci sono spazi nei percorsi, creare un collegamento

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

6. In ~/.wine/MQL5/Include crea compile_flags.txt con il contenuto (invece di YOUR_HOME_DIR scrivi la tua home directory, ${HOME} non funziona):

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

7. Metti vim.mqh nella sottodirectory Include (la mia è Include/myincl) (deve essere incluso in ogni script/expert).

8. Nella directory con scripts/experts create compile_flags.txt con il contenuto:

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


Questo è tutto. Ora non abbiamo bisogno di toccare il meta-editor, creiamo il file, lo modifichiamo in vime, compiliamo anche lì. Abbiamo bisogno di notare:

1. è uno strumento molto più avanzato di autocomplete e relativo in meta-editor, clangd non può essere confuso né da macrosnoy astuto né da template (l'editor su template non funziona nemmeno in casi semplici). E vim stesso è più veloce (almeno l'editor via vin).

2. Compilare in vime con F7, visualizzare i risultati con :copen o :clist/:cnext/... Con possibilità di saltare a errore/avviso, cioè tutto è serio.

3. Combinazioni su tutti i tipi di trucchi del codificatore (vai a definizione/...) guarda in coc.nvim_vimrc, di base:

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. Quando si passano array a una funzione, sostituire & con ref, altrimenti non verrà mostrato l'aiuto di sinatura per quella funzione (void examp_fn(int ref ar[]). Ignoriamo le lamentele di clang sui punti quando dereferenzia i puntatori, non è critico.

5. In ogni file di intestazione fare include guard, come questo:

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

6. a clang non piace #propert strict

7. Ogni post con la nuova versione dei file avrà l'hashtag #vim_as_mql_ide_X per una facile ricerca tra i possibili flood, dove X è la versione.

8. vim.mqh contiene dichiarazioni di funzioni/costanti. Naturalmente, non ho copiato tutto, sarebbe bello se qualcuno potesse unirsi al processo e riempire le dichiarazioni (ma non cambiare la formattazione di quelle esistenti - trattini, commenti; per poter fare facilmente una diff). Puoi mandarmi il vim.mqh aggiornato e io lo fonderò in uno solo e lo posterò.

9. Come un cheat sheet per vim si può usare https://www.linux.org.ru/forum/general/15373588


#vim_as_mql_ide_0.

File:
 

La nuova release, a mio parere, ha plushies più interessanti delle release ufficiali ))

1. Preprocessore clang avvitato a µl. Ora è possibile implementare qualsiasi trucco di preprocessore, anche tale http://jhnet.co.uk/articles/cpp_magic. L'intero processo assomiglia a questo: F7->preprocessore Clang->preprocessore/compilatore Mql. Per passare mql a costrutti specifici del compilatore mql (beh, non per infastidire e confondere clang con qualche porcheria, non gli piace molto) fate come segue

#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

aggiungere mqlcpp__ prima delle direttive al preprocessore μl, altrimenti sarà gestito dal primo preprocessore. Includere gli header della libreria std come segue

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

Perché? Non hanno incluso le guardie. Se lo sono (tre righe in più in ogni file), puoi includerle come al solito.

2. Ora potete dereferenziare i puntatori in modo normale, non nel modo in cui volete che MC li dereferenzi.

this->member;
pntr->field;

3. Lo stesso vale per il passaggio degli array nelle funzioni: ora potete farlo in un modo normale e generalmente accettato

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

4) Il codice sorgente con codifica utf-16 non funzionerà (lo sarà se il codice sorgente contiene cirillico). Ma la ricodifica in utf-8 è semplice.

$ dos2unix file1 ...


La sintassi è un plus, si vede. Comodo per il porting da/verso µl + significa un buon supporto da parte di clang (autocompletamento ecc.).


ZS: come ricerca forum in generale è fuoco (ricerca forum tramite motore di ricerca anche non asso), farà un link all'ultima versione sulla pagina principale del mio profilo.


#vim_as_mql_ide_1

File:
 

In più. Allo stesso tempo, terrò l'argomento in cima, forse gli sviluppatori lo leggeranno.

Il punto è che il tuo editor è davvero penoso (evidenziazione di tutte le occorrenze di una variabile, cambio automatico del nome della variabile/funzione in tutto il progetto, ricerca di tutti i riferimenti a una variabile, ecc... beh, guarda qualsiasi IDE "adulto" e confronta). Il preprocessore sembra esserci, ma in realtà è un ceppo. Per quanto riguarda i template, lo stesso: non tipo template-parametro assente, nessuna possibilità di specializzare i template. Forse si può pianificare uno sviluppo in questa direzione qualche volta?

 
Vladimir Simakov:

In più. Terrò il topic in cima anche io, forse gli sviluppatori lo leggeranno.

Il punto è che il vostro editor è davvero di cattivo gusto (evidenziazione di tutte le occorrenze di una variabile, sostituzione automatica del nome della variabile/funzione in tutto il progetto, ricerca di tutti i riferimenti a una variabile, ecc.) Il preprocessore sembra esserci, ma in realtà è un ceppo. Per quanto riguarda i template, lo stesso: non tipo template-parametro assente, nessuna possibilità di specializzare i template. Forse si può pianificare uno sviluppo in questa direzione qualche volta?

Prima di chiamarlo smielato, siate così gentili da scrivere una lista di tutte le funzionalità dell'editor.

Vedrete anche che le vostre affermazioni sono superate o completamente sbagliate.

 
Renat Fatkhullin:

Prima di chiamarlo smielato, saresti così gentile da scrivere una lista completa delle funzionalità dell'editor.

Allo stesso tempo e vedrete che le vostre affermazioni sono superate o completamente sbagliate.

Editore:


Evidenzia tutte le occorrenze di una variabile (qualcuno può dirmi come fare questo nell'editor?):

Sostituzione automatica del nome della variabile/funzione - questo è ciò che intendo:


Cerca tutti i riferimenti a una variabile - non ho bisogno solo di questo file o di tutti i file della directory in generale, ho bisogno di mostrare tutti i riferimenti (analogo a Shift+F12 in MVS)

Questo è solo dalle mie osservazioni.

Il preprocessore e i template sono un'altra storia, ma ho ragione (controllerò di nuovo la specializzazione dei template stasera), vero?
 
Assicurati di aggiungere il "tema scuro" (e l'impostazione dei colori in generale) e la connettività github al MetaEditor.
 
Renat Fatkhullin:

Prima di chiamarlo smielato, siate così gentili da scrivere l'intera lista delle funzionalità dell'editor.

E vedrete che le vostre affermazioni sono superate o completamente sbagliate.

Dici sul serio? Un semplice modello è al di là delle capacità del tuo editore.

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

E non potrebbe essere possibile aggiungere schemi di colori per così tanti anni (mi interessa quello scuro, non sopporto quello chiaro)? E le macro in vime, non posso vivere senza di loro...

Ma non sono qui per lo sviluppo dell'editor, ce ne sono così tanti già pronti in giro, perché reinventare.

 
Quanto codice ho scritto in ME in 6 anni di programmazione continua in esso! Mi è sempre piaciuto. Ho provato altri IDE però. Non c'è niente in più. E comunque ne avevo bisogno molto poco. Ecco perché non sostengo le rivendicazioni gonfiate. Tutto sembra una critica alla palla da parte di una squadra di giocatori di calcio)). (come il colore sbagliato, rimbalza tristemente...)
 

Ragazzi, non fate i meta-editori con me, davvero.

Personalmente, mi piace.

Beh, anche questo è forte.

 
Vladimir Simakov:

Editore:


Evidenziazione di tutte le occorrenze di una variabile (qualcuno può dirmi come farlo nell'editor?):

Sostituzione automatica del nome della variabile/funzione - ecco cosa intendo:


Cerca tutti i riferimenti a una variabile - non mi serve solo questo file o tutti i file nella directory in generale, ho bisogno di mostrare tutti i riferimenti (analogo a Shift+F12 in MVS)

Questo è solo dalle mie osservazioni.

Il preprocessore e i template sono un'altra storia, ma ho ragione (controllerò di nuovo la specializzazione dei template stasera), vero?

È possibile chiamare "esso" con i tasti di scelta rapida? Credo che sia ctrl+h se non altro. E tua madre non permette di premere ctrl+h nell'editor mql? Prima di fare un reclamo, provate delle varianti non descritte nella guida.

Ma con l'evidenziazione di tutte le variabili, sono d'accordo. Non è un problema, ma non è neanche fatale senza. Così come non soffro senza collassare una parte del codice.

Ecco un'altra piccola chicca: i tasti del mouse "avanti/indietro" funzionano nell'editor mql come in altre applicazioni.

 
Alexey Viktorov:

C'è un tasto di scelta rapida per chiamarlo? Credo che sia ctrl+h, se ce n'è uno. Tua madre non ti permette di premere ctrl+h nell'editor mql? Prima di fare un reclamo, provate delle varianti non descritte nella guida.

Ma con l'evidenziazione di tutte le variabili, sono d'accordo. Non è un problema, ma non è neanche fatale senza. E non soffro senza far crollare anche una parte del codice.

Un altro piccolo suggerimento: i pulsanti del mouse "avanti/indietro" funzionano nell'editor mql così come in altre applicazioni.

Solo nell'editor cambierà solo il file corrente, mentre io stavo parlando dell'intero progetto. Assecondami, hai nominato male un metodo, ed è nel 90% dei file nella tua libreria è chiamato più di una volta, e il numero di file è già decine. Quindi sì, 5-10 minuti di lavoro di rinomina in tutti i posti, ma quando in altri IDE lo fai al volo...