В нормальных оболочках стиля Границы, таких как Оболочка Bourne, тире, ksh и удар, синтаксис $variable
означает, “принимают значение переменной, разделяют его на отдельные слова где символы от IFS
появитесь, и рассматривайте каждое слово как подстановочный шаблон имени файла и разверните его, если оно соответствует одному из большего количества файла”. Если variable
массив, это происходит с первым элементом массива, и другие элементы проигнорированы.
В zsh, синтаксисе $variable
означает, “принимают, значение переменной, кроме удаляют его, если это пусто”. Если variable
массив, это происходит со всеми элементами массива. Энтузиасты Zsh считают zsh путь выше.
В zsh можно записать $=variable
выполнить разделение слова. Это не лучший способ сделать то, что Вы делаете, все же. Ваша функция удара не справляется с пробелом в именах файлов и использованием $=variable
в zsh не был бы также. Вот другой способ проанализировать аргумент, который работает и в ударе и в zsh и справляется с любым символом кроме :
в имени файла. Если аргумент содержит два двоеточия, то все после первого двоеточия удалено, и часть между первым двоеточием и вторым двоеточием добавляется как отдельный аргумент, которому предшествует a +
знак. Это немного длиннее, чем Ваш код, но менее твердо понять, и это не дросселирует при первой подсказке пространства в имени файла.
vl () {
local suffix
case $1 in
*:*:*) suffix=${1#*:};; set -- "${1%%:*}" "+${suffix%%:*}";;
esac
vim "$@"
}
Обходной путь для GNOME до версии 3.11 (, например. GNOME 3.8 в Ubuntu 14.04):
gsettings set org.gnome.settings-daemon.plugins.remote-display active false
gsettings set org.gnome.desktop.interface enable-animations false