В этой статье настроим среду разработки и добавим настроек Vim + Tmux, для удобного решения задач курса Rustlings.
Для тех кто пока не в теме Rustlings это небольшой курс по языку Rust в котором вам необходимо исправлять ошибки компилятора. Вооружившись знаниями из RustBook вы легко с этим справитесь. Можно читать книгу параллельно, обращаясь к главам по мере необходимости. В файлах README.md, в директориях заданий вы найдете ссылки на главы книги, необходимые для решения задач.
«Книгу» на русском языке можно найти по ссылке.
Все примеры конфигурации будут даны для MacOs, ели у вас Linux, то большинство команд сработают и для вас, конфигурации терминальных утилит точно подойдут. Но лучше обратиться к документации.
Небольшая видеодемонстрация на сайте Rustlings показывает как решаются задачи в консольном редакторе, но нет объяснений как настроить терминал схожим образом. Я покажу как сделать нечто подобное схожим образом, для этого понадобится Tmux и Vim.
Зачем так заморачиваться? На самом деле незачем. Вы можете установить Rustlings и использовать любую IDE на свой вкус. Мне же хотелось решать задачи без сниппетов и подсветки синтаксиса. Так намного интереснее и познавательнее.
Устанавливаем Tmux
Немного о самом приложении. Tmux — (терминальный мультиплексор) — это программа для Unix-подобных систем, которая позволяет работать с несколькими сеансами терминала в одном окне, а также отключаться от них без остановки процессов.
В чем удобство?
Вы можете создать сессию окна, разделить его на несколько рабочих областей. В нашем случае в одной области будет запущен клиент проверяющий выполнение задания, в другой будет открыт текстовый редактор, с заданием.
При необходимости, вы всегда можете закрыть окно и вернуться к нему снова. Список основных команд я дам ниже.
Приступаем к установке. Открываем терминал, вводим:
$ brew install tmux
Все.
Как работать в Tmux
Все команды выполняются в Tmux после нажатия префикса Ctrl+b, затем — клавиши команды.
Базовые операции с окнами
c— создать новое окно;&— закрыть текущее окно (с подтверждением);n— переключиться на следующее окно;p— переключиться на предыдущее окно;<номер>(например,0,1,2) — переключиться на окно с указанным номером;w— открыть меню списка окон (навигация стрелками, выбор —Enter, выход —q).
Перемещение и переупорядочивание окон
,— переименовать текущее окно;.— переместить текущее окно на указанный номер;swap-window -t -1— переместить текущее окно на одну позицию влево;swap-window -t +1— переместить текущее окно на одну позицию вправо.
Навигация по сессиям и окнам
(— переключиться на предыдущую сессию;)— переключиться на следующую сессию;s— открыть меню списка сессий и окон (навигация стрелками, выбор —Enter).
Командный режим (дополнительные возможности)
Чтобы войти в командный режим, нажмите Ctrl+b, затем : — внизу появится строка ввода.
Примеры команд:
new-window— создать новое окно;kill-window— закрыть текущее окно;rename-window <имя>— переименовать окно;select-window -t <номер>— переключиться на окно по номеру;move-window -t <сессия>:<номер>— переместить окно в другую сессию на указанный номер.
Полезные сочетания для работы с окнами и панелями
%— разделить окно вертикально (новая панель справа);"— разделить окно горизонтально (новая панель снизу);o— переключиться на следующую панель в окне;;— переключиться между текущей и предыдущей панелью;x— закрыть текущую панель (с подтверждением);z— переключить масштаб панели (увеличить/уменьшить);{— переместить текущую панель влево;}— переместить текущую панель вправо.
Справка и настройка
?— показать список всех сочетаний клавиш;:setw synchronize-panes— синхронизировать ввод во всех панелях окна (повторная команда отключает синхронизацию).
Установка и настройка Vim
Вы можете найти много информации про этот редактор. Популярный мем «как выйти из Vim» гуляет по сети уже много лет. Давайте запустим $ vim. Чтобы выйти, нужно перейти в режим ввода команд.
У Vim есть несколько режимов, основные, без которых невозможно с ним работать это: режим ввода команд (:), режим просмотра, в него вы попадаете при входе и возвращаетесь при выходе из других режимов (esc) и режим редактирования (i).
Итак, чтобы выйти нужно войти в режим ввода команд, нажав двоеточие и ввести «q». Но не спешите! Vim работает так, что при входе в редактирование файла создается резервный файл. Наличие этого файла говорит о том, что кто-то уже начал процесс редактирования и всем желающим стоит подождать. Если вы закроете терминал, перезагрузите компьютер и т.д. файл так и останется в файловой системе и при следующем обращении сообщит вам, что кто-то уже начал редактировать запрашиваемый файл. Разрешить это можно удалением временного файла или следуя инструкциям редактора при загрузке файла.
Чтобы не плодить временные файлы выходите из Vim командой q! — выход без сохранения или с сохранением wq.
Я настоятельно рекомендую ознакомится со списком основных команд редактора.
Почему именно Vim?
У этого редактора есть масса преимуществ и один большой недостаток. Недостаток в том, что Vim очень сложный и кажется нелогичным. Но освоив его, вы поймете почему так много программистов (и не только) используют его как основной редактор и по сей день.
- Vim присутствует почти на любой *nix ОС. Если в вашей версии Linux не запускается vim, просто введите команду vi. Vi — это самая старая версия Vim, но все основные команды в ней, работают так же.
- Vim легко расширяется. Под него существует множество плавунов способных превратить простой текстовый редактор в полноценную IDE.
- С ним можно писать код не отвлекаясь на мышку, что тоже добавляет удобства и скорости в работе.
- Его можно запустить на любом калькуляторе. Я запускал Vim на удаленном сервере и разрабатывал приложение, подключаясь через SSH.
- Но все преимущества теряются если вы не владеете слепым десятипальцевым методом набора текста. Это важный скил на освоение которого стоит потратить время.
Итак, зашли и вышли. Настало время настроить наш Vim для удобства работы.
Сначала установим VimPlug
VimPlug — это модуль для загрузки плавунов Vim.
& curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
В MacOs команда может не сработать, выдав ошибку доступа. Это связано с тем, что директория ~/.vim была создана с правами суперпользователь. В таком случае нужно расширить права:
$ sudo chown -R user: ~/.vim
$ chmod u+rw ~/.vim
Далее, нам нужно создать файл конфигурации Vim для нашего пользователя.
$ vim ~/.vimrc
call plug#begin('~/.vim/plugged')
Plug 'rust-lang/rust.vim'
Plug 'preservim/nerdtree'
Plug 'neoclide/coc.nvim', {'branch': 'release'} " For LSP integration
" Add more plugins as needed
call plug#end()
"————————-Plugins-CONFIG————————————
nnoremap <leader>n :NERDTreeFocus<CR>
nnoremap <C-n> :NERDTree<CR>
nnoremap <C-t> :NERDTreeToggle<CR>
nnoremap <C-f> :NERDTreeFind<CR>
" ——————————CONFIG—————————————
set number "Нумерация строк
set expandtab
set tabstop=4
set shiftwidth=4
syntax enable
set mouse=a "Функции мыши
set tabstop=2
set shiftwidth=2
set expandtab
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=utf-8,cp1251,koi8-r,cp866
set hlsearch " подсвечивать результаты поиска
" Когда достигаем границ строки, то перемещаемся на предыдующую/следующую
set whichwrap+=h,l,<,>,[,]
" Отображение скрытых символов
set list
set listchars=tab:»·,trail:·,nbsp:␣,extends:>,precedes:<
" Ширина строки и красная линия
set textwidth=80
"set cc=+1
" Настройки автодополнения
set completeopt=menu,menuone,noselect
" Разделение экрана
set splitbelow " разбивать вниз
set splitright " разбивать вправо
" Задержка CursorHold
set updatetime=100
" Отключить создание бекапов, своп-файлов и файлов отмены
set nobackup noundofile noswapfile
" Включаем автоматическое обновление буфера
set autoread
" Обновляем буфер при изменении файла внешними инструментами
autocmd FocusGained,BufEnter * checktime
Выходим с сохранением.
После этого, войдя в Vim, перейдем в режим ввода команд и запустим установку плагинов, командой :PlugInstall.
Запускаем Rustlings
Запустим сначала Tmux:
$ tmux
Далее разделим экран вертикально: ctrl+b -> :%.
Установим Ruslings:
$ cargo install rustlings
$ rustlings init
$ cd rustlings
$ rustlings
В окне мы должны увидеть первое приветственное задание. Переключимся между вкладками Tmux: ctrl+b, o. Теперь откроем файл задания. Адрес файла можно найти в самом низу Current exercise: .
Попробуем исправить первую проблему. Как только вы исправите опечатку в println! в окне с запущенным чекером произойдут изменения. Переключитесь между окнами, нажмите n, вернитесь к окну с редактора и откройте новое задание. Не забывайте выходить с сохранением wq. А чтобы сохранить, но не выходить, вводите просто w.
Удобство такого подхода, в том, что мы всегда можем вернуться к заданиям запустив терминал. У меня несколько сессий Tmux, для работы и решения задач.
Примерно так должно получится:

Rustlings хоть и веселые, но слишком простые. Я думаю поработать на Hard версией и уже подготовил ряд интересных идей. Если у вас есть идеи по расширению задачника по Rust, буду благодарен за подсказки.
Итак, сегодня установили Rustlings и настроили среду для выполнения заданий. Надеюсь было интересно.



