mql의 ide로서의 Vim

 

일반적으로 metaeditor'를 거부하는 것이 바람직합니다. 그것은 매우 잘 나타났습니다, 나는 공유하고 싶습니다.

요구 사항: 1. OS - Linux(Windows의 경우 가능하지만 저에게는 해당되지 않음); 2 - dos2unix 유틸리티를 설치했습니다. 3 - 설치된 clangd(LSP 서버); 4 - vim용 패키지 관리자 vim-plug https://github.com/junegunn/vim-plug. 5 - 터미널 디렉토리 "~/.wine/drive_c/Program Files/MetaTrader 5"; 6 - 나는 콘솔 vim을 사용하는데, 남자와 어떻게 될 것인가 - 나는 그것을 확인하지 않았다.

트레일러에는 필요한 파일이 포함되어 있습니다. 지침:

1. 우리는 ~ .vimrc를 집어넣습니다. vim을 시작하고 :PlugInstall을 실행합니다.

2. vim을 다시 시작하고 :CocConfig를 실행하고 거기에 복사하십시오.

{
     "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를 ~/.vim/plugged/에 복사합니다.

4. compile_mql을 PATH 경로 중 하나로 복사합니다(필요한 경우 소유자/그룹을 변경하고 실행 권한을 부여).

5. mql 컴파일러는 경로에 공백이 있으면 컴파일을 거부하고 링크를 만듭니다.

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

6. ~/.wine/MQL5/Include에서 내용과 함께 compile_flags.txt를 생성합니다(your_HOME_DIR 대신 홈 디렉토리를 입력합니다. ${HOME}은 작동하지 않습니다):

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

7. vim.mqh를 Include 하위 디렉토리에 넣습니다(Include/myincl이 있습니다)(모든 스크립트/전문가에 포함되어야 함).

8. scripts/experts가 있는 디렉토리에서 다음 내용으로 compile_flags.txt를 만듭니다.

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


그게 다야. 이제 메타에디터를 전혀 건드릴 수 없습니다. 파일을 만들고 wim에서 편집하고 거기에서 컴파일합니다. 다음 사항에 유의해야 합니다.

1. 이것은 자동 완성보다 훨씬 고급 도구이며 메타 편집기에서 인접하며 clangd는 까다로운 매크로나 템플릿을 혼동하지 않습니다(템플릿의 편집기는 간단한 경우에도 작동하지 않습니다). 글쎄, vim 자체는 더 빠릅니다(적어도 포도나무를 통한 편집기).

2. F7을 통해 vim에서 컴파일하고 :copen 또는 :clist/:cnext/...를 통해 결과를 확인하고 오류/경고로 이동할 수 있습니다. 모든 것이 심각합니다.

3. 모든 종류의 코더 조합에 대해서는 coc.nvim_vimrc를 참조하십시오(정의/...로 이동), 기본:

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. 배열을 함수에 전달할 때 &를 ref로 교체합니다. 그렇지 않으면 이 함수에 대한 sinature 도움말을 표시하지 않습니다. (void examp_fn(int ref ar[]) 포인터를 역참조할 때 점에 대한 Clang의 불만은 중요하지 않습니다.

5. 각 헤더 파일에서 다음과 같이 인클루드 가드를 만듭니다.

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

6. clang은 #propert strict를 좋아하지 않습니다.

7. 파일의 새 버전이 있는 각 게시물은 #vim_as_mql_ide_X 해시태그로 구성되어 가능한 홍수 중에서 쉽게 검색할 수 있습니다. 여기서 X는 버전입니다.

8. vim.mqh는 함수/상수 선언을 포함합니다. 당연히 모든 것을 복사하여 붙여넣지 않았습니다. 누군가 프로세스에 연결하고 선언을 던지면 좋을 것입니다(그러나 기존 형식(들여쓰기, 주석, 쉽게 diff를 만들 수 있도록)을 변경하지 마십시오). 업데이트된 vim.mqh를 저에게 보내주시면 하나로 병합하여 게시하겠습니다.

9. vim에 대한 치트 시트로 https://www.linux.org.ru/forum/general/15373588 을 사용할 수 있습니다.


#vim_as_mql_ide_0

파일:
 

내 생각에 새 릴리스는 공식 릴리스보다 케이크가 더 흥미 롭습니다. ))

