mql için bir ide olarak Vim

 

Genel olarak, metaeditörün reddedilmesi arzu edilir. Çok iyi oldu, paylaşmak istiyorum.

Gereksinimler: 1. OS - linux (Windows için mümkündür, ancak benim için değil); 2 - yüklü dos2unix yardımcı programı; 3 - kurulu clangd(LSP sunucusu); 4 - vim için paket yöneticisi vim-plug https://github.com/junegunn/vim-plug. 5 - terminal dizini "~/.wine/drive_c/Program Files/MetaTrader 5"; 6 - Konsol vim kullanıyorum, bir erkekle nasıl olacak - kontrol etmedim.

Fragman gerekli dosyaları içerir. Talimat:

1. ~ .vimrc'yi atıyoruz (peki, ya da kendinize kopyalayın). Vim'i başlatın, çalıştırın: PlugInstall

2. Vim'i yeniden başlatın, yürütün: CocConfig, oraya kopyalayın

{
     "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. coc.nvim_vimrc dosyasını ~/.vim/plugged/ dizinine kopyalayın

4. compile_mql dosyasını PATH yollarından birine kopyalayın (gerekirse sahibi/grubu değiştirin, yürütme izinleri verin).

5. mql derleyicisi, yollarda boşluk olduğunda derlemeyi reddediyor, bir bağlantı oluşturun

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

6. ~/.wine/MQL5/Include içinde içerikle birlikte compile_flags.txt oluşturun ( YOUR_HOME_DIR yerine ana dizininizi girin, ${HOME} çalışmıyor):

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

7. vim.mqh dosyasını Include alt dizinine atın (Include/myincl bende var) (her script/uzmana dahil edilmelidir).

8. Komut dosyalarının/uzmanların bulunduğu dizinde, içerikle birlikte compile_flags.txt oluşturun:

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


Bak bu kadar. Artık metaeditöre hiç dokunamazsınız, bir dosya oluşturduk, wim'de düzenledik, orada derliyoruz. Belirtilmelidir:

1. Bu, otomatik tamamlamadan çok daha gelişmiş bir araçtır ve meta düzenleyicide bitişiktir, clangd zor makroları veya şablonları karıştırmaz (şablonlardaki düzenleyici basit durumlarda bile çalışmaz). Eh, vim'in kendisi daha hızlıdır (en azından asma aracılığıyla editör).

2. Vim'de F7 aracılığıyla derleyin, sonuçları :copen veya :clist/:cnext/... yoluyla görüntüleyin, bir hataya/uyarıya atlama yeteneği, ör. her şey ciddi.

3. Her türden kodlayıcının kombinasyonları için bkz. coc.nvim_vimrc (tanım/... bölümüne gidin), ana:

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. Dizileri işlevlere geçirirken & yerine ref ile değiştiririz, aksi takdirde bu işlev için yapay yardımı göstermez (void Examp_fn(int ref ar[]).Clang'ın işaretçileri referanstan çıkarırken noktalarla ilgili şikayetleri kritik değildir.

5. Her başlık dosyasında aşağıdaki gibi bir içerme koruması yaparız:

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

6. clang #propert katılığını sevmez

7. Dosyaların yeni bir sürümünü içeren her gönderi, olası sel arasında kolay arama için #vim_as_mql_ide_X hashtag'i ile çerçevelenecektir, burada X sürümdür.

8. vim.mqh, işlev/sabit bildirimleri içerir. Doğal olarak, her şeyi kopyala-yapıştır yapmadım, biri sürece bağlanıp orada bildirimler atsa iyi olurdu (ancak mevcut biçimlendirmeyi değiştirmeyin - girintiler, yorumlar; kolayca fark yaratabilmek için). Güncellenen vim.mqh'yi bana gönderebilirsiniz, onu bir araya getirip yayınlayacağım.

9. Vim için bir hile sayfası olarak https://www.linux.org.ru/forum/general/15373588 adresini alabilirsiniz.


#vim_as_mql_ide_0

Dosyalar:
 

Yeni sürüm, bence, güzellikler resmi sürümlerden daha ilginç ))

