Как привести .vimrc в чувство когда я SSH?

Существует коммерческий веб-сервер, названный Zeus, который вполне широко используется в отраслях промышленности содержания, характеризуемых большим объемом статическое содержание. IIRC это на основе асинхронного. Ввод-вывод, который очень эффективен на ЦП. Это могло бы сделать то, что Вы хотите, но это не свободно.

34
задан 29 June 2009 в 21:56
16 ответов

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

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.

24
ответ дан 28 November 2019 в 19:52
  • 1
    Я предполагаю, что это столь хорошо, как это добирается. Прием - то, что я должен установить репозиторий на машине, которая доступна от всех других машин. С топологией защищенной сети, that' s не всегда легкий. –  Apreche 30 June 2009 в 18:16

У меня есть та же ситуация, но это не просто" .vimrc". У меня также есть вещи как

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

Мое решение (запустился 30 лет назад с "dist" первоначально!) должен настроить ночной крон к rsync минимальная домашняя конфигурация ко всем машинам, я продолжаю работать, так, чтобы он обновил ночью.

Тот путь все другие машины, с которыми я работаю, усовершенствованы! Я могу просто добавить, что новая машина в 'учетные записи' перечисляет и делает единственное распределение машины для начинания его.

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

ПРИМЕЧАНИЕ я только позволяю пароль меньше ssh вход в систему от одной 'домашней' машины до всего остальные, никогда назад снова! Любой крест ssh защищен паролем.

0
ответ дан 28 November 2019 в 19:52

Я записал простой инструмент для этого, которое позволит, Вы к исходно транспортируете свой .vimrc файл каждый раз, когда Вы ssh, при помощи встроенных опций конфигурации SSHd нестандартным способом.

Никакое дополнительное svn, scp, copy/paste, и т.д. требуемый.

Это просто, легко, и работает по умолчанию над всеми конфигурациями сервера, которые я протестировал до сих пор.

https://github.com/gWOLF3/viSSHous

1
ответ дан 28 November 2019 в 19:52

Вы могли бы рассмотреть ОЖИДАТЬ сценарий, который позволяет Вам устанавливать свой путь и среду (как переменные EXRC) после нажатия определенного нажатия клавиши. Не должно быть слишком длинным, прежде чем кто-то отправит подобный сценарий.

То, когда Ваш номер ферм сервера больше чем несколько дюжин (думают тысячи) затем наличие чего-то легко устанавливает Вашу среду на 'девственном' поле, является настоящим спасителем

Часто, когда я вхожу в поле, оно создает мой homedir впервые!

-1
ответ дан 28 November 2019 в 19:52

Если Вы похожи на меня и имеете много машин разработки (Виртуальные машины также) по различным причинам, можно объединить 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, это делает машины разработки хранения в синхронизации легче. Я использую мерзавца. Аутентификация с мерзавцем через ssh так ssh справка ключей здесь также. Отметьте в этой точке, Вы, возможно, использовали что-то как nfs. Я все еще был бы поклонником RCS по причине, которую я упоминаю ниже.

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

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

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

  1. средство экономии времени
  2. легче сохранить конфигурации и персональные сценарии машин разработки в синхронизации
  3. управление изменениями в сценариях и конфигурациях.
1
ответ дан 28 November 2019 в 19:52

Тот же самый ответ как sunny256, но мерзавец использования вместо SubVersion.

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

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

4
ответ дан 28 November 2019 в 19:52

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

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

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

connectString = arg0  #username@ipaddress

scp -i ~/.ssh/indentity connectString:~/ ~/.vimrc
ssh -i ~/.ssh/indentity connectString
4
ответ дан 28 November 2019 в 19:52
  • 1
    ключи ssh решат th проблему незашифрованного пароля. –  LiraNuna 29 June 2009 в 22:19
  • 2
    какой инструмент Вы использовали бы для создания доли NFS? –  Wadih M. 29 June 2009 в 22:26
  • 3
    @LiraNuna - кажется ловлей меня, прежде чем у меня был свой ' duh' момент и отредактированный мое сообщение. @Wadih - NFSD обычно устанавливается на ' отклоните системы по умолчанию. Можно также монтировать доли NFS по умолчанию (обычно) также. –  moshen 29 June 2009 в 23:11
  • 4
    NFS, совместно использующий, является хорошей идеей, но вероятно столкнется с ограниченными возможностями развернуть такие вещи, особенно в firewalled средах или местоположениях, где Вы не хотите изменять рабочие серверы (особенно с NFS) –  ericslaw 30 June 2009 в 04:18
  • 5
    Вы - корректный ericslaw. Я сделал предположение, что они были несколькими машинами в единой сети. –  moshen 30 June 2009 в 18:05

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

