Замена фиксированной части PWD в приглашении tcsh

Моя подсказка в настоящее время отображается, как здесь:

[27 августа, 14:36] /x/y/z/w/u/v/dir1/dir2/dir3>

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

/x/y/z/w/u/v

с

$РАБОТА

поэтому в конечном итоге будет отображаться

[27 августа, 14:36] $WORK/dir1/dir2/dir3>

/x/y/z/w/t/u — это всегда тот же путь, по которому я обычно выполняю свою работу и для которого у меня установлена ​​локальная переменная $WORK (очень похоже на идею дома ~).

Прямое решение будет приветствоваться, поскольку я действительно мало знаю о настройке оболочки.


person Elad Shtiegmann    schedule 28.08.2017    source источник
comment
Не используйте тсш. Прочитайте программирование Csh считается вредным. Попробуйте перейти на zsh.   -  person Basile Starynkevitch    schedule 28.08.2017
comment
Я посмотрю на это, но в настоящее время мне нужно решение для tcsh.   -  person Elad Shtiegmann    schedule 28.08.2017
comment
Вы читали документацию tcsh? Вы должны прочитать его, а затем отредактировать свой вопрос о том, что вы пробовали. Я предполагаю, что нет простого решения (например, вам нужно немного потрудиться, чтобы найти его).   -  person Basile Starynkevitch    schedule 28.08.2017


Ответы (2)


Просто поместите эти строки в ~/.tcshrc:

set WORK='/x/y/z/w/u/v'
set dollar='$'
alias precmd 'printf "%b" "\e[36m"; date +"[%b-%d %H:%M] " | tr -d "\n";  [ `expr "$PWD" : "$WORK*"` -gt 0 ] && printf "%s" "$dollar$PWD" | sed "s|$WORK|WORK|" - || printf "%s" "$PWD"'
set prompt='%#%{\e[0;0m%} '

# The default tcsh ^L binding for screen clearing does not run precmd.
# This one does.
bindkey -s "^L" "clear\n"

precmd — это команда, которая запускается до того, как вам будет показано приглашение. Вы можете использовать его для настройки приглашения с помощью других команд, доступных в вашей системе.

Что касается цветов, вы можете добавить их, используя специальные цветовые последовательности, такие как \e[36m (подробнее здесь< /а>). В моем примере я включил нежирный голубой цвет для всей подсказки, добавив printf "%b" "\e[36m"; к определению precmd. Таким образом вы добавляете свои собственные цвета, просто поместите где-нибудь похожую команду printf. Я отключил цвета (вернув цвет текста терминала по умолчанию), добавив %{\e[0;0m%} к подсказке, конец которой устанавливается переменной prompt. Я использую %{...%}, потому что именно так вы меняете цвета внутри при установке переменной prompt. Таким образом, в основном вы должны использовать printf "%b" "..."; для псевдонима precmd и %{...%} для переменной prompt.


Я использовал их для справки:

Протестировано на Ubuntu 17.04 с tcsh --version переустановкой tcsh 6.20.00 (Astron) 2016-11-24 (x86_64-unknown-linux) options wide,nls,dl,al,kan,sm,rh,nd,color,filec.

person Mateusz Piotrowski    schedule 28.08.2017
comment
Спасибо, это работает идеально! Единственное, что я забыл упомянуть, это то, что я хотел бы раскрасить это, используя цвет %{\e[36m%}. Я пытался немного, но не мог найти место для него. Не могли бы вы добавить это к своему ответу? - person Elad Shtiegmann; 29.08.2017
comment
Большое спасибо, это здорово. - person Elad Shtiegmann; 30.08.2017

Это просто пользовательское приглашение, которое, вероятно, может дать вам представление о том, как создать/улучшить свое:

set COLOR1="%{\e[0;32m%}"
set COLOR2="%{\e[0;33m%}"
set COLOR3="%{\e[0;36m%}"
set COLOR4="%{\e[0;0m%}"
set COLOR5="%{\e[0;33m%}"
set prompt="$COLOR2\[$COLOR3%n@%M$COLOR2\:$COLOR1%~$COLOR2\] [%p %d]\n$COLOR5>$COLOR4 "
set promptchars = "%#"

Приглашение будет примерно таким:

[user@host:/current/dir] [current date]
>

Как и переменные COLOR, вы можете установить WORK.

Кроме того, этот ответ может помочь: https://stackoverflow.com/a/20871994/1135424

person nbari    schedule 28.08.2017