Acabo de encontrarme con este problema. Para ejecutar zsh hice esto:
- MSYS2 instalado
- Desde el directorio que instalé MSYS2, ejecuté
mingw32_shell.bat
- Se actualizaron todos los paquetes instalados ejecutando
pacman -Syu
- Instalado zsh y curl ejecutando
pacman -Sy zsh curl
- Cerré el shell de MinGW ejecutando
exit
: no ejecuté zsh
inmediatamente después de la instalación.
- Editó msys2_shell.bat, mingw32_shell.bat y mingw64_shell.bat y modificó cada instancia de:
start %WD%mintty -i /msys2.ico /usr/bin/bash --login %*
a:
start %WD%mintty -i /msys2.ico /usr/bin/zsh --login %*
(en la línea 39 a partir del 23/09/2015)
- Corrió
mingw32_shell.bat
- En el menú de configuración de zsh, selecciono
0
crear el archivo .zshrc.
Cuando terminó la configuración, vi:
zsh-newuser-install:1119: command not found: rm
Lo que no se veía bien ... ya rm
que nunca debería encontrarse en un sistema saludable * nix (supongo que es un error con el paquete zsh de MSYS2), pero todo funcionó bien después de eso.
La primera vez que intenté esto cuando ejecuté abrí un archivo por lotes para crear una nueva sesión, recibí un error acerca de que el espacio de memoria de zsh ya estaba ocupado. Para solucionar esto, cerré todas las ventanas abiertas de MinTTY y ejecuté el autorebase.bat
archivo en el directorio de instalación de MSYS2. Todo funcionó después de eso.
Luego instalé oh-my-zsh. Utilizando:
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
rm
es realmente muy inocente. El final de la/usr/share/zsh/functions/Newuser/zsh-newuser-install
secuencia de comandos contiene unrm -f $tmpfile*
para limpiar después de sí mismo. Es exactamente lo mismo en la instalación actual de mi Fedora/usr/share/zsh/5.7.1/functions/zsh-newuser-install
.Me encontré con esto usando el nuevo msys2-launcher, que proporciona
.exe
lanzadores en lugar de archivos por lotes.Para esto, se trataba simplemente de cambiar los
.ini
archivos junto con los lanzadores dentro del directorio raíz Msys2 (para una instalación de 64 bits, podría contenermsys2.ini
,mingw32.ini
ymingw64.ini
). Para cada uno de esos archivos ini, agregue una línea para configurar el shell:fuente
zsh
como shell. Para configurar oh-my-zsh, uno podría considerar este método : laskel
parte realmente no se aplica a msys2 por lo que veo.Edite
/etc/nsswitch.conf
y cambie la configuración a continuación:fuente
msys2_shell.cmd
archivo bat, pero cambiarlo en el.cmd
archivo no afecta el shell si tiene que comenzar desde uno de los.exe
sCuando no se admite el cambio del shell predeterminado, una forma de usar el shell que le gusta es iniciarlo inmediatamente cuando se inicia el shell predeterminado.
Por ejemplo, solo escriba
zsh
y~/.bashrc
, cuando comience bash, ejecutará zsh por usted. Sin embargo, un proceso de bash perdido se deja ejecutar, y debe cerrar Shell dos veces al cerrar sesión. Para hacerlo mejor, escriba enexec zsh
lugar dezsh
, de esta manera, el proceso bash se reemplaza completamente con un proceso zsh.Este método no es perfecto, pero debería funcionar bien en la mayoría de los casos. En comparación con el cambio de valores codificados, puede causar menos problemas de compatibilidad.
Se menciona por primera vez en esta respuesta en StackOverflow .
fuente
Mi instalar hizo no tener los archivos mencionados en la respuesta aceptada (
msys2_shell.bat
,mingw32_shell.bat
ymingw64_shell.bat
).En cambio, mi instalación del sistema Win10 de MSYS2 (usando el archivo instalador
msys2-x86_64-20161025.exe
) tiene un solo archivo,msys2_shell.cmd
con la línea:He cambiado
bash
azsh
. Parece funcionar hasta ahora.fuente
.exe
archivos, entonces esto no configurará el shell, para que observe la respuesta de Alan PearceTengo una solución, pero requiere que uses ConEmu en lugar de cualquier otra terminal que estés usando actualmente. Pruébalo, sin embargo, en mi opinión, es la mejor aplicación de terminal en Windows.
En primer lugar, deberá instalar zsh con pacman. Supongo que ya has llegado tan lejos. Luego, necesitará instalar ConEmu (que puede hacer con Chocolatey o simplemente descargando el instalador desde el sitio de conemu). En la configuración de ConEmu, en 'Tareas', debe agregar una nueva tarea. Probablemente ya tenga una llamada
Bash::Msys2-64
o algo así, así que tal vez haga una llamadaZsh::Msys2-64
. El nombre es arbitrario en cualquier caso. En el cuadro 'Comandos' para esta nueva tarea, básicamente puede copiar el comandoBash::Msys2-64
y sustituirlozsh.exe
cuando corresponda. El mío es como:Luego, en las opciones de 'Inicio' de ConEmu, puede configurar esto como su tarea de inicio para que abrir ConEmu lo lleve directamente a su Zsh cada vez. Obviamente, también puede configurar un combo de teclas para abrirlo o cualquier otra tarea en una nueva pestaña o lo que desee. ConEmu tiene muchas opciones, así que estoy seguro de que podrás configurarlo como quieras.
fuente
Los desarrolladores de MSYS2 obviamente siguen cambiando su configuración, porque en las instalaciones más recientes , el
msys2_shell
comando que está instalado en Windows para iniciar los entornos MSYS2 acepta un-shell
argumento.Por lo tanto, para usar un shell diferente, puede editar las Propiedades de uno o más de los lanzadores para MSYS2 / MinGW 32 / MinGW 64, y actualizar el Destino para agregar
-shell zsh
o lo que sea. (Si el shell está en$PATH
el entorno MSYS que es suficiente, no necesita la ruta completa).Entonces, por ejemplo, para el iniciador "MSYS2 MinGW 64-bit" en "MSYS2 64bit" en mi menú de inicio de Win7:
Esa parece ser la forma más fácil y compatible de cambiar de forma permanente, ya que sus cambios no serán eliminados por las actualizaciones o lo que sea.
Por extraño que parezca, los lanzadores no respetan ninguna variable de entorno, entradas de registro, etc. A menos que
-shell
se pase en la línea de comando para anularlo,LOGINSHELL=bash
se usará el valor predeterminado que fuerza inicialmente.fuente
EDITAR: lo siguiente es aplicable a versiones anteriores de MSYS2. A partir de 2020-01-21, ya no es necesario. La respuesta de FeRD parece funcionar mejor.
Quería usar pescado en lugar de bash. Desafortunadamente, la mayoría de los métodos aquí no funcionaron, posiblemente porque la sintaxis de los peces es muy diferente.
Lo que funcionó mejor fue la idea de wzhd de correr
exec fish
como lo primero cuando comienza bash. Sin embargo, todavía había un problema: si quería usar bash, tenía que editar.bashrc
para eliminar esa línea porque incluso si la ejecutaba desde fish solo comenzaría otra instancia de fish.Lo mejor que puede hacer es asegurarse de que se
exec fish
ejecute cuando comience msys2, pero no cada vez que comience bash.La forma en que encontré es a través del archivo
msys2_shell.cmd
en la carpeta de instalación de msys2. Encontré estas líneas:Parece que están definiendo parámetros para pasar a bash tan pronto como comience, pero solo cuando se ejecuta este script (a diferencia
.bashrc
). Entonces agregué esta línea justo después:Todo parece estar bien hasta ahora. Iniciar msys2 reemplaza bash con fish tan pronto como el primero termine de cargarse, pero si necesito una línea de comando bash, aún puedo comenzar
bash
.fuente