Как я могу редактировать файлы в сети с Vim?

13

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

Какой канонический способ редактирования большого количества удаленных файлов?

jcora
источник
6
Как именно вы это делаете.
Игнасио Васкес-Абрамс
Если vimнаблюдается отставание, это, вероятно, указывает на проблему с вашей сетью, а не с вашим рабочим процессом.
Джозеф Р.
ssh root@myvps.com; vim / etc / somefile - я вхожу в систему, а затем
запускаю
На самом деле это с сетью. Когда я нажимаю клавишу, она должна отправить пакет из Европы в США, где на самом деле работает экземпляр Vim, который я использую.
Jcora
Вы также можете просто сделать ssh root@myvps.com vim /etc/somefile(обратите внимание на отсутствие ;).
Terdon

Ответы:

26

Вы можете использовать SSHFS для монтирования удаленного дома в локальной папке. Имеет преимущество использования текущей инфраструктуры и низкой задержки локального vim.

Мирча Вуцовичи
источник
1
лучший способ имо. не только низкая задержка, но и необходимость поддерживать только один vimrc
exussum
20

Вы можете редактировать удаленно с локальным vim или gvim.

:e scp://me@someplace.else/~/myfiles/whatever.file

scpэто протокол защищенного копирования . Он аутентифицируется так же, как ssh, поэтому ваш ssh-ключ должен быть доступен и т. Д. Поддерживаются различные другие протоколы (см. :help netrw-externapp), Но scp, вероятно, самый простой, если вы уже используете ssh в том же месте.

Вы можете просматривать каталоги таким образом, просто убедитесь, что путь заканчивается на /. В противном случае vim превращает его в новый файл.

:wавтоматически записывает файл через scp. Если по какой-либо причине запись не удалась, вы должны это заметить, так как они будут в виде строки типа «оболочка вернулась 1». Однако, будьте осторожны: если вы не заметите, vim не знает, и это может иметь последствия - например, если вы сейчас выйдете, он не предупредит вас. Это особенно легко пропустить, если вы используете :waмного; | Это единственное предупреждение, которое у меня есть.

Для официальных документов, см :help netrw.

лютик золотистый
источник
+1 Я как раз собирался написать это. Netrw плагин (который, как правило , устанавливается по умолчанию) имеет широкий спектр способов для чтения удаленных файлов.
Грег Хьюгилл
Я имел в виду этот вариант , когда я сказал: «Это имеет преимущество, не имея необходимость иметь дело с громоздким синтаксисом открытия файлов с удаленного сервера через SCP, и, что более важно, будучи в состоянии очень быстро перемещаться к файловой системе сервера» Этот путь кажется очень ограниченным для меня.
Jcora
1
Если честно, в вашем вопросе изначально не упоминалось «удаленный сервер через SCP», который был отредактирован позже.
Грег Хьюгилл
@GregHewgill: Спасибо за эту заметку, поскольку я немного озадачен - это самый простой и понятный метод для общих целей (без обид для SSHFS!). Если добавление URL-адреса в путь к файлу является относительно громоздким, мне интересно, как выполняемая задача на самом деле требует, чтобы кто-то сел с редактором, чтобы сделать это ... особенно. так как вы можете просто стрелка вверх по команде. Но каждому свое.
Златовласка
@GregHewgill да, я знаю, я написал вопрос на своем телефоне во время переезда, поэтому я непреднамеренно пропустил некоторые вещи. Златовласка, я все время открываю и закрываю файлы. Перейдите и к файловой системе и откройте ее оттуда. Добавление URL + путь было более громоздким, чем просто «быть там».
Jcora
2

Я бы использовал rsync. Он передает только то, что изменилось. Вот так:

rsync -e ssh -va remoteuser@remotehost:remotedir .

затем редактируйте файлы локально на досуге. Нулевое отставание Вы проверяете все файлы перед тем, как их зафиксировать:

rsync -e ssh -va . remoteuser@remotehost:remotedir

Я предполагаю, что вы сначала создаете свой местный каталог и cdв это. Вы также можете сделать так, чтобы он обрабатывал удаление файлов, но будьте очень осторожны с этим, потому что выполнение этого в неправильном каталоге может привести к обнулению всего дерева каталогов.

rsync -e ssh -va --delete . remoteuser@remotehost:remotedir

Сначала я запускаю его в «сухом режиме», используя флаг «n», например:

rsync -e ssh -van --delete . remoteuser@remotehost:remotedir

Он сообщит, что бы он сделал, если бы это было на самом деле. Если я доволен сообщаемым списком, я запускаю его снова и удаляю флаг 'n'.

Rsync очень эффективен. Есть и другие флаги. Это довольно сложно.

Майк
источник
0

Может быть, вы назвали наиболее подходящий путь - способ SSH, но все же, в зависимости от самой природы редактируемых файлов, вы можете выделить небольшой раздел, сделать его общим и поместить туда файлы, конечно, если политика безопасности разрешает это действие. Для этого вы можете использовать NFS или Samba наиболее легко, но редактирование тестового файла является общей концепцией в UNIX, и, возможно, вам придется сохранить его таким, каким вы его делаете в настоящее время.

VVelev
источник