Настройка Neovim с нуля + настройка Ubuntu

Если есть что-то, что вы должны знать обо мне, так это то, что я люблю Visual Studio Code. Мои увлечения, увлечения и личность можно выбросить в окно. Если вы знаете, что я люблю VS Code, то у вас есть довольно хорошее представление обо мне.

Visual Studio Code — это потрясающий текстовый редактор (это не IDE, боритесь со мной), созданный на основе Electron для Windows, Linux и MacOS. Он имеет множество функций, включая встроенный Git, подсветку синтаксиса, завершение кода и, что наиболее важно, богатую сеть расширений. Если вы зайдете на торговую площадку VS Code, вы обязательно найдете расширение, которое сделает ваш редактор кода чуть более совершенным для ваших нужд. Нужен ли вам модуль форматирования кода, который следит за тем, чтобы ваш код выглядел красиво после каждого сохранения, или набор фрагментов кода автозаполнения для хуков React, VS Code обязательно вас поддержит.

Одним из моих любимых расширений VS Code является расширение VSCodeVim, которое эмулирует Vim внутри Visual Studio Code. После того, как вы установите его, вы сможете прыгать вверх и вниз по строкам с помощью k и j, входить в режим вставки с помощью i и делать все те причудливые вещи, которые фанатики Vim достигают только с помощью своих клавиатур.

Приятная часть использования Vim внутри VS Code заключается в том, что у вас по-прежнему есть доступ ко всему рынку VS Code для его расширений, а отключить расширение Vim так же просто, как отключить его из палитры команд VS Code.

Я использую Vim внутри VS Code уже около года, и это был отличный способ выучить основные команды Vim и не тянуться слишком часто за мышью. Но каким бы крутым ни было расширение, весь опыт кажется немного безвкусным. Я часто отключал расширение Vim, когда у меня было мало времени (очевидно, чтобы ускорить копирование и вставку кода), и даже когда я его использовал, я всегда знал, что в глубине души я злил много чистых элитистов Vim в мире.

Что ж, я должен разозлить их еще больше, так как решил начать изучать, как использовать Neovim, улучшенную и более современную версию Vim, выпущенную в 2014 году. По большей части Neovim точно такой же, как Vim, но имеет гораздо более широкий спектр плагинов, так как вы можете настроить текстовый редактор не только с Vimscript, но и с Lua, который является легким, мультипарадигмальным языком, то есть он поддерживает ООП, функциональное программирование, процедурное программирование и т. д.

Но установка Neovim на моем компьютере с Windows может быть не лучшей идеей, поскольку Linux традиционно используется с Neovim. Документация, руководства и функции Neovim подходят для машин Unix. Кроме того, когда я читаю заявления о приеме на работу или просто просматриваю документацию по API во время создания проекта, становится очевидным, насколько преобладает Linux. Согласно некоторой статистике Linux от TrueList, почти половина всех профессиональных разработчиков используют Linux, более 96% из одного миллиона лучших веб-серверов работают на Linux, и все 500 самых быстрых суперкомпьютеров мира работают на Linux.

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

Настройка дистрибутива Linux (Ubuntu)

Хотя я раньше использовал Linux (в основном через SSH и некоторую виртуализацию), я бы не сказал, что у меня есть глубокое понимание этого. Прочитав несколько веток Reddit и постов на Quora, я решил, что лучше всего будет начать изучение Linux с дистрибутивов, которые я смогу запускать локально на своем компьютере через виртуальную машину.

Хотя вы можете просматривать форумы и находить бесчисленные аргументы в пользу того, какой дистрибутив Linux является лучшим, Ubuntu очень удобен для пользователя и поставляется с множеством функций, так что это отличный выбор для новичков в Linux. Я знаю, что более продвинутые дистрибутивы, такие как Arch Linux и Gentoo Linux, являются лучшими вариантами для использования всех преимуществ Linux, но, как говорится, эти дистрибутивы требуют много знаний об оборудовании, а также о самой Linux только для процесса установки, так что это может не лучшая идея прыгать в них сразу. А для тех, кто хочет сложнейших задач, я бы посмотрел на настройку Linux полностью с нуля. А пока вот как вы можете настроить Ubuntu 22.04 через VMware Workstation на компьютере с Windows.

Сначала перейдите в раздел Загрузки VMWare Workstation для Workstation Player и загрузите установщик.

Затем найдите файл Ubuntu 22.04 iso и также загрузите его.

Загрузка iso-файла может занять некоторое время (насколько я могу судить, он весит почти 5 ГБ), но как только это будет сделано, откройте установщик VMWare Workstation. Вы должны увидеть что-то вроде этого, пока приложение готовится к установке:

