将Vim作为mql的理想工具 - 页 10

 
Dmitry Fedoseev:

想问问什么是vim...


正是它,无法关闭它,吓坏了,删除了它。

我不知道谁想出了这个混蛋,我也不想知道。

 

不,μl是某种底层语言。为什么他们要用这种改进方式把它搞得如此糟糕?我开始用自己的东西,结果发现模板特别,真是把水管气坏了。

template <typename T>
class Q {
public:
  void fn() {}
};
template <typename T> void Q<T>::fn() {}  // запрещено по плюсовому
template <typename T> void Q::fn() {}

难道他们就不能像职业选手那样愚蠢地做吗?总的来说,我已经厌倦了在所有这些芯片中挣扎,并使用流编辑器来修改代码。也许有人会觉得有用 - 附上vim.mqh,其中有µl的所有声明。

附加的文件:
vim.mqh  87 kb
 
Vict:

不,μl是某种底层语言。为什么他们要把它搞得如此糟糕,进行所有这些类型的改进?我开始用自己的东西,结果发现模板特别,真是把水管气坏了。

难道他们就不能像职业选手那样愚蠢地做吗?总的来说,我已经厌倦了在所有这些芯片中挣扎,并使用流编辑器来修改代码。也许有人会觉得有用 - 附上vim.mqh和所有µl声明。

也许你应该访问一个不同的论坛?
或者,也许你只是不知道如何正确地表达你的主张--不使用学校食堂的外号?
 

伙计们,我决定把它完成。主要的变化是

1.声明模板类的成员函数,因为它们应该是。

template <typename Tr_, typename Cbspec_>
double Trend3_cml<Tr_, Cbspec_>::get_breakprice() {}

2.我决定不对std文件做任何严肃的编辑,只是在打开它们的时候把它们从clang解析器中切断。

#ifndef  VIM
#include <Object.hh>
#endif

如果你想从那里得到类型提示,你必须做相应的声明(我不需要)。


README文件。

//--------------------------------------------------------------
// Описание                                                    |
//--------------------------------------------------------------
1. Компиляция (общая схема процесса)
   F7->clang препроцессор->правка исходников потоковыми
   редакторами(во временном файле)->mql препроцессор/компилятор.
   Просмотр ошибок :copen или :clist
2. Правка исходников. Цель - максимально писать в c++ подобном
   стиле (дабы угодить clang анализатору, да и приятней как-то),
   для этого (исходники правятся автоматически при каждой
   компиляции, во временном файле):
   * меняем -> на .
   * добавляется амперсанд при передаче массива в функцию
   * убираем угловые скобки при объявлении функции-члена
     шаблонного класса (во второй строке)
   -------------code begin-----------
   template <typename Tr_, typename Cbspec_>
   double Trend3_cml<Tr_, Cbspec_>::get_breakprice() {}

   void f(Type ar[]) {}

   ptr->call()
   -------------code end-------------
3. Рекомендую использовать расширение hh для заголовочных
   файлов, так будет подсказка при вводе имени файла при
   его включении.
4. Запись мкл специфичных конструкций
   Во время написания кода в виме определён макрос VIM,
   благодаря которому можно прятать от clang анализатора
   ошибочные (с его точки зрения) конструкции:
   -------------code begin-----------
   #ifndef VIM
   input int i;  // input мкл специфичная
   #else
   int i;
   #endif
   -------------code end-------------
   В такое же макроусловие оборачиваем включение файлов
   стандартной библиотеки (там может быть что угодно,
   clang анализатор может споткнуться).
   -------------code begin-----------
   #ifndef VIM
   #include <Object.hh>
   #endif
   -------------code end-------------
5. Передача директив мкл препроцессору. Во время правки
   исходников префикс mqlcpp_ будет удалён.
   -------------code begin-----------
   #ifndef VIM
   mqlcpp_#property strict
   #endif
   -------------code end-------------
6. При первой компиляции в файлы стандартной библиотеки
   добавляются include guard'ы (первая компиляция - нет
   guard'а в Object.mqh). Пользовательские файлы не
   модифицируются, поддиректории MQL/Include с пользовательскими
   данными задаются через compile_mql::user_include_subdir. В свои
   mqh добавлять guard'ы самостоятельно. Также при первой
   компиляции будет изменено расширение файлов стд на hh,
   если compile_mql::subst_std_extension='1'.
