Rustlings — решаем задачи по RustBook, настраиваем среду

В этой статье настроим среду разработки и добавим настроек 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 — переключиться на предыдущее окно;
  • <номер> (например, 012) — переключиться на окно с указанным номером;
  • 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

[dt_code]

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

[/dt_code]

Выходим с сохранением.

После этого, войдя в 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 и настроили среду для выполнения заданий. Надеюсь было интересно.

StackUP