Временный .vimrc

Во-первых, обратите внимание, что синтаксис для закрытия 5>&- или 6<&-В зависимости от того, читается ли дескриптор файла из записи или из чтения. Кажется, существует опечатка или форматирующий незначительный сбой в том сообщении в блоге.

Вот прокомментированный сценарий.

exec 5>/tmp/foo       # open /tmp/foo for writing, on fd 5
exec 6&5         # write to fd 5, i.e., /tmp/foo
done                  # 

Здесь нет никакого закрытия. Поскольку все вводы и выводы идут в то же место в этом простом примере, использование дополнительных дескрипторов файлов не необходимо. Вы могли записать

cat /tmp/foo

Используя явные дескрипторы файлов становится полезным, когда Вы хотите записать в несколько файлов в свою очередь. Например, рассмотрите сценарий что выходные данные в файл вывода данных и данные регистрации к файлу журнала и возможно сообщениям об ошибках также. Это означает три канала вывода: один для данных, один для журналов и один для ошибок. С тех пор существует только два стандартных дескриптора для вывода, одна треть необходима. Можно звонить exec открыть выходные файлы:

exec >data-file
exec 3>log-file
echo "first line of data"
echo "this is a log line" >&3
…
if something_bad_happens; then echo error message >&2; fi
exec >&-  # close the data output file
echo "output file closed" >&3

Комментарий об эффективности входит, когда у Вас есть перенаправление в цикле, как это (предположите, что файл пуст для начала):

while …; do echo $a >>/tmp/bar; done

При каждом повторении открывается программа /tmp/bar, ищет в конец файла, добавляет некоторые данные и закрывает файл. Более эффективно открыть файл раз и навсегда:

while …; do echo $a; done >/tmp/bar

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

exec >/tmp/bar
while …; do echo $a; done

Вы найдете несколько других примеров перенаправления путем просмотра io-redirection наклейте этот сайт.

8
19.11.2010, 17:40
3 ответа

Предположим, что у Вас есть этот другой набор настроек в /tmp/myvimrc. Если мое чтение man vim корректно, можно запустить энергию с этого набора настроек с помощью следующего:

$ vim -u /tmp/myvimrc

Таким образом, для создания этого опцией для остальной части сессии я создал бы функцию, которая устанавливает это как псевдоним для vim. Таким образом, в bash Я вставил бы что-то вроде этого мой .bashrc файл:

function vimswitch {
    alias vim='vim -u /tmp/myvimrc'
}

Затем когда я хотел свои новые настройки энергии, я буду просто работать:

$ vimswitch

Обратите внимание, что я не сохранил бы myvimrc в /tmp так как это могло легко быть убрано на перезагрузку. Если Вы используете оболочку кроме bash это должно все еще быть возможно, но синтаксис мог отличаться немного.

9
27.01.2020, 20:08
  • 1
    ! Это - то, что я называю движением целых 9 ярдов. –  Robert Gowland 18.11.2010, 20:07

Можно использовать переменную среды VIMINIT для переопределения использования обычного .vimrc при хранении других частей процесса инициализации. VIMINIT должен быть установлен на одну или несколько команд экс-стиля (команды “двоеточия”; используйте канал (|) разделить несколько команд), не только путь к другому файлу инициализации.

VIMINIT='so /tmp/myvimrc'; export VIMINIT

vim whatever # uses /tmp/myvimrc, not ~/.vimrc

Основное различие от использования -u это, VIMINIT все еще позволит другим частям процесса инициализации использоваться (например, система vimrc, evim.vim (если применимо), и так далее).

9
27.01.2020, 20:08
  • 1
    К автоматической установке VIMINIT переменная при входе через ssh Вы могли использовать файл ~/.ssh/environment. Этот файл мог использоваться только для установки переменных среды, поэтому только запись, которую необходимо добавить: VIMINIT='so /tmp/myvimrc'. Этот файл обрабатывается только когда в sshd параметре конфигурации PermitUserEnvironment установлен на yes, таким образом, необходимо протестировать самостоятельно, если это работает на Вас, или спросите своего администратора, если это, включают. –  pbm 18.11.2010, 23:46

Когда Вы регистрируетесь на пути ssh, ssh устанавливает переменную $SSH_CONNECTION. Ваш .bashrc мог проверить на этот var и если он установлен псевдоним наборов, который Вы хотите:

if [ -n "$SSH_CONNECTION" ]
then
        alias vim='vim -u /tmp/myvimrc'
fi
4
27.01.2020, 20:08

Теги

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