Vim como ideal para mql

 

De qualquer forma, eu queria desistir do metaeditor. Acabou sendo muito bom, quero compartilhá-lo com vocês.

Requisitos: 1. OS - linux (adequado para Windows, mas não para mim); 2 - utilitário dos2unix instalado; 3 - clangd (servidor LSP) instalado; 4 - gerenciador de pacotes vim-plug para vimhttps://github.com/junegunn/vim-plug. 5- diretório de terminais "~/.wine/drive_c/Program Files/MetaTrader 5"; 6 - uso console vim, não testei como funciona com gosma.

Em anexo estão os arquivos necessários. Instruções:

1. Colocar em ~ .vimrc (ou copiar para o seu). Rodar vim, rodar :PlugInstall

2. Reiniciar vim, executar :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. Copiar coc.nvim_vimrc para ~/.vim/plugged/.

4. Copiar para um dos caminhos PATH de compille_mql (mudar de proprietário/grupo se necessário, dar permissões de execução).

O compilador de 5. mql se recusa a compilar quando há espaços nos caminhos, criar um link

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

6. Em ~/.wine/MQL5/Inclua criar compile_flags.txt com conteúdo (ao invés de YOUR_HOME_DIR escreva seu diretório home, ${HOME} não funciona):

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

7. Coloque vim.mqh no subdiretório Include (o meu é Include/myincl) (deve ser incluído em cada roteiro/especialista).

8. No diretório com scripts/experts criar compille_flags.txt com o conteúdo:

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


É isso aí. Agora não precisamos tocar em nenhum meta-editor, criar arquivo, editar em vime, compilar lá também. É preciso observar:

1. É uma ferramenta muito mais avançada do que o autocompletar e relacionada no meta-editor, clangd não pode ser confundida nem por macrosnoy astucioso nem por templates (editor em templates não funciona mesmo em casos simples). E o vim em si é mais rápido (pelo menos o editor via vin).

2. Compilar em vime com F7, visualizar resultados com :copen ou :clist/:cnext/... Com possibilidade de pular para o erro/aviso, ou seja, tudo é sério.

3. Combinações em todos os tipos de truques de codificador (ir para definição/...) procurar em 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. Ao passar arrays para uma função, substitua & por ref, caso contrário não mostrará ajuda de sinatura para essa função (void examp_fn(int ref ar[])). Vamos ignorar as reclamações de clang sobre os pontos ao desreferenciar as indicações, não é crítico.

5. Em cada arquivo de cabeçalho, incluem-se guardas, como este:

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

6. clang não gosta de #propert strict

7. Cada post com nova versão dos arquivos será marcado com #vim_as_mql_ide_X para facilitar a busca entre possíveis inundações, onde X é a versão.

8. vim.mqh contém declarações de função/constante. É claro que eu não copiei tudo, seria bom se alguém pudesse participar do processo e preencher as declarações (mas não alterar a formatação das existentes - travessões, comentários; para poder facilmente fazer uma diff). O vim.mqh atualizado pode ser enviado para mim, eu o fundirei em um só e o afixarei.

9. Como uma folha de consulta para vim você pode usar https://www.linux.org.ru/forum/general/15373588


#vim_as_mql_ide_0.

Arquivos anexados:
 

O novo lançamento, em minha opinião, tem mais vantagens interessantes do que os lançamentos oficiais ))

1. Pré-processador aparafusado de clang a µl. Agora você pode implementar qualquer truque de pré-processador, mesmo tais http://jhnet.co.uk/articles/cpp_magic. Todo o processo se parece com o seguinte: F7->preprocessador de clang->preprocessador/compilador de mql. Para passar mql para construções específicas do compilador mql (bem, para não incomodar e confundir o barulho com qualquer lixo, ele não gosta muito) faça o seguinte

#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

adicionar mqlcpp__ antes das diretrizes ao pré-processador μl, caso contrário, ele será tratado pelo primeiro pré-processador. Incluir os cabeçalhos da biblioteca std da seguinte forma

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

Por quê? Eles não incluem guardas. Se forem (três linhas extras em cada arquivo), você pode incluí-las como de costume.

2. Agora você pode desreferenciá-los de uma maneira normal, não da maneira que você quer que o MC os desreferencie.

this->member;
pntr->field;

3. Da mesma forma com a passagem de arrays em funções - agora você pode fazê-lo de uma forma normal, geralmente aceita

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

4) O código fonte com codificação utf-16 não funcionará (será se o código fonte contiver cirílico). Mas a recodificação em utf-8 é simples.

$ dos2unix file1 ...


A sintaxe é uma vantagem, você pode dizer. Prático para portar de/para µl + significa um bom suporte do lado do grampo (autocompletar, etc.).


ZS: como a busca no fórum em geral é fogo (a busca no fórum via motor de busca também não é ace), fará um link para a última versão na página principal do meu perfil.


#vim_as_mql_ide_1

Arquivos anexados:
 

E mais. Ao mesmo tempo, vou manter o tópico no topo, talvez os desenvolvedores o leiam.

