Найти тему
Блокнот математика

Рубрика "Секреты Вим". Сетевые протоколы

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

Правда, рассказывать мало чего есть. Дело в том, что там всё очень прозрачно, и всё работает так, как будто файл тут рядом. Надо только помнить, что реально файл тут рядом и есть, а операции чтения и записи идут по сети. Так что редактировать гигабайтный файл идея спорная))

Просто вместо обычных путей вы можете указывать URL, причем самые разные. Например,

:tabnew scp://bloknot@42.666.360.18/home/bmath/girls

или

:r http://my.homepage.ru/file42.htm

Протоколов поддерживается много, но через внешние драйвера. В Линуксе они у вас точно есть, в Винде — не факт. В список входят DAV, HTTP, FTP, SFTP, SCP, RCP, fetch, rsync. Кое-что из этого работает только на чтение, например, HTTP.

Помимо обычных команд чтения и записи, предоставляются ещё Nread, которая считывает файл и вставляет его в текущий буфер; Nwrite, которая записывает текущий буфер куда указано; третья команда в этом семействе Nsource, которая исполняет удаленный скрипт.

Можно ознакомиться с форматом через подсказку :Nread ?, аналогично для двух других. Это именно подсказка самой команды, а не справка Вим, которая тоже есть: :help Nread.

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

Если путь кончается на /, то это каталог, и его можно просмотреть. Для локальных слеш не обязателен, а для сетевых необходим.

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

Для безопасных протоколов, таких как SCP, придется вводить пароль на каждое действие, ничего не поделаешь. Впрочем, есть один хак, как можно это обойти, см. help netrw-ssh-hack. Может, в другой раз я перескажу эту статью из справки для полноты картины. Могу сказать, что мне проще войти по ssh и работать в Виме "там". Хотя если там старый Вим, то не знаю... А вот для ftp удаленное редактирование — штука небесполезная!

Один нюанс. Полезно задать

:set bufhidden=hide

и тогда файл не будет считываться повторно, если вы переключили окно или вкладку. Это полезно и с точки зрения скорости, и пароль вводить не надо лишний раз. Это переменная обычно пуста, а кроме hide там могут быть еще значения, но вряд ли они вам нужны: выгрузить буфер, удалить его и всё в таком роде.

Для FTP можно завести файл .netrc и хранить там адреса и пароли. Да, это идея рискованная, но если компьютер ваш и доступа к нему ни у кого нет, причем на удаленных машинах вы не держите чего-то совсем ценного, то можно. Всё равно FTP не слишком безопасный протокол. Это возможность FTP, а не Вим. Говорят, в Винде не поддерживается, но можно как-то настроить: читайте справку.

Кроме того, пароль и логин ftp сохраняются в переменных (s:netrw_passwd и g:netrw_uid) и вводить их на каждое действие не надо. Поменять их можно через функцию NetUserPass:

:call NetUserPass("uid","password")

причем можно опустить один или оба аргумента. Если аргументов нет, будут запрошены логин и пароль. Если задан логин, пароль предложат ввести. Если задать и то, и другое, то всё понятно, только это небезопасно. Пароль-то вводится невидимо, а в функции написан прямым текстом. Если заданы пустые строки, значения сбрасываются.

Я не часто пользуюсь этой возможностью (удаленным доступом), но знать о ней полезно. Файловый менеджер — другое дело, это очень удобно. Формально это этот же плагин netrw. В принципе, шарить по каталогам ftp можно прямо из Вим, почему бы и нет?

Удачи, коллеги!

Оглавление рубрики

Путеводитель по каналу