Vim como ide para mql

 

De todos modos, quería dejar el metaeditor. Ha quedado muy bien, quiero compartirlo con vosotros.

Requisitos: 1. SO - linux (apto para Windows, pero no para mí); 2 - utilidad dos2unix instalada; 3 - clangd instalado (servidor LSP); 4 - gestor de paquetes vim-plug para vimhttps://github.com/junegunn/vim-plug. 5- directorio de terminal "~/.wine/drive_c/Archivos de programa/MetaTrader 5"; 6 - uso vim de consola, no he probado cómo funciona con goo.

Se adjuntan los archivos necesarios. Instrucciones:

1. Ponga en ~ .vimrc (o copie en el suyo propio). Ejecute vim, ejecute :PlugInstall

2. Reiniciar vim, ejecutar :CocConfig, copiar

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

4. Copiar a una de las rutas PATH de compile_mql (cambiar el propietario/grupo si es necesario, dar permisos de ejecución).

5. el compilador mql se niega a compilar cuando hay espacios en las rutas, crea un enlace

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

6. En ~/.wine/MQL5/Include crear compile_flags.txt con el contenido (en lugar de YOUR_HOME_DIR escribir su directorio de casa, ${HOME} no funciona):

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

7. Poner vim.mqh en el subdirectorio Include (el mío es Include/myincl) (debe ser incluido en cada script/experto).

8. En el directorio con scripts/expertos crear compile_flags.txt con el contenido:

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


Eso es todo. Ahora no necesitamos tocar el meta-editor en absoluto, crear el archivo, editar en vime, compilar allí también. Hay que tener en cuenta:

1. es una herramienta mucho más avanzada que el autocompletado y relacionada en el meta-editor, clangd no puede ser confundido ni por macrosnoy astuto ni por plantillas (el editor en las plantillas no funciona incluso en casos simples). Y el propio vim es más rápido (al menos el editor vía vin).

2. Compilar en vime con F7, ver los resultados con :copen o :clist/:cnext/... Con posibilidad de saltar a error/advertencia, es decir, todo es grave.

3. Combinaciones en todo tipo de trucos de codificador (ir a definición/...) buscar en coc.nvim_vimrc, básico:

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. Cuando pases arrays a una función, sustituye & por ref, de lo contrario no mostrará la ayuda de la sinatura para esa función (void examp_fn(int ref ar[]). Ignoremos las quejas de clang sobre los puntos al desreferenciar punteros, no es crítico.

5. En cada archivo de cabecera se incluye la guardia, así:

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

6. a clang no le gusta #propert strict

7. Cada post con una nueva versión de los archivos será etiquetado con el hashtag #vim_as_mql_ide_X para facilitar la búsqueda entre las posibles inundaciones, donde X es la versión.

8. vim.mqh contiene declaraciones de funciones/constantes. Por supuesto, no copié todo, sería bueno si alguien pudiera conectarse al proceso y lanzar declaraciones (pero no cambiar el formato de los existentes - sangrías, comentarios; para poder hacer fácilmente un diff). Puedes enviarme el vim.mqh actualizado y lo fusionaré en uno solo y lo publicaré.

9. Como hoja de trucos para vim puedes usar https://www.linux.org.ru/forum/general/15373588


#vim_as_mql_ide_0.

Archivos adjuntos:
 

La nueva versión, en mi opinión, tiene peluches más interesantes que las versiones oficiales ))

1. Preprocesador clang atornillado a µl. Ahora puede implementar cualquier truco de preprocesador, incluso tal http://jhnet.co.uk/articles/cpp_magic. Todo el proceso es así: F7->preprocesador clang->preprocesador/compilador mql. Para pasar mql a construcciones específicas del compilador mql (bueno, para no molestar y confundir a clang con cualquier basura, no le gusta mucho) haz lo siguiente

#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

añadir mqlcpp__ antes de las directivas al preprocesador μl, de lo contrario será manejado por el primer preprocesador. Incluya las cabeceras de la biblioteca std de la siguiente manera

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

¿Por qué? No tienen guardias incluidos. Si lo son (tres líneas adicionales en cada archivo), puede incluirlas como de costumbre.

2. Ahora puedes hacer referencia a los punteros de forma normal, no de la forma en que quieres que el MC los haga.

this->member;
pntr->field;

3. Lo mismo ocurre con el paso de arrays a funciones: ahora se puede hacer de forma normal y generalmente aceptada

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

4) El código fuente con codificación utf-16 no funcionará (sí lo hará si el código fuente contiene cirílico). Pero la recodificación en utf-8 es sencilla.

$ dos2unix file1 ...


La sintaxis es un plus, se nota. Práctico para portar a/desde µl + significa un buen soporte por parte de clang (autocompletar, etc.).


ZS: como la búsqueda en el foro en general es fuego (la búsqueda en el foro a través del motor de búsqueda tampoco es as), hará un enlace a la última versión en la página principal de mi perfil.


#vim_as_mql_ide_1

Archivos adjuntos:
 

Además. Al mismo tiempo, mantendré el tema en la parte superior, tal vez los desarrolladores lo lean.

