Как я заставляю удар уважать мою физическую структуру каталогов? (И аналогично для Emacs?)

Если в ударе, я делаю"set -P"затем удар следует за "физической структурой каталогов" при выполнении"pwd"и"cd .."и т.д., а не "логическая единица", которая могла бы быть определена через символьные ссылки. К сожалению, удар все еще не повинуется физической структуре каталогов для завершения имени файла. Как я могу заставить удар уважать мои полномочия по этой проблеме?

Спасибо!
|> ouglas

P.S. К сожалению, та же проблема теперь сокрушила Emacs для вводных файлов и т.д. Если кто-либо также знает, как также сказать Emacs уважать мою физическую структуру каталогов, то я также хотел бы знать ответ на это.

P.P.S. Я не знаю, кто решил, что наличие некоторых программ пытается понять Вашу "логическую структуру каталогов", была хорошая идея, но это не! Не, если Вы не можете убедить каждую программу в мире делать вещи, этот путь, начиная с наличия некоторых программ используют Вашу физическую структуру каталогов и наличие другого использования, Ваша логическая структура каталогов является рецептом для беспорядка и раздражения.

4
задан 05.01.2010, 23:33

2 ответа

Спасибо за предыдущие ответы. Но, на самом деле, как оказалось,"set -P"делает задание очень хорошо совершенно отдельно, мятежник мой исходный запрос по проблеме.

Когда я первоначально испытывал это, я, должно быть, так или иначе получил удар в запутанное состояние, где завершение имени файла не уважало"set -P"установка. Но теперь с новым ударом, это все хорошо работает".set -P"кажется, помещает удар в "физическую структуру каталогов" режим последовательно всюду по удару.

3
ответ дан 07.12.2019, 20:48

Это могло бы получить Вас часть пути там.

Использовать type -a _expand и сравните его вывод с функцией ниже. Существующая функция должна соответствовать части, которая это после первого else ниже. В противном случае можно перенести то, что Вы имеете во внешнем if...else поскольку Вы видите его здесь.

Вставьте его при подсказке Bash для тестирования. Затем если Вы удовлетворены, вставьте его Ваш ~/.bashrc файл для переопределения функционального определения в /etc/bash_completion (вместо того, чтобы редактировать его непосредственно).

_expand ()
{
    if [[ $- == *P* && -L "$cur" && -d "$cur" ]]; then
        cd "$cur";
        eval cur="$PWD";
        cd - > /dev/null;
    else
        if [[ "$cur" == \~*/* ]]; then
            eval cur=$cur;
        else
            if [[ "$cur" == \~* ]]; then
                cur=${cur#\~};
                COMPREPLY=($( compgen -P '~' -u $cur ));
                [ ${#COMPREPLY[@]} -eq 1 ] && eval COMPREPLY[0]=${COMPREPLY[0]};
                return ${#COMPREPLY[@]};
            fi;
        fi;
    fi
}

Это осуществляет контрейлерные перевозки на функции расширения тильды заполнения клавишей Tab Bash.

Теперь можно сделать

ls -l symdir<TAB>

и Вы будете видеть

ls -l /dest/dir<CURSOR>
1
ответ дан 07.12.2019, 20:48

Теги

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