#!/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

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

EDIT3

Я нашел его! Можно сделать это для запуска энергии с .vimrc, взятого от хоста ссылки:

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

Опция '-c' выполняет команду прямо после запускающейся энергии.

Можно создать псевдоним в оболочке выбора постараться не вводить. В ударе это было бы похоже на это:

alias vim="vim -c ':source scp://you@your_computer//yourpath/.vimrc'"
18
ответ дан 28 November 2019 в 19:52

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

В vim/gvim, выполненном:

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

или запустите энергию как это:

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

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

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

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

Для большего количества информации проверьте следующее учебное руководство.

44
ответ дан 28 November 2019 в 19:52
  • 1
    +1 для scp://подсказывают, но я думаю, что это решение могло быть немного громоздким, если необходимо скопировать путь каждый раз, когда Вы редактируете файл. –  chmeee 29 June 2009 в 23:38
  • 2
    Да, это является слишком громоздким. Я должен сделать большой ввод по абсолютному адресу вокруг удаленных машин для нахождения файлов, которые я хочу и часто должен редактировать с sudo полномочием. –  Apreche 30 June 2009 в 18:15

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

1
ответ дан 28 November 2019 в 19:52

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

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

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

3
ответ дан 28 November 2019 в 19:52

Я использую https://github.com/andsens/homeshick для управления моими точечными файлами и хранения их на github.

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

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

2
ответ дан 28 November 2019 в 19:52

sshrc решает эту проблему. Вы помещаете свой .vimrc в ~ / .sshrc.d /, а затем добавляете export VIMINIT = "let \ $ MYVIMRC = '$ SSHHOME / .sshrc.d / .vimrc' | source \ $ MYVIMRC" в `/.sshrc.

1
ответ дан 28 November 2019 в 19:52

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

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

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

.
10
ответ дан 28 November 2019 в 19:52

Использование переменной VIMINIT:

export VIMINIT='set number'

и пересылка ее на удаленный сервер:

ssh remoteuser@remoteserver -o SendEnv=LC_VIMINIT -t 'export VIMINIT=$LC_VIMINIT && bash'

легко использовать .bash_profiles или .bashrc

export VIMINIT='
set number
'

export LC_VIMINIT=$VIMINIT

sshh (){
ssh -o SendEnv=LC_VIMINIT $1 -t 'export VIMINIT=$LC_VIMINIT && bash'

Теперь попробуйте запустить vim на удаленном сервере, используя sshh для соединение:

sshh remoteuser@remoteserver

При желании Вы также можете перенести свои плагины на удаленный сервер:

export LC_VIMINIT="
set number
set nocompatible
filetype off
set rtp+=~/.[USER]_vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'


set shell=/bin/bash
call vundle#end()
filetype plugin indent on
"

export VIMINIT=$LC_VIMINIT

sshh (){
        if [[ $1 ]]; then
                ssh-copy-id $1 &>/dev/null &&
                rsync -lzr --partial --del ~/.[USER]_vim ${1}: &&
                ssh -o SendEnv=LC_VIMINIT $1 -t 'export VIMINIT=$LC_VIMINIT && bash';
        else
                echo "Provide remote user@host";
        fi
}
0
ответ дан 28 November 2019 в 19:52

Это было реализовано с помощью следующей строки bash. Поскольку это выполняется с помощью подстановки процесса, временные файлы не создаются.

ssh -t user@host '
bash --rcfile <(
    echo -e ' $(cat <(echo "function lvim() { vim -u <(echo "$(cat ~/.vimrc|base64)"|base64 -d) \$@ ; }") \
                    ~/dotfiles/{.bashrc,sh_function,sh_alias,bash_prompt} \
                    <(echo -e alias vim=lvim) | \
                    base64 
               ) ' \
    |base64 -d)'

https://gist.github.com/blacknon/a47083f3bbbd0374998bdf7e3b3396cc

-1
ответ дан 28 November 2019 в 19:52

Теги

Похожие вопросы