1. Ön işlemciyi clang'dan µl'ye çevirdim. Artık herhangi bir önişlemci hilesini uygulayabilirsiniz, bu http://jhnet.co.uk/articles/cpp_magic bile. Tüm süreç şöyle görünür: F7->clang önişlemcisi->mql önişlemcisi/derleyicisi. Belirli yapıların µl'sini derleyiciye iletmek için (peki, çıldırtmamak ve clang'ı her türlü çöple karıştırmamak için gerçekten sevmiyor) bunu yapın

 #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

mqlcpp__'yi önişlemciye yönergelerden önce ekleriz, aksi takdirde ilk önişlemci onu işlemeye başlar. std kitaplığındaki başlıklar aşağıdakileri içerir

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

Niye ya? Korumaları dahil değil. Varsa (her dosyada üç ek satır), normal şekilde dahil edilebilir.

2. Artık işaretçileri MK'de istediğiniz şekilde değil, normal bir şekilde kaldırabilirsiniz.

 this ->member;
pntr->field;

3. Dizileri işlevlere geçirmeye benzer - şimdi bunu normal, genel kabul görmüş bir şekilde yapabilirsiniz

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

4. utf-16 kodlamalı kaynaklar çalışmayacaktır (kaynaklarda Kiril varsa olacaktır). Ancak utf-8'e dönüştürmek kolaydır

$ dos2unix file1 ...


Sözdiziminin olumlu olduğu ortaya çıktı, denilebilir. µl + 'ya / 'den taşıma için uygun, clang'dan iyi destek (otomatik tamamlama, vb.) anlamına gelir.


not: çünkü forumda arama genelde yanıyor (forumda arama motoru aracılığıyla arama da buz değil), profilimin ana sayfasındaki en son sürüme bağlantı vereceğim.


#vim_as_mql_ide_1

Dosyalar:
 

artı. Aynı zamanda konuyu en üstte tutacağım, belki geliştiriciler okur.

Mesele şu ki, editörünüz gerçekten perişan durumda (bir değişkenin tüm oluşumlarını vurgulama, tüm projede bir değişkenin / fonksiyonun adını otomatik olarak düzeltme, bir değişkene tüm referansları arama vb. " IDE ve karşılaştırın). Önişlemci orada görünüyor, ama aslında bir güdük. Şablonlar için aynı şey: tür olmayan şablon parametresi yoktur, şablon uzmanlaşması olasılığı yoktur. Bu yönde bir gelişme planlayabilir misiniz?

 
Vladimir Simakov :

artı. Aynı zamanda konuyu en üstte tutacağım, belki geliştiriciler okur.

Mesele şu ki, editörünüz gerçekten perişan durumda (bir değişkenin tüm oluşumlarını vurgulamak, tüm projede bir değişkenin / fonksiyonun adını otomatik olarak düzeltmek, bir değişkene tüm referansları aramak vb.), genel olarak, herhangi bir "yetişkin" e bakarız " IDE ve karşılaştırın). Önişlemci orada görünüyor, ama aslında bir güdük. Şablonlar için aynı şey: tür olmayan şablon parametresi yoktur, şablon uzmanlaşması olasılığı yoktur. Bu yönde bir gelişme planlayabilir misiniz?

Bana zavallı demeden önce, lütfen editörün işlevlerinin tam listesini yazın.

Aynı zamanda ifadelerinizin ya güncelliğini yitirdiğini ya da tamamen hatalı olduğunu göreceksiniz.

 
Renat Fatkhullin :

Bana zavallı demeden önce, lütfen editörün işlevlerinin tam listesini yazın.

Aynı zamanda ifadelerinizin ya güncelliğini yitirdiğini ya da tamamen hatalı olduğunu göreceksiniz.

Editör:


Bir değişkenin tüm oluşumlarını vurgulama (biri bana bunu editörde nasıl yapacağımı söyleyebilir mi?):

Bir değişken/fonksiyon adının otomatik olarak değiştirilmesi - Bundan bahsediyorum:


Bir değişkene giden tüm bağlantıları ara - Yalnızca bu dosyaya veya dizindeki tüm dosyalara ihtiyacım yok, tüm bağlantıları göstermem gerekiyor (MVS'de Shift+F12'ye benzer)

Bu sadece benim yorumlarım.

Önişlemciye ve şablonlara göre - bu başka bir operadan, ama haklı mıyım (şablonun uzmanlığını akşam tekrar kontrol edeceğim)?
 
MetaEditor'a 'Karanlık tema' (ve genel olarak renk ayarları) ve github bağlantısını eklemek gereklidir.
 
Renat Fatkhullin :

Bana zavallı demeden önce, lütfen editörün işlevlerinin tam listesini yazın.

Aynı zamanda ifadelerinizin ya güncelliğini yitirdiğini ya da tamamen hatalı olduğunu göreceksiniz.

Ciddi misin? Evet, basit bir şablon editörünüzün gücünün ötesinde

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

Ve gerçekten, bunca yıldan sonra, renk şemaları eklemek imkansızdı (karanlık olanla ilgileniyorum, açık olana dayanamıyorum)? Ve Wim'deki makrolar, onlarsız yaşayamam, ...

Ama burada editörün geliştirilmesini savunmuyorum, etrafta çok fazla hazır olan var, neden yeniden icat edeyim.

 
6 yıllık sürekli programlama için ME'de ne kadar kod yazdım! Onu her zaman sevdim. Yine de, diğer IDE'leri denedim. Gereksiz bir şey yok. Ve gerçekten çok az şeye ihtiyacım vardı. Bu nedenle, şişirilmiş iddialar desteklenmemektedir. Hepsi bir takım futbolcuların topu eleştirmesi gibi.)) (Yanlış renk gibi, üzülerek zıplamak gibi...)
 