7. Подавление предупреждений мкл компилятора. Коды
   предупреждений задаются через compile_mql::waring_black_list
8. Автокомплит, переход к определению, ... реализованы через 
   clangd(lsp сервер)<--> coc(lsp клиент). Основные сочетания
   клавиш
     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
9. Кодировка исходников должна быть utf-8 (mqh из std
   конвертируются автоматически). Для пользовательских файлов
   $ dos2unix file1 file2 ...
//--------------------------------------------------------------
// Установка                                                   |
//--------------------------------------------------------------
1. Зависимости: clang, clangd, dos2unix, nodejs, neovim
2. Cоздаём ссылку без пробелов на Meta Trader/MQL, указываем
   путь к ссылке в compile_mql::mql_link
   (дефолтно mql_link="$HOME/.wine/MQL5")
3. Копируем файлы в соответствующие директории (compile_mql, ..).
   vim.hh кидаем в поддиректорию Include (у меня это
   Include/myincl) (он должен быть включён в каждый 
   скрипт/эксперт).
4. В виме выполнить :PlugInstall
5. В MQL/Include создаём compile_flags.txt с содержимым (вместо
   YOUR_HOME_DIR вписать свою домашнюю директорию, ${HOME} не
   работает):
     -xc++-header
     -IYOUR_HOME_DIR/.wine/MQL5/Include
     -DVIM
6. В директории со скриптами/экспертами создаём
   compile_flags.txt с содержимым:
     -xc++
     -IYOUR_HOME_DIR/.wine/MQL5/Include
     -DVIM
7. Правим compile_mql::user_include_subdir (дефолтно ''),
   делаем компиляцию чего-нибудь (для вставки guard'ов в стд),
   иначе правильная работа невозможна.


HH:vim.hh包含除std之外的所有声明,即自动完成。

#vim_as_mql_ide_4

附加的文件:
 
我曾经认为,C++程序员是具有灵活和聪明头脑的人...事实证明,并非所有人都是如此。
 
Dmitry Fedoseev:
我曾经认为,C++程序员是具有灵活和聪明头脑的人...事实证明,并非所有人都是如此。

你会做C++吗?是的,让我吃惊。

 
Vict:

你知道C++吗?是的,你让我吃惊。

在什么(语言)和什么IDE中编程有什么区别,主要的不是环境,而是头脑!"。

例如,当我第一次接触到ME(MT5)时,我是用Pascal(Delphi)编程的。

在三分钟内,我就像用我的母语编程了。

当一只猫无事可做时,它就会舔自己的蛋蛋......

 
prostotrader:

在什么(语言)和什么IDE中编程有什么区别,主要的不是环境,而是头脑!"。

例如,当我第一次接触到ME(MT5)时,我是用Pascal(Delphi)编程的。

在三分钟内,我就像用我的母语编程了。

当一只猫无事可做时,它就会舔自己的蛋蛋......

这很难向那些不知道如何使用vim的人解释。这不仅仅是一个编辑器,你会沉迷于它,在'记事本'中用鼠标略过,会变得解剖学上的不舒服。我只是想要一个方便的工具,在我看来,一个正常的愿望。

说实话,当我看到MetaEditor打开时,编码的欲望就会减少,这对工作效率产生了负面影响,我为什么要有这种恼人的因素?
 
Vict:

这很难向那些不知道如何使用vim的人解释。这不仅仅是一个编辑器,你会沉迷于它,在 "记事本 "中用鼠标略过,会变得解剖学上不舒服。我只是想要一个方便的工具,在我看来,一个正常的愿望。

说实话,当我看到MetaEditor打开时,编码的欲望就会减少,这对工作效率产生了负面影响,我为什么要有这种恼人的因素?

你不需要解释什么!

你喜欢vim,好,就用它。

但这对你来说还不够,你已经开始 你的观点强加 给其他人。

再往前走就没有意义了。

 
prostotrader:

你不需要解释什么!

你喜欢vim,好,就用它。

但这对你来说还不够,你已经开始 你的观点强加 给其他人。

没有必要再继续下去了。

:) 我没有强加给你任何东西,你来到了我的主题。你不是被迫来这里的,是否继续下去由我决定。