VIM и редактирование файлов на удаленных серверах

c0437bcd72dd0717f74ddc44fd63eabe.jpg

Статья о том, как настроить vim в одном месте, а все файлы, которые находятся на других серверах, подгружать и работать локально. Понятно, что можно поставить vim на каждый удаленный сервер, настроить и работать по ssh, но не всегда есть такая возможность, хотя бы потому, что все быстро устаревает и чтобы использовать супер-современный vim со всеми плагинами и наворотами порой надо заменить OS на удалённом хосте.

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

1. scp

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

vim scp://user@myserver[:port]//path/to/file.txt

Либо прямо в командой строке vim:

:e scp://user@myserver[:port]//path/to/file.txt

Помимо scp есть еще аналогичные варианты. Можно ввести :h netrw-nread и получим справку в nvim:

9778134d7b63dd0fbe569994f17f84e6.png

Плюсы понятны — не надо ничего ставить. Ввел команду и редактируешь файл. Например, если надо отредактировать какой-то один файл конфигурации, типа /etc/nginx/nginx.conf, то это нормальный путь, но вести большие проекты достаточно проблематично.

Минусы:

  • Если проект большой, то можно запариться перемещаться таким образом или что-то там искать

  • Не будут работать LSP, fzf с нечетким поиском и ещё кое-какие другие плагины

Пример, когда файл подгружен через scp. Скриншот с сообщениями от LSP.

LSP ругается, потому что не может найти модули, которые установлены на удаленной машине, он не знает об их существовании LSP ругается, потому что не может найти модули, которые установлены на удаленной машине, он не знает об их существовании

2. sshfs

С помощью sshfs — можно подмонтировать удалённую файловую систему и работать с ней локально.

Установка требуется только там, где стоит ваш vim.

yum install sshfs

или

apt-get install sshfs

И дальше монтируем в нужную папку вот таким образом:

sshfs remote-user@remote-server.com:/home/remote-user/ ~/mnt/remote-user

И получаем удаленную файловую систему у себя в в папке ~/mnt/remote-user

Если запустить vim и начать работать, то LSP продолжит ругаться, и надо внести кое-какие правки. Например, чтобы работал LSP с pyright, надо в папку ~/mnt/remote-user положить файл pyrightconfig.json со следующим содержимым:

{
    "venvPath": ".",
    "venv": "env"
}

Где явно указываем путь к виртуальному окружению и название папки с виртуальным окружением.

После таких манипуляций, LSP перестает ругатьсяПосле таких манипуляций, LSP перестает ругаться

Чтобы размонтировать, вот такая команда:

fusermount -u ~/mnt/remote-user/

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

Минусы:

  • Очень медленный

  • Когда LSP обращается к удаленным модулям, чтобы считать, то беспощадно тупит

3. samba + vpn

Я не буду подробно останавливаться на том, как настроить самбу с впн-ом. Для меня, для лентяя, этот путь не очень хороший, потому что лень ставить всё это и настраивать, как локально, так и удаленно.

Но про то что такой вариант существует, все же имеет смысл написать. В инете полно гайдов, как это сделать. Но даже и в этом случае люди жалуются (возможно, не умеют настраивать), что у них подтупливает LSP. Инфа для тех, кто решит пойти таким путём.

4. distant

Есть такая библиотека с названием distant, которая дает доступ к удаленной файловой системе и даже позволяет выполнять команды удалённо. Distant — быстрый, асинхронный, зашифрованный, написан на rust и всё такое крутое и современное. И вот уже на основе этой библиотеки написан плагин для nvim.

Вот здесь видео, где человек показывает, что локально у него не установлен go, запускает, монтирует в nvim удалённый хост и у него работает LSP с go при этом.

Может работать с виндой (я не пробовал).

Плагин в режиме mode=ssh может работать и без установленной distant библиотеки, это уже медленнее, не будет работать поиск, LSP и т.д.

Минусы:

  • Для полноценного запуска distant требуется современная OS. А если OS современная, то вроде как проще поставить на нее nvim со всеми причиндалами и работать, чем валандаться с лишними плагинами. Такая палка о двух концах.

5. vim-arsync

Плагин vim-arsync для асинхронной синхронизации удаленных и локальных файлов с использованием rsync. Из-за того что rsync — штука, которая работает и на старых и на новых серверах, то никаких проблем не будет, если вам придется работать на сервере, который настроили, например, в нулевых, и который с тех пор работает.

ffe18e9f24fb733f839520f0a7d31ae3.png

Основные возможности:

  1. Синхронизация с помощью rsync (с параметрами сжатия → -avzhe ssh)

  2. Можно игнорировать определенные файлы или папки на основе файла конфигурации

  3. Асинхронная работа

  4. Есть возможность конфигурирования файла для каждого проекта

  5. Автоматическая синхронизация при сохранении файла

  6. Работает с ssh-ключами (рекомендуется) или с открытым паролем в файле конфигурации

Минусы:

  • Данный плагин утягивает весь проект со всеми файлами с удаленной машины на локальную. Зато потом очень быстро можно работать. Короче, минус только в дисковом пространстве, которое надо отдать под проект.

© Habrahabr.ru