La cuestión es que tu editor es realmente penoso (resaltado de todas las apariciones de una variable, cambio automático del nombre de la variable/función en todo el proyecto, búsqueda de todas las referencias a una variable, etc... bueno, mira cualquier IDE "adulto" y compara). El preprocesador parece estar ahí, pero en realidad es un muñón. En cuanto a las plantillas, lo mismo: ausencia de parámetros de plantillas de tipo, sin posibilidad de especializar las plantillas. ¿Tal vez pueda planear un desarrollo en esta dirección en algún momento?

 
Vladimir Simakov:

Además. Yo también mantendré el tema arriba, quizás los desarrolladores lo lean.

La cuestión es que tu editor es realmente cursi (resaltado de todas las apariciones de una variable, sustitución automática de nombres de variables/funciones en todo el proyecto, búsqueda de todas las referencias a una variable, etc., bueno, mira cualquier IDE "adulto" y compara). El preprocesador parece estar ahí, pero en realidad es un muñón. En cuanto a las plantillas, lo mismo: ausencia de parámetros de plantillas de tipo, sin posibilidad de especializar las plantillas. ¿Quizás pueda planear un desarrollo en esta dirección alguna vez?

Antes de llamarlo cursi, tenga la amabilidad de escribir una lista de todas las funcionalidades del editor.

También verá que sus afirmaciones están desfasadas o son completamente erróneas.

 
Renat Fatkhullin:

Antes de llamarlo cursi, ¿sería tan amable de escribir una lista completa de la funcionalidad del editor?

Al mismo tiempo, verá que sus afirmaciones están desfasadas o son completamente erróneas.

Editor:


Resaltar todas las apariciones de una variable (¿alguien puede decirme cómo hacer esto en el editor?):

Sustitución automática de nombres de variables/funciones: a eso me refiero:


Buscar todas las referencias a una variable - No necesito sólo este archivo o todos los archivos del directorio en general, necesito mostrar todas las referencias (análogo a Shift+F12 en MVS)

Esto es sólo por mis observaciones.

El preprocesador y las plantillas son otra historia, pero estoy en lo cierto (volveré a comprobar la especialización de las plantillas esta noche), ¿no?
 
Asegúrate de añadir el "tema oscuro" (y la configuración de colores en general) y la conectividad de github al MetaEditor.
 
Renat Fatkhullin:

Antes de llamarlo cursi, tenga la amabilidad de escribir la lista completa de la funcionalidad del editor.

Y verás que tus afirmaciones están desfasadas o son completamente erróneas.

¿Hablas en serio? Una simple plantilla está más allá de las capacidades de su editor.

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

¿Y no sería posible añadir esquemas de color para tantos años (me interesa el oscuro, no soporto el claro)? Y las macros en vime, no puedo vivir sin ellas...

Pero no estoy aquí por el desarrollo del editor, hay tantos ya hechos por ahí, para qué reinventar.

 
¡Cuánto código he escrito en ME en 6 años de programación continua en él! Siempre me ha gustado. Sin embargo, he probado otros IDEs. No hay nada extra ahí. Y, de todos modos, necesitaba muy poco. Por eso no apoyo las reclamaciones hinchadas. Todo parece una crítica al balón por parte de un equipo de jugadores de fútbol)). (como el color equivocado, rebota tristemente...)
 

Chicos, no os pongáis en plan meta-editor, de verdad.

Personalmente, me gusta.

Bueno, este también es genial.

 
Vladimir Simakov:

Editor:


Resaltar todas las apariciones de una variable (¿alguien puede decirme cómo hacer esto en el editor?):

Sustitución automática de nombres de variables/funciones: a eso me refiero:


Buscar todas las referencias a una variable - No necesito sólo este archivo o todos los archivos del directorio en general, necesito mostrar todas las referencias (análogo a Shift+F12 en MVS)

Esto es sólo por mis observaciones.

El preprocesador y las plantillas son otra historia, pero estoy en lo cierto (volveré a comprobar la especialización de las plantillas esta noche), ¿no?

¿Es posible llamar a "eso" mediante teclas de acceso rápido? Creo que es ctrl+h si acaso. ¿Y tu madre no permite pulsar ctrl+h en el editor de mql? Antes de presentar una reclamación, pruebe variantes no descritas en la ayuda.

Pero al destacar todas las variables, estoy de acuerdo. No es un problema, pero tampoco es fatal sin él. Al igual que no sufro sin colapsar parte del código.

Aquí hay otro pequeño detalle: las teclas del ratón "Adelante/Atrás" funcionan en el editor mql como lo hacen en otras aplicaciones.

 
Alexey Viktorov:

¿Existe una tecla de acceso directo para llamarlo? Creo que es ctrl+h si es que existe. ¿No te permite tu madre pulsar ctrl+h en el editor de mql? Antes de presentar una reclamación, pruebe variantes no descritas en la ayuda.

Pero al destacar todas las variables, estoy de acuerdo. No es un problema, pero tampoco es fatal sin él. Y no sufro sin colapsar parte del código también.

Un pequeño consejo más: los botones del ratón "Adelante/Atrás" funcionan tanto en el editor mql como en otras aplicaciones.

Sólo en el editor cambiará sólo el archivo actual, mientras que yo estaba hablando de todo el proyecto. Sígueme la corriente, nombraste mal un método, y está en el 90% de los archivos de tu biblioteca es llamado más de una vez, y el número de archivos ya es de decenas. Así que sí, 5-10 minutos de trabajo de renombrado en todos los sitios, pero cuando en otros IDE lo estás haciendo sobre la marcha...