¿Cómo evitar que zsh coma espacio antes del símbolo de tubería?

17

Cuando escribo un espacio seguido del símbolo de tubería '|'en la línea de comando zsh, zsh se come el espacio, colocando el símbolo de tubería directamente contra la palabra anterior. ¿Cómo evito que haga eso? No estoy seguro de posibles convenciones estilísticas, pero me gusta un espacio en ambos lados del símbolo de la tubería para facilitar la lectura. Estoy usando oh-my-zsh casi fuera de la caja.

Solución

Según la respuesta de mpy a continuación, utilicé la siguiente solución:

Por defecto, ZLE_REMOVE_SUFFIX_CHARS no está definido en zsh / ohmyzsh. Cuando no está definido, actúa como si fuera:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

Agregué la siguiente definición a mi ~ / .zshrc:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(todo excepto pipa) y listo, perfecto! problema desaparecido

scanny
fuente
1
primero vuelva a intentar hacer esto usando zsh -f(para omitir cargar su configuración). Notarás que zsh ya no hará eso. Luego, tendrás que cavar (muy probablemente) en oh-my-zsh para descubrir cómo está causando eso ;-)
Francisco

Respuestas:

17

Supongo que quiere decir que cuando TABcompleta un comando / nombre de archivo, se agrega un espacio automáticamente, pero después de presionarlo |desaparece nuevamente. De lo contrario, no puedo reproducir ese efecto.

Sin embargo, en ese caso la solución debería ser tan simple como

ZLE_REMOVE_SUFFIX_CHARS=""

La explicación es un poco complicada, así que simplemente cito man zshparam

ZLE_REMOVE_SUFFIX_CHARS/ El ZLE_SPACE_SUFFIX_CHARS editor de línea utiliza estos parámetros. En ciertas circunstancias, los sufijos (típicamente espacio o barra) agregados por el sistema de finalización se eliminarán automáticamente, ya sea porque el siguiente comando de edición no era un carácter insertable o porque el carácter se marcó como que requería que se eliminara el sufijo.

Estas variables pueden contener los conjuntos de caracteres que harán que se elimine el sufijo. Si ZLE_REMOVE_SUFFIX_CHARS se establece, esos caracteres harán que se elimine el sufijo; si ZLE_SPACE_SUFFIX_CHARSse establece, esos caracteres harán que el sufijo se elimine y se reemplace por un espacio.

Si ZLE_REMOVE_SUFFIX_CHARSno se establece, el comportamiento predeterminado es equivalente a:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

Si ZLE_REMOVE_SUFFIX_CHARSestá configurado pero está vacío, ningún personaje tiene este comportamiento. ZLE_SPACE_SUFFIX_CHARS tiene prioridad, de modo que lo siguiente:

ZLE_SPACE_SUFFIX_CHARS=$'&|'

hace que los caracteres &y |para eliminar el sufijo pero para sustituirlo por un espacio.

Para ilustrar la diferencia, suponga que la opción AUTO_REMOVE_SLASHestá vigente y que el directorio DIR acaba de completarse, con un anexo /, después del cual el usuario escribe &. El resultado predeterminado es DIR&. Con ZLE_REMOVE_SUFFIX_CHARSset pero sin incluir &el resultado es DIR/&. Con el ZLE_SPACE_SUFFIX_CHARSconjunto para incluir &el resultado es DIR &.

Tenga en cuenta que ciertas finalizaciones pueden proporcionar su propio comportamiento de eliminación o reemplazo de sufijos que anula los valores descritos aquí.

mpy
fuente
Sí, no lo había notado hasta que lo mencionaste, pero solo sucede después de completar una pestaña, gracias por la respuesta, esto me da lo que necesito :)
scanny