.png)
Tengo el siguiente tema personalizado activado con oh-my-zsh
(última versión de zsh
y oh-my-zsh
):
local return_code="%(?..%{$fg[red]%}%? %{$reset_color%})"
local user_host='%{$terminfo[bold]$fg[green]%}%n @ %m%{$reset_color%}'
local current_dir='%{$terminfo[bold]$fg[cyan]%} %~%{$reset_color%}'
local rvm_ruby=''
local git_branch='$(git_prompt_info)%{$reset_color%}'
PROMPT="${user_host} %D{[%a, %b %d %I:%M:%S]} ${current_dir} ${rvm_ruby} ${git_branch}
%B$%b "
RPS1="${return_code}"
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[yellow]%}‹"
ZSH_THEME_GIT_PROMPT_SUFFIX="› %{$reset_color%}"
He notado que en el mensaje, cada vez que tengo un alias para un directorio, muestra el nombre del alias como mi directorio actual en lugar de la ruta real. Si bien esta es una característica interesante, me gustaría desactivarla.
Soy relativamente nuevo en esto oh-my-zsh
y no estoy seguro de si se trata de una característica oh-my-zsh
o zsh
, pero ¿cómo puedo desactivarla?
Respuesta1
Elsecuencia de escape inmediata %~
(incluido en $current_dir
) se expande al directorio actual, teniendo en cuenta las abreviaturas. Las abreviaturas son:
~
para su directorio personal;~joe
para el directorio de inicio del usuariojoe
;~foo
para un directorio con nombre: el directorio con aliasfoo
conhash -d foo=…
;~[bar]
paradirectorio con nombre dinámico.
Puedes usar %/
en lugar de %~
. Esto nunca utiliza ninguna abreviatura de directorio.
Si quiere ser más sofisticado, puede ejecutar su propio código para determinar cómo se muestra el directorio actual. Un enfoque es utilizar una sustitución de parámetros dentro de la cadena del mensaje. Esto requiere laprompt_subst
opción a configurar, lo cual hace oh-my-zsh (de lo contrario setopt prompt_subst
:). El directorio actual siempre está disponible en el parámetro.PWD
. Aquí hay una versión simple que solo acorta su directorio de inicio a ~
:
local current_dir='%{$terminfo[bold]$fg[cyan]%} ${${PWD/#%$HOME/~}/#$HOME\//~/}%{$reset_color%}'
${${PWD/#%$HOME/\~}/#$HOME\//\~/}
significa: si $PWD
es exactamente igual a $HOME
, entonces establezca el resultado en ~
; de lo contrario, establezca el resultado en $PWD
; luego, si el resultado actual comienza con $HOME/
, reemplace este prefijo por ~/
; de lo contrario, deje el resultado sin cambios.
Un enfoque más claro es mantener un parámetro que contenga una versión impresa del directorio actual. Actualice este parámetro en elchpwd
función de enlace que se ejecuta en cada cambio de directorio actual. También inicialice ese parámetro en su .zshrc
.
Sólo hay una chpwd
función, así que no anules la de oh-my-zsh. Oh-my-zsh chpwd
llama a la función en la matriz chpwd_functions
, así que agrega la tuya a la matriz.
function my_update_pretty_PWD {
case $PWD in
$HOME(/*)#) pretty_PWD=\~${PWD#$HOME};;
*) pretty_PWD=$PWD;;
esac
}
chpwd_functions+=(my_update_pretty_PWD)
my_update_pretty_PWD
local current_dir='%{$terminfo[bold]$fg[cyan]%} ${pretty_PWD}%{$reset_color%}'
Si desea abreviar los directorios de inicio de los usuarios pero no los directorios con nombre, puede borrar los directorios de inicio en un subshell y usar el%
bandera de expansión de parámetrospara realizar las abreviaturas automáticas en el subshell.
function my_update_pretty_PWD {
pretty_PWD=$(hash -rd; print -lr -- ${(%)PWD})
}
O si prefiere el enfoque en línea:
local current_dir='%{$terminfo[bold]$fg[cyan]%} $(hash -rd; print -lr -- ${(%)PWD})%{$reset_color%}'
Respuesta2
La auto_name_dirs
opción es responsable de este comportamiento.
Utilice el comando unsetopt auto_name_dirs
para desactivarlo.