Вопрос: Как принести .vimrc вокруг, когда я SSH?


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


33
2018-06-29 18:56


Источник


@ duffbeer703: да, как set background=dark или set background=light, что-то, что нет Распределение Linux распространяется и полностью ненавязчивый для пользователя. </ Сарказм> - Hubert Kario
Не прочитав ответы, я чувствую, что это теоретически возможно, поскольку ssh-agent и x-term могут быть перенесены, но, с другой стороны, они специально обрабатываются ssh, и я предполагаю, что существует множество способов обхода проблем с сумасшедшими краями , - trysis


Ответы:


Я чувствую твою боль. У меня есть все мои файлы ~ /.* rc под управлением версии (Subversion), отлично работает с тех пор, как я начал работать в 1998 году, используя CVS. Один из способов сделать это - проверить все ваши файлы rc, как это, когда вы стоите в своем домашнем каталоге:

svn co svn+ssh://user@host/path/to/repo/trunk/home/user .
A    .signature
A    .vimrc
A    .bashrc
A    .screenrc
A    .psqlrc
[...]
Checked out revision 7645.

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


22
2018-06-29 19:41



Наверное, это так хорошо, как получается. Хитрость в том, что мне нужно настроить репозиторий на машине, доступной из всех других машин. С защищенной сетевой топологией это не всегда легко. - Apreche
Я начал делать это недавно, это потрясающе. Я не знаю, как я выжил без него. - richo
Возможно, используйте git или другую систему управления распределенной версией. В этом случае достаточно иметь доступ к машине, на которой проверяются файлы конфигурации. - ptman


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

В vim / gvim запустите:

:e scp://remoteuser@server.tld//path/to/document

или запустить vim следующим образом:

vim scp://remoteuser@server.tld//path/to/document

Это открывает файл сглаживанием на месте (он фактически копирует файл локально), и при его сохранении он отправляет отредактированный файл обратно на сервер для вас.

Он запрашивает пароль ssh, но это может быть упрощено с помощью ключей ssh.

Как отмечали другие, единственным недостатком этого метода является то, что вы не получаете конкуренции за путь / файл, как при работе непосредственно на машине.

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


42
2018-06-29 19:30



+1 для подсказки scp: //, но я думаю, что это решение может быть немного громоздким, если вам нужно копировать путь каждый раз, когда вы редактируете файл. - chmeee
Да, это слишком громоздко. Я должен много болтать вокруг удаленных машин, чтобы найти файлы, которые я хочу, и часто приходится редактировать с привилегиями sudo. - Apreche
+1 это работает очень хорошо для меня. благодаря :) - Darragh Enright
Бывают случаи, когда вам необходимо войти в основной сервер (login.example.com), а затем оттуда войти на локальный сервер (top.secret.example.com) - puk
Он отлично работает, если вы монтируете удаленную файловую структуру в свой локальный каталог, например, с помощью fusermount. - relet


Вы можете сделать скрипт bash для его автоматического копирования при каждом входе в систему, например:

#!/usr/bin/env bash

scp ~/.vimrc $1:
ssh $1

Например, вы можете называть его ssh_vim. Это не идеальное решение, но решит вашу проблему.

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

EDIT1

В соответствующей заметке вы также можете подключить файловую систему удаленного компьютера к sshfs. Таким образом, вы получаете выгоду от своей среды и инструментов (не только .vimrc), и у вас есть завершение оболочки (что у вас нет с помощью scp: //).

EDIT2

Я только что узнал, что вы можете загрузить файл .vimrc с помощью scp: //, например:

:source scp://you@your_computer//yourpath/.vimrc

Это работает из командной строки vim, но на данный момент я не знаю, как его автоматизировать. Кажется, он не работает ни с переключателем -u, ни с .vimrc, ни с $ VIMINIT.

EDIT3

Я нашел это! Вы можете сделать это, чтобы запустить vim с помощью .vimrc, взятого из вашей основной ссылки:

vim -c ':source scp://you@your_computer//yourpath/.vimrc'

Параметр «-c» выполняет команду сразу после запуска vim.

Вы можете создать псевдоним в своей оболочке, чтобы избежать ввода. В bash это будет так:

alias vim="vim -c ':source scp://you@your_computer//yourpath/.vimrc'"

15
2018-06-29 19:24



Это работает только в том случае, если компьютер, который вы ssh'ing в может подключиться к компьютеру, на котором вы находитесь из, Это не всегда так, например, если ваш компьютер находится за NAT. - trysis


Если вы используете аутентификацию с открытым ключом, вы можете использовать это в своем ~/.ssh/config:

Host *
   PermitLocalCommand yes
   LocalCommand bash -c 'scp -P %p %d/.vimrc %u@%n: &>/dev/null &'

Мне нравится это лучше, чем предлагаемый выше скриптовый трюк, поскольку он не испортил вызов ssh (при указании дополнительных параметров и т. д.)


7
2018-05-22 13:18





Несколько решений:

1) Создайте общий ресурс NFS для вашей домашней папки и сопоставьте его в нескольких местах.

2) Создайте небольшой скрипт, чтобы направить ваш .vimrc на сервер, к которому вы подключаетесь, с файлом идентификатора / ключа. Он может выглядеть примерно так (псевдокод):

connectString = arg0  #username@ipaddress

scp -i ~/.ssh/indentity connectString:~/ ~/.vimrc
ssh -i ~/.ssh/indentity connectString