A questão é que seu editor é realmente coxo (destaque de todas as ocorrências de uma variável, mudança automática do nome da variável/função durante todo o projeto, busca por todas as referências a uma variável, etc... bem, olhar para qualquer IDE "adulta" e comparar). O pré-processador parece estar lá, mas na verdade é um tronco. Quanto aos gabaritos, o mesmo se aplica aos gabaritos: ausência de gabaritos sem tipo de parâmetro, nenhuma possibilidade de especialização dos gabaritos. Talvez você possa planejar um desenvolvimento nessa direção algum dia?

 
Vladimir Simakov:

E mais. Vou manter o tópico em cima também, talvez os desenvolvedores o leiam.

A questão é que seu editor é realmente foleiro (destaque de todas as ocorrências de uma variável, substituição automática de nome de variável/função durante todo o projeto, busca por todas as referências a uma variável, etc., bem, olhe para qualquer IDE "adulta" e compare). O pré-processador parece estar lá, mas na verdade é um tronco. Quanto aos gabaritos, o mesmo se aplica aos gabaritos: ausência de gabaritos sem tipo de parâmetro, nenhuma possibilidade de especialização dos gabaritos. Talvez você possa planejar um desenvolvimento nesta direção algum dia?

Antes de chamá-lo de queijoso, seja gentil o suficiente para escrever uma lista de todas as funcionalidades do editor.

Você verá também que suas declarações ou estão desatualizadas ou completamente erradas.

 
Renat Fatkhullin:

Antes de chamá-lo de queijoso, você poderia ter a gentileza de escrever uma lista completa da funcionalidade do editor.

Ao mesmo tempo e você verá que suas declarações ou estão desatualizadas ou completamente erradas.

Editor:


Destacar todas as ocorrências de uma variável (alguém pode me dizer como fazer isso no editor?):

Substituição automática de variável/função do nome - é isso que quero dizer:


Procurar todas as referências a uma variável - não preciso apenas deste arquivo ou de todos os arquivos de diretório em geral, preciso mostrar todas as referências (análogo a Shift+F12 em MVS)

Isto é apenas a partir de minhas observações.

O pré-processador e os modelos são uma história diferente, mas estou certo (vou verificar a especialização do modelo novamente esta noite), não estou?
 
Certifique-se de acrescentar ao MetaEditor o "Tema escuro" (e o ajuste de cores em geral) e a conectividade com o github.
 
Renat Fatkhullin:

Antes de chamá-lo de queijoso, seja gentil o suficiente para escrever toda a lista de funcionalidades do editor.

Você verá que suas declarações ou estão desatualizadas ou completamente erradas.

Você está falando sério? Um modelo simples está além das capacidades do seu editor.

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

E não seria possível acrescentar esquemas de cores por tantos anos (estou interessado no escuro, não suporto o claro)? E macros in vime, não posso viver sem eles...

Mas eu não estou aqui para o desenvolvimento do editor, há tantos já prontos em volta, por que reinventar?

 
Quanto código eu escrevi em ME em 6 anos de programação contínua nele! Eu sempre gostei. Mas já tentei outras IDEs. Não há nada a mais aí. E eu precisava muito pouco disso, de qualquer forma. É por isso que eu não apoio reivindicações inchadas. Tudo parece uma crítica à bola por uma equipe de jogadores de futebol)). (como a cor errada, salta tristemente...)
 

Rapazes, não se armem em meta-editores comigo, na verdade.

Pessoalmente, eu gosto disso.

Bem, esta também é legal.

 
Vladimir Simakov:

Editor:


Destaque de todas as ocorrências de uma variável (alguém pode me dizer como fazer isso no editor?):

Substituição automática de variável/função do nome - é isso que quero dizer:


Procurar todas as referências a uma variável - não preciso apenas deste arquivo ou de todos os arquivos no diretório em geral, preciso mostrar todas as referências (análogo a Shift+F12 no MVS)

Isto é apenas a partir de minhas observações.

O pré-processador e os modelos são uma história diferente, mas estou certo (vou verificar a especialização do modelo novamente esta noite), não estou?

É possível chamar "aquilo" por hotkeys??? Acho que é ctrl+h se de todo. E sua mãe não permite pressionar ctrl+h no editor mql? Antes de fazer uma reclamação, tente variantes não descritas na ajuda.

Mas com o destaque de todas as variáveis, eu concordo. Não é um problema, mas também não é fatal sem ele. Assim como eu não sofro sem desabar parte do código.

Aqui está outro pequeno detalhe: as teclas do mouse "Para frente/para trás" funcionam no editor de mql como em outras aplicações.

 
Alexey Viktorov:

Você pode chamar "isso" com uma tecla de atalho???? Acho que é ctrl+h, se é que existe algum. Sua mãe não permite que você pressione ctrl+h no editor mql? Antes de fazer uma reclamação, tente variantes não descritas na ajuda.

Mas com o destaque de todas as variáveis, eu concordo. Não é um problema, mas também não é fatal sem ele. E eu não sofro sem que uma parte do código caia também.

Mais uma pequena dica: botões do mouse "Para frente/para trás" funcionam tanto no editor de mql quanto em outras aplicações.

Somente no editor ele mudará somente o arquivo atual, enquanto eu estava falando sobre todo o projeto. Faça-me a vontade, você nomeou mal um método, e está em 90% dos arquivos em sua biblioteca é chamado mais de uma vez, e o número de arquivos já é de dezenas. Portanto, sim, 5-10 minutos de trabalho de renome em todos os lugares, mas quando em outras IDE você está fazendo isso na mosca...