Mac OS X: ¿no se encuentran los colores de dir?

19

Acabo de cambiar a un Macbook Air. Instalé zsh usando homebrew, pero cuando uso parte del código que tenía (originalmente) en mi .zshrc, aparece un error que dice eso .dircolors was not found.

A continuación se muestra el código en cuestión:

zstyle ':completion:*' auto-description 'specify: %d'
zstyle ':completion:*' completer _expand _complete _correct _approximate
zstyle ':completion:*' format 'Completing %d'
zstyle ':completion:*' group-name ''
zstyle ':completion:*' menu select=2
eval "$(dircolors -b)"
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*' list-colors ''
zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s
zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=* l:|=*'
zstyle ':completion:*' menu select=long
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
zstyle ':completion:*' use-compctl false
zstyle ':completion:*' verbose true

zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'
zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd'

¿ dircolorsNo se envía con Mac OS X? ¿Cómo debo instalarlo?

Actualizar:

Si ejecuto dircolors directamente en el shell, obtengo:

bash: dircolors; command not found

Amelio Vazquez-Reina
fuente
¿Estás seguro de que es realmente este código el que causa el error? Solo dircolors -bparece sospechoso, pero en mi computadora funciona bien sin un ~/.dircolorsarchivo.
Martin von Wittich
Intente ejecutar dircolorsmanualmente en un shell para ver si el binario existe y se encuentra en el $PATH.
Martin von Wittich
¿Es el error realmente .dircolors was not foundy no se trata dircolors? No hay ningún dircolorscomando en OSX a menos que lo haya instalado usted mismo, es específico de Linux (o más exactamente de GNU coreutils).
Gilles 'SO- deja de ser malvado'
Gracias @Gilles. Cuando escribo en la cáscara dircolorsme sale: bash: dircolors: command not found. El código que publiqué en el OP fue generado automáticamente por Zsh en una máquina Linux. Pensé que podía clonar mi .zshrcen mi Mac OS X directamente. ¿Sabe qué hace el código en mi OP o tiene alguna sugerencia sobre cómo modificarlo para llevar la funcionalidad equivalente a Mac OS X?
Amelio Vazquez-Reina

Respuestas:

15

El comando dircolorses específico de los coreutils de GNU, por lo que lo encontrará en Linux no integrado y en Cygwin, pero no en otros sistemas Unix como OSX. La configuración generada en su .zshrcno es portátil para OSX.

Como está utilizando los colores predeterminados, puede pasar una cadena vacía al list-colorspara obtener colores en las terminaciones de archivos.

Para colores con el comando realls , configure la CLICOLORvariable de entorno en OSX y también configure LSCOLORS(consulte el manual para el formato) si desea cambiar los colores.

if whence dircolors >/dev/null; then
  eval "$(dircolors -b)"
  zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
  alias ls='ls --color'
else
  export CLICOLOR=1
  zstyle ':completion:*:default' list-colors ''
fi

Si desea establecer colores no predeterminados ( dircolorscon un argumento de archivo), mi recomendación sería codificar la salida dircolors -b ~/.dircolorsen su .zshrcy usar esta configuración para zsh y GNU ls.

LS_COLORS=…
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
if whence dircolors >/dev/null; then
  export LS_COLORS
  alias ls='ls --color'
else
  export CLICOLOR=1
  LSCOLORS=…
fi
Gilles 'SO- deja de ser malvado'
fuente
3
GNU dircolorsse proporciona como gdircolorspor brewel coreutilspaquete de.
m8mble
13

Como FreeBSD no tiene comando dircolory OS X tiene la base de FreeBSD, no puede usarlo.

Lo más simple es usar

export CLICOLOR=YES

en su .zshrcy .bashrcy eliminar eval "$(dircolors -b)". Para cambiar los colores, puede usar la variable de entorno LSCOLORS. Por ejemplo:

export LSCOLORS="Gxfxcxdxbxegedabagacad"

Puede encontrar más información al respecto en la página del manual con

man ls

Una alternativa a export CLICOLOR=YESes usar un alias parals

alias ls=ls -G

Algunos sugirieron instalar GNU-Coreutils desde los puertos Mac, pero en mi opinión esto es una exageración. Puedes encontrar el puerto aquí

Raphael Ahrens
fuente
7

Ya no hago todo el mac, así que no tengo nada con qué probar, pero en la búsqueda para que esto funcione en FreeBSD, logré descubrir cómo hacer que esto funcione desde los puertos. Recuerdo que OSX tiene cosas como brewy macports- Intente instalar GNU coreutils a partir de esto si realmente quiere dircolorstrabajar. También tuve que establecer un alias para dircolorsque gdircolorsya que este es el comando que los puertos de FreeBSD instalado la diversión como. ¡Buena suerte a cualquiera que termine probando esto!

Aquí hay un enlace para que alguien descargue los coreutils a través de brew:

http://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/

Dmitri DB
fuente