Возможно, вам придется перезагрузить компьютер, чтобы завершить установку распространяемого пакета Microsoft VC, поэтому в этом случае перезагрузите компьютер и повторно запустите программу установки. Теперь вы должны увидеть мастер установки:

Нажмите «Далее», а затем поспешно примите условия, ничего не читая, как обычно…

Если вы видите следующий экран, установите флажок, чтобы установить WHP (эта часть может не отображаться, поскольку она зависит от вашего устройства).

На следующем экране вам не нужно ничего менять, если только вы не используете международную клавиатуру или не используете клавиатуру с дополнительными клавишами.

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

Нажмите «Далее» еще раз.

И вы готовы к установке. Это должно занять всего несколько минут.

Когда это будет сделано, вы можете нажать «Готово», и теперь на вашем рабочем столе должен появиться значок VMWare Workstation Player.

Откройте программное обеспечение, и, поскольку мы используем VMWare для некоммерческого использования, мы продолжаем использовать первый вариант.

Нажмите «Готово» еще раз, после чего вас встретит главная панель управления VMWare Workstation Player. Давайте создадим новую виртуальную машину, выбрав первый вариант в меню справа.

Затем вас встретит другой мастер, на этот раз для настройки новой виртуальной машины. Просмотрите системные файлы, чтобы найти, куда вы загрузили образ Ubuntu (по умолчанию он должен быть в разделе «Загрузки»), а затем нажмите «Далее».

Далее мы установим имя пользователя и пароль. Ни в коем случае не забывайте пароль, который вы установили. Это будет не так просто, как сбросить пароль от учетной записи TikTok вашей собаки.

Вы можете назвать виртуальную машину как хотите, это не имеет большого значения.

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

Наконец, мы можем создать виртуальную машину и сразу включить ее.

Пока вы видите, как настраивается Ubuntu, я бы порекомендовал попрактиковаться с сочетаниями клавиш по умолчанию для фокусировки на виртуальной машине, а также оставить для нее фокус. Чтобы сосредоточиться на виртуальной машине, просто выполните CTRL + G, а чтобы вернуться к Windows, просто выполните CTRL + ALT. Достаточно просто.

Пока Ubuntu настраивается, он также предложит вам некоторые настройки предпочтений. Во-первых, вы хотите установить предпочитаемый язык.

Затем вы захотите отметить опцию установки стороннего программного обеспечения. Я рекомендую обычную установку, но подойдет и минимальная установка. Просто в конечном итоге вам потребуется немного больше работы для установки нужного вам программного обеспечения.

Наконец, вы захотите установить Ubuntu с первым вариантом (не паникуйте по поводу того, что ваш диск будет стерт, это не относится к вашей ОС Windows).

Во время установки Ubuntu вы получите классное меню для выбора часового пояса:

И, наконец, вы получите экран для настройки имени пользователя и пароля для самой Ubuntu.

Через несколько минут Ubuntu должен быть установлен, и для его использования потребуется перезапуск виртуальной машины.

После перезагрузки вы найдете пользователя, которого создали. Войдите в систему, и вы, наконец, получите доступ к Ubuntu!

Установка Neovim, трижды

Теперь, когда у нас есть доступ к машине с Linux, давайте установим Neovim. Я возился с разными способами установки (потому что их довольно много) и нашел три разных метода, которые приводят к разным версиям Neovim. В зависимости от того, какие плагины или функции вы хотите использовать, вы можете запустить как минимум определенную версию (многие плагины или функции требуют как минимум Neovim 0.7).

Вот первая, которая установила мне Neovim v0.6.1. Просто откройте новый терминал с помощью CTRL + ALT + T и выполните эту команду:

sudo apt install neovim

Вот и все! Вы можете сразу протестировать Neovim по умолчанию с помощью nvim или такой команды, как nvim example.txt, чтобы создать текстовый файл, который вы можете редактировать.

Я не уверен, что так и должно было быть, но выполнение sudo apt update не помогло менеджеру пакетов APT установить более новую версию Neovim.

Второй метод почти так же прост, как и первый; вам нужно будет выполнить только две команды:

sudo add-apt-repository ppa:neovim-ppa/stable
sudo apt update

Это установило для меня Neovim v0.7.2. Вы также можете перейти на эту страницу, если хотите немного почитать о PPA (Personal Packaged Archive или программном обеспечении, которое входит в комплект и предназначено для пользователей Ubuntu).