4
2018-06-29 19:15



ssh ключи решат проблему с открытым текстом. - LiraNuna
какой инструмент вы бы использовали для создания общего ресурса NFS? - Wadih M.
@LiraNuna - кажется, ты поймал меня, прежде чем у меня появился момент «духа» и отредактировал мой пост. @Wadih - NFSD обычно устанавливается по умолчанию в системах nix. Вы также можете монтировать общие ресурсы NFS по умолчанию (обычно). - moshen
Совместное использование NFS - хорошая идея, но, скорее всего, столкнется с ограниченной способностью развертывать такие вещи, особенно в средах с защитой от брандмауэра или в местах, где вы не хотите изменять производственные серверы (особенно с NFS) - ericslaw
Вы правы. Я сделал предположение, что это несколько машин в одной сети. - moshen


Тот же самый ответ, что и sunny256, но использует git вместо SubVersion.

Храните одну основную ветку с файлами, которые являются общими для всех компьютеров, и имеют одну ветвь для каждого нового компьютера.

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


4
2018-06-30 05:10



+1 Небольшой вопрос: интересно, лучше ли использовать внешние определения для общих файлов в подрывной деятельности? Таким образом, вы можете иметь их в одном месте и забирать в любую ветку - Eugene Yarmash


Я знаю, что это старый поток, но в одном случае я использую sshfs, который монтирует файловую систему поверх плавкого предохранителя. Локальный vim делает все редактирование, поэтому нет причин копировать .vimrc.

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

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


2
2018-06-25 19:34





я использую https://github.com/andsens/homeshick управлять моими точками и хранить их на github.

Homeshick написан в 100% bash и помогает вам управлять «замками», которые являются просто git-репозиториями, которые содержат каталог / home /. Он имеет команды для перемещения существующих файлов точек в репо и замены их символическими ссылками. И символизировать все файлы в репо в ваш домашний каталог на новом компьютере.

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


2
2017-11-01 15:12



Вы можете добавить информацию из этой ссылки? Это улучшит ответ и предоставит информацию, если связь сломается. - Dave M
Я объяснил некоторые операции и рассуждения. Я не видел значения при копировании документации. - Aaron McMillin


Если вы похожи на меня и имеете множество машин для разработки (Virtual Machines) по разным причинам, вы можете комбинировать ssh-ключи, интеллектуальный bash_profile и RCS по вашему выбору.

Я бы второй использовал nfs / samaba / sshfs. Один откат - если у вас нет доступа к сети все время, то вы не можете получить доступ к тем, что вам нужно (полет, отсутствие Wi-Fi, межсетевые экраны, проблемы с маршрутизацией и т. Д.). Машины, которые я держу в синхронизации, не всегда доступны одновременно, но я хочу обмениваться информацией между ними.

Следующее - это то, как я обдумывал это, заимствуя много идей из Интернета.

.bash_profile может иметь что-то вроде этого

$HOME/bin/shell_ssh_agent

Я получил это из нескольких мест, но теперь не могу найти ссылку на него. Файл shell_ssh_agent:

#!/bin/bash

SSH_ENV=$HOME/.ssh/environment

#echo "starting"

function start_agent {
    #echo "reaping agents"
    killall ssh-agent
    #echo "Initialising new SSH agent..."
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
    #echo succeeded
    chmod 600 ${SSH_ENV}
    . ${SSH_ENV}
    /usr/bin/ssh-add;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
    . ${SSH_ENV}
    #echo "sourced ssh env"
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent > /dev/null || { start_agent; }
else
    start_agent;
fi

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

Поместите все ваши скрипты в RCS, это упростит синхронизацию машин разработки. Я использую git. Аутентификация с помощью git осуществляется через ssh, поэтому ssh-ключи тоже помогают. Обратите внимание, что в этот момент вы могли бы использовать что-то вроде nfs. Я все еще был бы поклонником RCS по той причине, о которой я упоминал ниже.

Вариант использования

  1. Логин в первый раз, ключи получают настройку
  2. если RCS не настроен, проверьте свои личные скрипты (и обновите / слейте, когда это необходимо, это может даже быть частью вашего .bash_profile, если вы этого захотите)
  3. редактировать vimrc, специальные скрипты и т. д. и передавать их
  4. при регистрации на других машинах выполняется обновление / слияние / проверка. Это держит все в синхронизации; т.е. больше не копировать файлы, которые иногда вы топаете, и вы этого не хотели.
  5. в качестве побочного преимущества вы получаете силу RCS. Я иногда делаю неблагоприятные изменения в сценариях или конфигах и должен откатываться назад и тому подобное.

Что-то, что я хочу попробовать, - это перенести начальный логин / настройку в make-файл, который я копирую на новую машину. Затем make-файл может выполнить настройку ваших ключей, RCS и т. Д. Очевидно, что здесь есть некоторые накладные расходы, но если вы в конечном итоге настроите множество машин, это:

  1. экономия времени
  2. упростить синхронизацию конфигураций и личных сценариев машин разработки
  3. управление изменениями в сценариях и конфигах.

1
2018-06-29 20:13





Я использую make-файл, в котором есть список всех серверов, на которые я вхожу, и когда я делаю изменения на своей локальной машине, «make» запускается с использованием файла makefile автоматически, который обновляет все серверы с любыми изменениями или любыми плагинами


1
2018-01-28 07:51