1. 나는 clang에서 µl로 전처리기를 망쳤습니다. 이제 http://jhnet.co.uk/articles/cpp_magic 을 포함한 모든 전처리기 트릭을 구현할 수 있습니다. 전체 프로세스는 F7->clang 전처리기->mql 전처리기/컴파일러와 같습니다. 특정 구성의 컴파일러 µl에 µl을 전달하려면(글쎄, clang을 모든 종류의 쓰레기와 화나게 하고 혼동하지 않기 위해 그는 그것을 좋아하지 않습니다) 다음을 수행하십시오.

 #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__를 추가합니다. 그렇지 않으면 첫 번째 전처리기가 처리를 시작합니다. std 라이브러리의 헤더에는 다음이 포함됩니다.

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

왜요? 그들은 가드를 포함하지 않습니다. (각 파일에 3개의 추가 행이 있는 경우) 일반적인 방식으로 포함될 수 있습니다.

2. 이제 MK에서 원하는 방식이 아닌 일반적인 방식으로 포인터를 역참조할 수 있습니다.

 this ->member;
pntr->field;

3. 배열을 함수에 전달하는 것과 유사합니다. 이제 일반적으로 허용되는 일반적인 방식으로 수행할 수 있습니다.

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

4. utf-16 인코딩이 있는 소스는 작동하지 않습니다(소스에 키릴 문자가 있는 경우 작동). 그러나 utf-8로 변환하는 것은 쉽습니다.

$ dos2unix file1 ...


구문은 긍정적인 것으로 판명되었습니다. µl +로/에서 이식하기에 편리하다는 것은 clang(자동 완성 등)에서 좋은 지원을 의미합니다.


추신: 왜냐하면 포럼에서 검색은 일반적으로 불(검색 엔진을 통해 포럼에서 검색도 얼음이 아닙니다), 내 프로필의 메인 페이지에서 최신 버전으로 링크하겠습니다.


#vim_as_mql_ide_1

파일:
 

플러스산. 동시에 나는 그 주제를 맨 위에 둘 것이고, 아마도 개발자들이 그것을 읽을 것입니다.

요점은 편집기가 정말 비참하다는 것입니다(변수의 모든 발생을 강조 표시하고, 전체 프로젝트 에서 변수/함수의 이름을 자동 수정하고, 변수에 대한 모든 참조를 검색하는 등). 일반적으로 우리는 모든 "성인 " IDE 및 비교). 전처리기가 있는 것 같지만 실제로는 그루터기입니다. 템플릿의 경우에도 마찬가지입니다. 형식이 아닌 템플릿 매개변수가 없고 템플릿을 특수화할 가능성도 없습니다. 이 방향으로 개발을 계획할 수 있습니까?

 
Vladimir Simakov :

플러스산. 동시에 나는 그 주제를 맨 위에 둘 것이고, 아마도 개발자들이 그것을 읽을 것입니다.

요점은 편집자가 정말 비참하다는 것입니다(변수의 모든 발생을 강조 표시하고, 전체 프로젝트에서 변수/함수의 이름을 자동 수정하고, 변수에 대한 모든 참조를 검색하는 등). 일반적으로 우리는 모든 "성인 " IDE 및 비교). 전처리기가 있는 것 같지만 실제로는 그루터기입니다. 템플릿의 경우에도 마찬가지입니다. 형식이 아닌 템플릿 매개변수가 없고 템플릿을 특수화할 가능성도 없습니다. 이 방향으로 개발을 계획할 수 있습니까?

저를 가난하다고 부르기 전에 편집기의 전체 기능 목록을 작성하십시오.

동시에 귀하의 진술이 구식이거나 완전히 잘못된 것임을 알 수 있습니다.

 
Renat Fatkhullin :

저를 가난하다고 부르기 전에 편집기의 전체 기능 목록을 작성하십시오.

동시에 귀하의 진술이 구식이거나 완전히 잘못된 것임을 알 수 있습니다.

편집자:


변수의 모든 항목 강조 표시(편집기에서 이 작업을 수행하는 방법을 알려줄 수 있는 사람이 있습니까?):

변수/함수 이름의 자동 교체 - 이에 대해 이야기하고 있습니다.


변수에 대한 모든 링크 검색 - 이 파일 또는 디렉토리의 모든 파일만 필요하지 않습니다. 모든 링크를 표시해야 합니다(MVS의 Shift+F12와 유사).

이것은 내 의견일 뿐입니다.

