Два разных конфига vim для один пользователь на основе псевдонима?

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

Основная суть оболочки - это выполнение команд. Команда open-bracket [ - это команда, которая выполняет один тест¹. Вы даже можете записать ее как test (без последней закрывающей скобки). Операторы || и && - это операторы оболочки, они объединяют команды, а не тесты.

Поэтому, когда вы пишете

[ [ "$A" -eq "0" ] || [ "$B" -ne "0" ] ] && [ "$C" -eq "0" ]

это разбирается как

[ [ "$A" -eq "0" ] ||
[ "$B" -ne "0" ] ] &&
[ "$C" -eq "0" ]

что то же самое, что и

test [ "$A" -eq "0" ||
test "$B" -ne "0" ] &&
test "$C" -eq "0"

Заметили несбалансированные скобки? Да, это нехорошо. Ваша попытка с круглыми скобками имеет ту же проблему: ложные скобки.

Синтаксис для объединения команд в группы - это скобки. Способ разбора скобок требует, чтобы перед ними была полная команда, поэтому вам придется завершить команду внутри скобок новой строкой или точкой с запятой.

if { [ "$A" -eq "0" ] || [ "$B" -ne "0" ]; } && [ "$C" -eq "0" ]; then …

Существует альтернативный способ, который заключается в использовании двойных скобок. В отличие от одинарных скобок, двойные скобки - это специальный синтаксис оболочки. Они разграничивают условные выражения. Внутри двойных скобок можно использовать круглые скобки и такие операторы, как && и ||. Поскольку двойные скобки - это синтаксис оболочки, оболочка знает, что когда эти операторы находятся внутри скобок, они являются частью синтаксиса условного выражения, а не частью синтаксиса обычной команды оболочки.

if [[ ($A -eq 0 || $B -ne 0) && $C -eq 0 ]]; then …

Если все ваши тесты являются числовыми, есть еще один способ - разграничение арифметических выражений. Арифметические выражения выполняют целочисленные вычисления с очень похожим на C синтаксисом.

if (((A == 0 || B != 0) && C == 0)); then …

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

[ можно использовать в обычном sh. [[ и (( специфичны для bash (а также ksh и zsh).

¹ Он также может объединять несколько тестов с помощью булевых операторов, но это громоздко в использовании и имеет тонкие подводные камни, поэтому я не буду это объяснять.

3
14.09.2016, 18:09
2 ответа

Каждый из вас может хранить свои файлы конфигурации в разных каталогах.

/home/user1/.vimrc

/home/user2/.vimrc

Затем создайте псевдоним в root ~ / .bashrc, чтобы использовать разные конфигурации.

alias vi='vim -u  /home/user1/.vimrc'
alias vim='vim -u /home/user2/.vimrc'

Если у вас возникли проблемы с загрузкой плагинов, убедитесь, что ваши ссылки в ваших файлах .vimrc не используют $ HOME или ~ / для ссылки на какие-либо файлы, потому что когда root пытается их прочитать, он будет искать в / root / путь / к / файлу

2
27.01.2020, 21:18

Я знаю, что это не прямой ответ на ваш вопрос, но вы когда-нибудь задумывались о создании собственного пользователя root? Вы можете создать пользователя с идентификатором пользователя 0. Он действует как учетная запись root, но это ваш собственный пользователь . Вы можете иметь свои настройки vim, другую оболочку и т. Д.

useradd -u 0 --non-unique yourroot

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

2
27.01.2020, 21:18

Теги

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