Beyler, meta editörü gerçekten zorlamayın.

Şahsen ben beğendim.

Eh, bu seçenek de harika.

 
Vladimir Simakov :

Editör:


Bir değişkenin tüm oluşumlarını vurgulama (biri bana bunu editörde nasıl yapacağımı söyleyebilir mi?):

Bir değişken/fonksiyon adının otomatik olarak değiştirilmesi - Bundan bahsediyorum:


Bir değişkene giden tüm bağlantıları ara - Yalnızca bu dosyaya veya dizindeki tüm dosyalara ihtiyacım yok, tüm bağlantıları göstermem gerekiyor (MVS'de Shift+F12'ye benzer)

Bu sadece benim yorumlarım.

Önişlemciye ve şablonlara göre - bu başka bir operadan, ama haklı mıyım (şablonun uzmanlığını akşam tekrar kontrol edeceğim)?

Kısayol tuşlarıyla "onu" çağırmak mümkün mü??? Bence varsa ctrl+h olur. Ve annem mql düzenleyicide ctrl + h tuşlarına basılmasına izin vermiyor mu? Bir talepte bulunmadan önce yardımda açıklanmayan seçenekleri deneyin.

Burada tüm değişkenlerin vurgulanması ile aynı fikirdeyim. Acıtmayacak, ama onsuz ölümcül değil. Kodun bir kısmını katlamadan da acı çekmiyorum.

Size küçük bir ipucu vereceğim: "İleri\Geri" fare tuşları mql düzenleyicide ve diğer uygulamalarda çalışır.

 
Alexey Viktorov :

Kısayol tuşlarıyla "onu" çağırmak mümkün mü??? Bence varsa ctrl+h olur. Ve annem mql düzenleyicide ctrl + h tuşlarına basılmasına izin vermiyor mu? Bir talepte bulunmadan önce yardımda açıklanmayan seçenekleri deneyin.

Burada tüm değişkenlerin vurgulanması ile aynı fikirdeyim. Acıtmayacak, ama onsuz ölümcül değil. Kodun bir kısmını katlamadan da acı çekmiyorum.

Size küçük bir ipucu vereyim: "İleri\Geri" fare tuşları mql düzenleyicide ve diğer uygulamalarda çalışır.

Sadece editörde sadece mevcut dosyayı değiştirecek ve ben tüm projeden bahsediyordum. Tahmin, yöntemi başarısız bir şekilde adlandırdınız ve kitaplığınızdaki dosyaların %90'ında çağrılıyor ve sadece bir kez değil, dosya sayısı zaten düzinelerce oldu. Yani evet, 5-10 dakika. yeniden adlandırma her yerde çalışır, ancak başka bir IDE'de yaptığınız gibi ...
Neden: