将Vim作为mql的理想工具

 

总之,我想放弃元编辑器。结果很好,我想和你分享。

要求:1.操作系统 - linux(适合Windows,但不适合我);2 - 安装dos2unix工具;3 - 安装clangd(LSP服务器);4 - vimhttps://github.com/junegunn/vim-plug 的软件包管理器vim-plug。5- 终端目录"~/.wine/drive_c/Program Files/MetaTrader 5";6 - 我使用控制台vim,我还没有测试它在goo的工作情况。

附上必要的文件。指示。

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)(它必须包含在每个脚本/expert中)。

8.在有scripts/experts的目录中,创建内容为compile_flags.txt的文件。

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


就这样了。现在我们根本不需要接触元编辑器,创建文件,在vime中编辑,也在那里编译。我们需要注意的是。

1.它是比自动完成更先进的工具,与元编辑器有关,clangd既不能被狡猾的macrosnoy混淆,也不能被模板混淆(模板上的编辑器即使在简单的情况下也不起作用)。而vim本身也更快(至少是通过vin的编辑器)。

2.用F7在vime编译,用: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包含函数/常量声明。当然,我没有复制所有的东西,如果有人能连接到进程中,并扔进声明(但不要改变现有的格式--缩进、注释;以便能够容易地做出差异),那就更好了。 你可以把更新后的vim.mqh发给我,我会把它合并成一个,然后发布。

9.作为vim的小抄,你可以使用https://www.linux.org.ru/forum/general/15373588


#vim_as_mql_ide_0。

附加的文件:
 

在我看来,新发布的版本比官方发布的版本有更多有趣的Plushies ))

1.将clang预处理程序拧到μl上。现在你可以实现任何预处理器的技巧,甚至是这种http://jhnet.co.uk/articles/cpp_magic。 整个过程看起来像这样:F7->clang预处理器->mql预处理器/编译器。为了将mql传递给mql编译器的特定结构(好吧,不要用任何垃圾来烦扰和迷惑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

在μl预处理器的指令前添加mqlcpp__,否则它将被第一个预处理器处理。包括std库的头文件,如下所示

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

为什么?他们没有包括守卫。如果是这样(每个文件中多出三行),你可以像往常一样包括它们。

2.现在你可以用正常的方式来解除对指针的引用,而不是用你想让MC解除引用的方式。

this->member;
pntr->field;

3.与将数组传入函数的方式相同--你现在可以用正常的、普遍接受的方式来做了

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

4)具有utf-16编码的源代码将无法工作(如果源代码中含有西里尔文,则会如此)。但用utf-8重新编码很简单。

$ dos2unix file1 ...


语法是一个加分项,你可以说。便于移植到/从µl+意味着来自clang方面的良好支持(自动完成等)。


ZS:由于论坛搜索一般都是火的(通过搜索引擎搜索论坛也不是王牌),将在我的资料主页上做一个最新版本的链接。


#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.

还有,这么多年来,能不能不增加颜色方案(我对深色的感兴趣,我受不了浅色的)?还有vime中的宏,我不能没有它们......。

但我不是来开发编辑器的,周围有那么多现成的编辑器,为什么要重新发明。

 
在6年的持续编程中,我在ME中写了多少代码!?我一直很喜欢它。不过我也试过其他IDE。那里没有多余的东西。而我真正需要的东西很少。这就是为什么我不支持臃肿的说法。这一切看起来就像一队足球运动员对球的批评))。(如错误的颜色,可悲地反弹...)
 

伙计们,不要把所有的元编辑放在我身上,真的。

就我个人而言,我喜欢它。

嗯,这个也很酷。

 
Vladimir Simakov:

编辑。


突出显示一个变量的所有出现(谁能告诉我如何在编辑器中这样做?)

自动变量/函数名称替换--这就是我的意思。


搜索对一个变量的所有引用--我不只需要这个文件或一般目录中的所有文件,我需要显示所有引用(类似于MVS中的Shift+F12)。

这只是来自我的观察。

预处理器和模板是另一回事,但我是对的(我今晚再检查一下模板的专业化),不是吗?

是否可以通过热键调用 "它"?我认为是ctrl+h,如果有的话。你妈妈不允许在mql编辑器中按ctrl+h? 在你提出投诉之前,请尝试帮助中没有描述的变体。

但随着所有变量的凸显,我同意。不是一个问题,但没有它也不是致命的。就像我没有塌陷的部分代码一样,我也不吃亏。

这里还有一个小插曲:鼠标的 "前进/后退 "键在mql编辑器中的作用和在其他应用程序中的作用一样。

 
Alexey Viktorov:

是否有一个热键来调用 "它"?我认为是ctrl+h,如果有的话。你妈妈不允许你在mql编辑器中按ctrl+h吗?在你提出投诉之前,请尝试帮助中没有描述的变体。

但随着所有变量的凸显,我同意。不是一个问题,但没有它也不是致命的。而且,我也不会在不折叠部分代码的情况下受到影响。

还有一个小提示:鼠标按钮 "前进/后退 "在mql编辑器中和在其他应用程序中一样有效。

只有在编辑器中,它将只改变当前文件,而我说的是整个项目。拜托,你给这个方法起的名字太差了,而且它在你的库中有90%的文件被调用了不止一次,而文件的数量已经有几十个了。因此,是的,在所有地方都有5-10分钟的重命名工作,但当在其他IDE中,你是在飞行中进行的......
原因: