Всем привет, сегодня я расскажу, как настроил Вим для работы над одной специфической задачей.
Смысл в следующем. Есть математическая модель некоторого явления, алгоритм расчета на фортране. В код иногда надо вносить изменения: вывести на экран или в файл что-нибудь полезное, может быть изменить алгоритм, ну, должен быть под рукой.
Под рукой надо иметь также файл с параметрами, которые я меняю перед каждым запуском, и ещё кое-какую информацию: в двух-трех файлах.
Запусков очень много! Каждый занимает секунды, а запускаю я почти непрерывно целый день. Нужно предельно сократить движения рук.
После отработки надо нарисовать график, который покажет, годно получилось или опять ерунда. Рисую в R, который тоже должен быть под рукой.
Как я это сделал? Расскажу. Вообще, Вим как IDE может работать, про это была отдельная заметка. А это частный случай, под особую задачу.
- Файлы открыты во вкладках (:tabnew файл). Сессия сохранена (:mksession!), чтобы легко восстановить (vim -S) конфигурацию вкладок и окон.
- Написан makefile, что позволяет пересобирать исполняемый файл прямо из Вим командой :make, а если ошибки, то они сразу показываются (к следующей ошибке переходит :cnext).
- Во вкладке с файлом параметров несколько окон. Внизу окно терминала: команда :term. Это окно, в котором работает bash. В нем запущен R. Окно с параметрами может быть расщеплено (:vsplit) на два, если я хочу сравнить параметры двух экспериментов. Для подсвечивания изменений можно включить режим различий (:set diff)
- Создана сложная команда, привязанная к клавише F12. Нажатие на нее сохраняет файл параметров, запускает расчет и переходит в терминал, в котором достаточно запустить R-скрипт для отрисовки. Команда такая:
map <F12> :w <CR>\|:!./My_proggo.x %<CR> \|:wincmd j<CR>
2 imap <F12> <ESC>:w <CR>\|:!./My_proggo %<CR> \|:wincmd j<CR>
Обсудим первую команду; вторая для режима вставки и отличается только тем, что выходит сначала из него.
Используется конвейер | (точнее, \|, так как | будет считаться частью команды), который объединяет команды и выполняет их по очереди.
Сначала выполняется сохранение: :w, обратите внимание на символ ввода "энтер". Затем выполнение команды bash, а именно, запуск выполняемого файла из текущего каталога. Моей программе передается, как параметр командной строки, текущий файл (символ %), а это обычно файл с параметрами, в котором только что сделаны изменения. После выполняется переход в окно с R. В нормальном режиме это <C-W>j, но из командной строки приходится прибегать к посредству команды :wincmd. Параметр j означает "вниз". Команда j нормального режима тоже, собственно, заменяет стрелку вниз.
Таким образом, изменив параметры (либо в режиме вставки или замены, а то и инкрементом <C-A>, <C-X> или точечной заменой r) я нажимаю F12, и попадаю в R, всё уже посчитано, и осталось только нажать клавишу "верх", вызывая предыдущую команду, и запустить скрипт для отрисовки.
Мне не надо выходить из режима вставки, сохранять файл, запускать прогон, переходить в окно — делать много телодвижений. Я доволен! Может быть, я бы и не решил эту задачу, если бы не созданная конфигурация! Она на рисунке.
В принципе, можно было бы и скрипт в R запускать автоматически, но это уже лишнее.
Удачи, коллеги!