Теперь последний способ намного сложнее и требует больше времени, но он устанавливает Neovim v0.9.0. Я смог сделать это, собрав программное обеспечение из исходного кода. Здесь много шагов, но они достаточно хорошо изложены на вики-странице Neovim здесь.

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

  • Clang или GCC версии 4.9+
  • CMake версии 3.10+, созданный с поддержкой TLS/SSL

Итак, начнем с установки GCC и CMake. Для GCC это довольно просто. В терминале вам нужно будет выполнить следующие команды:

sudo apt update
sudo apt install build-essential
sudo apt-get install manpages-dev

После этого вы можете запустить

gcc --version

чтобы проверить, правильно ли он установлен. Пока версия не ниже 4.9, все в порядке.

Для CMake я нашел очень полезное руководство на этом форуме Ask Ubuntu. Во-первых, вы должны убедиться, что версия CMake по умолчанию удалена из Ubuntu с помощью

sudo apt remove --purge --auto-remove cmake

Далее вам нужно подготовить свою систему к установке CMake:

sudo apt update && \
sudo apt install -y software-properties-common lsb-release && \
sudo apt clean all

Затем мы получим копию ключа подписи Kitware:

wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null

Далее мы добавим репозиторий Kitware в наш список источников:

sudo apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main"

Хотя этот следующий шаг не является обязательным, я решил выполнить его. Это гарантирует, что набор ключей Kitware останется актуальным при смене ключей.

sudo apt update
sudo apt install kitware-archive-keyring
sudo rm /etc/apt/trusted.gpg.d/kitware.gpg

Затем мы копируем открытый ключ 6AF7F09730B3F0A4:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6AF7F09730B3F0A4

И, наконец, устанавливаем CMake:

sudo apt update
sudo apt install cmake

Еще раз обязательно запустите

cmake --version

чтобы подтвердить, что вы установили версию CMake не ниже версии 3.10.

Теперь, когда у нас есть общие системные требования, нам нужно установить специальные требования Ubuntu, которые Neovim предоставляет на своей вики. Запустите эту команду, чтобы установить эти требования:

sudo apt-get install ninja-build gettext libtool-bin cmake g++ pkg-config unzip curl

После всего этого мы только установили все необходимые компоненты для сборки… Не волнуйтесь, мы на самом деле почти закончили! Справедливое предупреждение: выполнение некоторых из последних команд занимает некоторое время, поэтому, если вы заметили, что команда выполняется дольше, чем 5 или 10 секунд, не стесняйтесь позволить ей завершиться в фоновом режиме, занимаясь чем-то другим.

На шаге 2 нам нужно клонировать репозиторий Neovim на нашу виртуальную машину. Сделайте это в легкодоступном месте; Я лично сначала изменил каталог своего терминала на рабочий стол, а затем выполнил эту команду:

git clone https://github.com/neovim/neovim

Если вы также сделали это на своем рабочем столе, теперь вы должны увидеть папку с именем «neovim» на своем рабочем столе. Отсюда мы можем либо установить последнюю версию, либо последнюю стабильную версию. Независимо от того, какой из них вы хотите, сначала запустите

 cd neovim && make CMAKE_BUILD_TYPE=RelWithDebInfo 

изменить каталоги на клонированный исходный код Neovim и запустить на нем CMake. Если вам нужна последняя стабильная версия, обязательно запустите

git checkout stable

Наконец, просто бегите

sudo make install

И мы наконец закончили! Вы должны увидеть такой экран:

Теперь о выходе из Neovim…

Просто шучу! Я не настолько жесток, чтобы оставить вас в ловушке внутри этого, казалось бы, неизбежного текстового редактора! Просто используйте :q, чтобы выйти из Neovim.

Теперь вы можете заметить, что команда nvim не работает; это случилось со мной после сборки проекта из исходного кода. Не нужно паниковать, просто откройте проводник, выполните CTRL + L, чтобы одновременно сфокусироваться на текущем каталоге и выделить все, и замените его на это:

/usr/local/

Вы должны увидеть что-то вроде этого:

Вы захотите открыть терминал в этом каталоге, что удобно сделать из проводника, если щелкнуть три маленькие точки рядом с адресной строкой и выбрать «Открыть в терминале».

Когда ваш терминал открыт, выполните эту команду

./bin/nvim

и вы увидите, как Neovim снова откроется. Однако на этот раз, когда вы выходите с помощью :q, команда nvim должна начать работать, когда вы используете ее в терминале.

Базовая конфигурация Неовим

Наконец-то мы можем приступить к настройке Neovim прямо сейчас! Имейте в виду, что некоторые функции или плагины могут не работать в зависимости от установленной версии Neovim; Я рекомендую третью версию установки, чтобы получить Neovim v0.9.0, собрав его из исходного кода.