전처리기 및 템플릿에 따르면 - 이것은 다른 오페라에서 가져온 것이지만 제 말이 맞습니까(저녁에 템플릿의 전문화를 다시 확인하겠습니다)?
 
'다크 테마'(및 일반적으로 색상 설정)를 추가하고 github에 대한 연결을 MetaEditor에 추가해야 합니다.
 
Renat Fatkhullin :

저를 가난하다고 부르기 전에 편집기의 전체 기능 목록을 작성하십시오.

동시에 귀하의 진술이 구식이거나 완전히 잘못된 것임을 알 수 있습니다.

진심이야? 예, 편집자를 위한 기본 템플릿은 강력하지 않습니다.

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

그리고 정말 오랜 시간이 지난 후에 색 구성표를 추가하는 것이 불가능했습니다(저는 어두운 색에 관심이 있고 밝은 색은 참을 수 없습니다)? 그리고 Wim의 매크로, 그것들 없이는 살 수 없습니다 ...

하지만 저는 여기에서 편집기의 개발을 옹호하는 것이 아닙니다. 이미 만들어진 것이 너무 많은데 왜 재창조해야 합니까?

 
ME에서 6년 동안 계속 프로그래밍하면서 얼마나 많은 코드를 작성했는지! 나는 항상 그를 좋아했다. 그러나 다른 IDE를 시도했습니다. 불필요한 것은 없습니다. 그리고 나는 정말로 아주 조금 필요했습니다. 따라서 부풀려진 주장은 지원하지 않습니다. 마치 축구선수 팀이 공을 비판하는 것과 같습니다.)) (잘못된 색깔처럼, 슬프게 점프 ...)
 

여러분, 메타에디터를 강요하지 마세요.

개인적으로 마음에 듭니다.

글쎄,이 옵션도 멋지다.

 
Vladimir Simakov :

편집자:


변수의 모든 항목 강조 표시(편집기에서 이 작업을 수행하는 방법을 알려줄 수 있는 사람이 있습니까?):

변수/함수 이름의 자동 교체 - 이에 대해 이야기하고 있습니다.


변수에 대한 모든 링크 검색 - 이 파일 또는 디렉토리의 모든 파일만 필요하지 않습니다. 모든 링크를 표시해야 합니다(MVS의 Shift+F12와 유사).

이것은 내 의견일 뿐입니다.

전처리기 및 템플릿에 따르면 - 이것은 다른 오페라에서 가져온 것이지만 제 말이 맞습니까(저녁에 템플릿의 전문화를 다시 확인하겠습니다)?

단축키로 "그것"을 호출하는 것이 가능합니까??? 존재한다면 ctrl + h라고 생각합니다. 그리고 엄마는 mql 편집기에서 ctrl + h를 누르는 것을 허용하지 않습니까? 청구하기 전에 도움말에 설명되지 않은 옵션을 시도하십시오.

여기에 모든 변수가 강조 표시되어 동의합니다. 아프지는 않지만 그것 없이는 치명적이지 않습니다. 뿐만 아니라 코드의 일부를 접지 않고, 나는 고통받지 않습니다.

약간의 힌트를 드리겠습니다. 마우스 키 "앞으로\뒤로"는 mql 편집기와 다른 응용 프로그램에서 작동합니다.

 
Alexey Viktorov :

단축키로 "그것"을 호출하는 것이 가능합니까??? 존재한다면 ctrl + h라고 생각합니다. 그리고 엄마는 mql 편집기에서 ctrl + h를 누르는 것을 허용하지 않습니까? 청구하기 전에 도움말에 설명되지 않은 옵션을 시도하십시오.

여기에 모든 변수가 강조 표시되어 동의합니다. 아프지는 않지만 그것 없이는 치명적이지 않습니다. 뿐만 아니라 코드의 일부를 접지 않고, 나는 고통받지 않습니다.

약간의 힌트를 드리겠습니다. 마우스 키 "앞으로\뒤로"는 mql 편집기와 다른 응용 프로그램에서 작동합니다.

에디터에서만 현재 파일만 변경되는데, 저는 전체 프로젝트 에 대해 이야기하고 있었습니다. 당신은 메서드 이름을 잘못 지정했고 라이브러리에 있는 파일의 90%에서 한 번만 호출되는 것이 아니라 파일 수가 이미 수십 개로 늘어났습니다. 예, 5-10분입니다. 이름 바꾸기는 모든 곳에서 작동하지만 다른 IDE에서는 다음과 같이 수행합니다.
사유: