Как я установил neovim на WSL2

Статья написана студентом Хекслета. Мнение автора может не совпадать с позицией редакции
Читать в полной версии →

Вдохновившись мнением авторов курса «Основы командной строки» о редакторе vim (мемы о кривых обучения были смешные!), я погрузился в его самостоятельное изучение. Собрал в сети данные, написал простую конфигурацию .vimrc, и без проблем справился с первым проектом в курсе по Python — запомнил ряд стандартных команд и даже привык почти не использовать стрелки! Однако, приступив ко второму проекту, я подумал, что меня не устраивает ни скорость моей работы, ни интерфейс редактора. Так я решил попробовать установить сборку neovim, рекомендованную Хекслетом.

Сам процесс установки оказался нетривиальной инженерной задачей для человека со скромным опытом работы с Linux :) Поэтому, на случай повторения процедуры, я собрал все возникшие проблемы и их решения в этой статье.

Параметры системы:
WSL version: 1.0.3.0, Ubuntu, WSL2
Windows 10.0.19044.2486

Установка старой версии neovim

Первое препятствие, с которым я столкнулся, — sudo apt install neovim устанавливает на мой компьютер версию 0.4.3, несовместимую со сборкой. Оказалось, что apt и вовсе не подключается к интернету, возникают ошибки Temporary failure resolving... Помогла замена DNS-сервера в файле /etc/resolv.conf, как описано в ответах на StackOverflow.

Отсутствие подходящих шрифтов

Я успешно скачал neovim v.0.9.0, а также zsh и Oh My Zsh, как рекомендовано в репозитории dotfiles, после чего установил сборку по инструкции. По открытии neovim глазам моим предстало печальное зрелище:

Правильная кодировка прописана в конфиге, поэтому дело не в ней. Оказалось, что необходимо поставить шрифт, отображающий иконки. Такие шрифты можно найти здесь.

Устанавливаются шрифты не через консоль и не в Ubuntu, а напрямую в Windows. Для этого скачиваем архив со шрифтом, распаковываем, кликаем правой кнопкой мыши на файл шрифта и жмём "Установить". Не все шрифты поддерживаются терминалом, и не все — отображают полный спектр необходимых иконок. Мне подошёл шрифт Meslo.

Закончилась память

Мой диск C в целом не очень объёмный, на нём обычно не более 12 Гб свободной памяти. После установки сборки dotfiles места почти не осталось. Мне на данный момент vim необходим как редактор Рython, поэтому я решил удалить часть языков, которые поддерживаются в сборке. Так, удалению подверглись объёмные папки с ghcup, cabal, а также rust — через sudo apt remove rustc. Вроде ничего не сломал :) Кстати, разобраться, какие папки самые объёмные, помогла очень полезная утилита

ncdu --exclude mnt

Она тоже есть в сборке. После этих действий места, увы, больше не стало. Потому что образ WSL не может сам освобождать память, ему необходима помощь! Чтобы её оказать, заходим в PowerShell и пользуемся утилиту diskpart. Именно таким образом мне удалось отвоевать свои 10 Гб.

Смена дефолтной цветовой схемы

Цветовая схема прописана в конфиге, который можно найти в директории ~/.config/nvim. Для изменения нужно отредактировать файл colorscheme.lua. В сборке используется цветовая схема Material, у которой есть 5 симпатичных вариантов. Мне не понравилась уже выбранная "deep ocean", поскольку она слишком тёмная, я выбрал "palenight". Для этого в конфиге я отредактировал строчку:

vim.g.material_style = "palenight"

Копирование из vim в буфер обмена

Очень полезно иметь возможность скопировать код из vim в буфер обмена, особенно при наличии двух операционных систем на одном экране. «Из коробки» эта опция не работала. Если в нормальном режиме neovim набрать команду :healthcheck, можно узнать много интересного о текущей сборке neovim. В частности, в подразделе Clipboard (optional) я нашёл список подходящих утилит, решающих обозначенную выше проблему. Я установил xclip: sudo apt install xclip. Теперь команда "y копирует информацию в буфер обмена!


Проделав описанные действия, я полностью доволен и функционалом, и внешним видом. Теперь разбираюсь со вторым проектом в курсе Python уже в новом редакторе :)

P.S. Поменять местами ctrl и capslock мне так и не удалось, но пока и так удобно.