Прежде чем мы создадим наш файл конфигурации, я хочу упомянуть, что запуск

sudo apt install wl-clipboard

сделает его таким, что вы сможете выполнить "+y для извлечения из Neovim в системный буфер обмена и "+p для вставки из системного буфера обмена в Neovim. Довольно полезно, когда вам нужно скопировать и вставить фрагменты кода.

Чтобы создать наш файл конфигурации, нам нужно сначала перейти в нужный каталог. В терминале выполнить

cd ~/.config
mkdir nvim

чтобы создать папку с именем «nvim» в папке конфигурации. Далее, давайте создадим наш файл конфигурации с

cd nvim
nvim init.lua

Оказавшись внутри нашего конфигурационного файла, давайте запишем несколько вещей:

Чтобы проверить это, мы можем записать в файл (сохранить наши изменения) с помощью :w, а также source % для компиляции. Теперь вы должны увидеть номера строк в левой части Neovim.

Это отличная отправная точка для конфигурации Neovim, но если мы хотим воспользоваться преимуществами сценариев Lua, нам нужно разделить наши плагины Neovim и структуру конфигурации на модули.

Установка плагинов

Не стесняйтесь настраивать свою структуру конфигурации так, как вам нравится, но если вы хотите скопировать то, что сделал я, настройте свой каталог следующим образом:

📂 ~/.config/nvim
├── 🌑 init.lua
├── 📂 lua
│  ├── 📂 v9
│     ├── 🌑 keymaps.lua
│     └── 🌑 plugins.lua

Вы захотите переместить весь код с init.lua на keymaps.lua и просто заменить весь init.lua на

require("v9.keymaps")

Не забудьте использовать :source % для компиляции изменений! Если все еще работает, переходим к установке плагинов Neovim через упаковщик.

Создайте файл plugins.lua, где мы будем вызывать упаковщик, чтобы помочь нам установить плагины для Neovim. Мы собираемся использовать метод начальной загрузки для упаковщика, поэтому скопируйте следующий код

local ensure_packer = function()
  local fn = vim.fn
  local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim'
  if fn.empty(fn.glob(install_path)) > 0 then
    fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path})
    vim.cmd [[packadd packer.nvim]]
    return true
  end
  return false
end

local packer_bootstrap = ensure_packer()

return require('packer').startup(function(use)
  use 'wbthomason/packer.nvim'
  -- My plugins here
  -- use 'foo1/bar1.nvim'
  -- use 'foo2/bar2.nvim'

  -- Automatically set up your configuration after cloning packer.nvim
  -- Put this at the end after all plugins
  if packer_bootstrap then
    require('packer').sync()
  end
end)

в plugins.lua. Вы также захотите добавить

require("v9.plugins")

в вашем файле init.lua. Если мы запустим :PackerSync после записи всех наших изменений, мы должны получить еще один буфер Vim в левой части нашего терминала на основе плагинов, которые мы добавили в plugins.lua. Например, если вы добавите

  use 'ellisonleao/gruvbox.nvim'
  use 'nvim-tree/nvim-tree.lua'
  use 'nvim-tree/nvim-web-devicons'
  use 'nvim-lualine/lualine.nvim'

где plugins.lua читается как -- My plugins here, тогда запуск :PackerSync должен установить эти плагины (на скриншоте ниже я уже установил gruvbox, поэтому упаковщик показывает только установленные три других).

Настройка плагинов

Теперь, когда мы установили несколько плагинов, давайте воспользуемся преимуществами нашей файловой иерархии и создадим .lua файлов для каждого плагина по модульному принципу. Чтобы ваш каталог выглядел так, используйте mkdir и touch для создания папок и файлов соответственно:

📂 ~/.config/nvim
├── 🌑 init.lua
├── 📂 lua
│  ├── 📂 v9
│     ├── 🌑 keymaps.lua
│     └── 🌑 plugins.lua
│     └── 📂 plugin_config
│        ├── 🌑 gruvbox.lua
│        └── 🌑 lualine.lua
│        └── 🌑 nvim-tree.lua

Вот код для каждого файла конфигурации плагина:

После написания каждой конфигурации плагина мы хотим создать еще один файл init.lua, но на этот раз он будет в каталоге plugin_config. Вот полная структура файла, чтобы исключить любую двусмысленность (новый init.lua выделен жирным шрифтом):

📂 ~/.config/nvim
├── 🌑 init.lua
├── 📂 lua
│  ├── 📂 v9
│     ├── 🌑 keymaps.lua
│     └── 🌑 plugins.lua
│     └── 📂 plugin_config
│        ├── 🌑 gruvbox.lua
│        └── 🌑 lualine.lua
│        └── 🌑 nvim-tree.lua
│        └── 🌑 init.lua

