Как изменить содержимое строки приглашения conda - PullRequest
0 голосов
/ 11 июля 2020

Как я могу отредактировать поведение приглашения conda, не касаясь обычного приглашения? Я хочу сохранить поведение conda prepend-to-PS1, но изменить строку, которая будет добавлена ​​в начало.

Вопрос как изменить поведение conda 'source activate' ps1 очень похож. Однако решение состоит в том, чтобы вставить префикс conda в середину PS1 и / или отредактировать PROMPT_COMMAND. Это нарушает инкапсуляцию, которую я хочу, и очень опасно, когда поведение prepend-to-PS1 все еще желательно.

Моя обычная строка приглашения выглядит так:

previous output
previous output

user@short-domain fullpath
$

Это то поведение, которое я хочу, когда среда conda не активна. При активной среде conda это становится:

previous output
previous output
(<env-name-here>)
user@short-domain fullpath
$

Мне не нравится, как это устраняет пустую строку между выводом предыдущей команды и новым приглашением. В отличие от вопроса, который я упомянул выше, я специально хочу, чтобы (<env-name-here>) в отдельной строке:

previous output
previous output

(<env-name-here>)
user@short-domain fullpath
$

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

1 Ответ

0 голосов
/ 11 июля 2020

Существует правильный и очень простой способ сделать это, используя собственные параметры конфигурации conda.

Отредактируйте файл .condarc, чтобы он содержал строку:

env_prompt: \n({default_env})

или выполните команду:

$ conda config --system --set env_prompt "\n({default_env})"

Любой из этих способов позволит добиться желаемого эффекта для новых терминалов. Обратите внимание, что опция --system может быть нежелательной для многих случаев использования. Подробнее см. Объяснение ниже.

Из документации conda

Эта функция может быть неуловимой, если вы не знаете, где искать. Самый естественный способ найти его - начать с раздела конфигурации в руководстве пользователя conda.

«Использование файла конфигурации .condar c conda» обзор сообщает нам:

Файл конфигурации conda, .condarc, является дополнительным файлом конфигурации времени выполнения, который позволяет опытным пользователям настраивать различные аспекты conda, такие как каналы, по которым он ищет пакеты, прокси настройки и каталоги среды. Для всех параметров конфигурации conda см. Страницу конфигурации .

На странице конфигурации описываются желаемые настройки вместе со значением по умолчанию:

# env_prompt (str)
#   Template for prompt modification based on the active environment.
#   Currently supported template variables are '{prefix}', '{name}', and
#   '{default_env}'. '{prefix}' is the absolute path to the active
#   environment. '{name}' is the basename of the active environment
#   prefix. '{default_env}' holds the value of '{name}' if the active
#   environment is a conda named environment ('-n' flag), or otherwise
#   holds the value of '{prefix}'. Templating uses python's str.format()
#   method.
# 
env_prompt: '({default_env}) '

Команда conda config

Команда conda config весьма полезна сама по себе. Выполнение

$ conda config --describe

показывает ту же информацию, что и страница конфигурации .

Поскольку мой файл .condarc находится в нестандартном месте, я использую --system опция для conda config, чтобы предотвратить создание conda нового файла .condarc в моем домашнем каталоге. Из conda config --help:

Config File Location Selection:
  Without one of these flags, the user config file at '$HOME/.condarc' is used.

  --system              Write to the system .condarc file at
                        '<my-anaconda-install-path>/.condarc'.
  --env                 Write to the active conda environment .condarc file
                        (<current-env-path>). If no
                        environment is active, write to the user config file
                        ($HOME/.condarc).
  --file FILE           Write to the given file.
...