В этом новом файле init.lua нам понадобятся все файлы конфигурации, которые мы только что написали, поэтому его содержимое должно быть таким:

require("v9.plugin_config.gruvbox")
require("v9.plugin_config.lualine")
require("v9.plugin_config.nvim-tree")

Затем в нашем исходном файле init.lua (тот, который находится непосредственно под ~/.config/nvim, нам понадобится конфигурация нашего плагина, так что теперь весь файл должен выглядеть так:

require("v9.keymaps")
require("v9.plugins")
require("v9.plugin_config")

Если мы запустим команду nvim, вы должны увидеть, что все наши плагины работают (нажмите CTRL + N, чтобы увидеть nvim-tree)!

Очевидная проблема сейчас заключается в том, что наш шрифт не поддерживает символы, которые используют наши плагины. Это потому, что у нас не установлен Nerd Font. Nerd Font, по сути, объединяет множество глифов и символов из разных источников, включая Font Awesome, Material Design и Devicons, для совместимости с одним шрифтом. Без шрифта Nerd мы не сможем правильно увидеть символы в нашем плагине nvim-tree или lualine.

Установка шрифта Nerd

Чтобы установить шрифт Nerd, нам нужно посетить раздел исправленных шрифтов в репозитории Nerd Fonts GitHub. Вы увидите длинный список шрифтов на выбор; Я буду устанавливать BigBlueTerminal, который основан на старых символах терминала IBM (я любитель старых школьных шрифтов).

Нажмите на шрифт, который вы хотите установить, а затем нажмите на папку «Завершить», чтобы открыть все файлы шрифтов. Обычно вам нужен только последний файл в каталоге; это стандартная «полная» версия шрифта. Большинство файлов будут .ttf, но некоторые будут .otf. Если у вас есть возможность, выберите файл .otf, так как он создан на основе более старого типа файла .ttf (обычно он лучше). После нажатия на файл шрифта загрузите его.

Теперь нам нужно переместить загруженный шрифт в правильный каталог, а именно /.local/share/fonts/NerdFonts. После изменения каталога на /.local/share вам нужно будет использовать mkdir для создания fonts и его подкаталога NerdFonts. Запуск pwd распечатает ваш текущий рабочий каталог, который должен выглядеть примерно так:

/home/kevinfengcs88/.local/share/fonts/NerdFonts

Чтобы открыть проводник в этом месте, просто выполните nautilus . в своем терминале. Это должно появиться:

Оттуда вы можете просто перетащить установленный шрифт из «Загрузки» в эту новую папку. Как только вы это сделаете, просто щелкните правой кнопкой мыши в любом месте вашего терминала, откройте «Настройки», убедитесь, что «Пользовательский шрифт» отмечен флажком, и откройте список доступных шрифтов вашей системы, нажав «Моноширинный» (или любой другой текущий шрифт вашего терминала есть).

Выберите новый шрифт, поэкспериментируйте с размером шрифта, если хотите, и нажмите «Выбрать» в правом верхнем углу для подтверждения.

Теперь, когда вы загружаете Neovim и проверяете свои значки, например те, что находятся в nvim-tree, они должны работать:

И это почти все для этого руководства! На мой взгляд, эта конфигурация Neovim отличная, но не обязательно полная. Две самые большие функции, которых сейчас не хватает, — это плагин для терминала и улучшенная подсветка синтаксиса. Вместо того, чтобы направлять вас через это, я оставлю вас попробовать реализовать их самостоятельно (просто для начала я бы порекомендовал проверить toggleterm и treesitter).

Добавить дополнительные плагины довольно просто; просто просмотрите разделы «Установка подключаемых модулей» и «Настройка подключаемых модулей» ранее в этом руководстве и попытайтесь воспроизвести эти шаги для новых подключаемых модулей, которые вы найдете на GitHub. Если вы не знаете, как написать сами файлы конфигурации, обязательно обратитесь к документации каждого плагина. Не забывайте, что вы всегда можете использовать чужой файл конфигурации в качестве отправной точки, если наткнетесь на него. Веселиться!

Источники

https://github.com/cpow/cpow-dotfiles

https://ramezanpour.net/post/2022/07/24/access-os-clipboard-in-neovim

https://www.reddit.com/r/neovim/comments/svgr65/lua_modules_not_loading/

https://truelist.co/blog/linux-statistics/

https://www.youtube.com/watch?v=fR4ThXzhQYI

https://www.youtube.com/watch?v=J9yqSdvAKXY