Segmento
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Un segmento es una parte del prompt con un contexto específico. Existen diferentes tipos disponibles de forma predeterminada. Si buscas ver qué segmentos están incluidos, puedes saltarte esta parte y explorar los segmentos. Sigue leyendo para comprender cómo configurar un segmento.
- json
- yaml
- toml
{
"blocks": [
{
"segments": [
{
"type": "path",
"style": "powerline",
"powerline_symbol": "",
"foreground": "#ffffff",
"background": "#61AFEF",
"template": " {{ .Path }} ",
"include_folders": [
"/Users/posh/Projects"
]
}
]
}
]
}
blocks:
- segments:
- type: path
style: powerline
powerline_symbol:
foreground: "#ffffff"
background: "#61AFEF"
template: " {{ .Path }} "
include_folders:
- /Users/posh/Projects
[[blocks]]
[[blocks.segments]]
type = "path"
style = "powerline"
powerline_symbol = ""
foreground = "#ffffff"
background = "#61AFEF"
template = " {{ .Path }} "
include_folders = [ "/Users/posh/Projects" ]
Configuraciones
| Name | Type | Default | Description |
|---|---|---|---|
type | string | takes the string value referencing which segment logic it needs to run (see segments for possible values) | |
style | string | plain | see Style below. Possible values:
|
powerline_symbol | string | character to use at the end of the segment when "style": "powerline" (e.g., \uE0B0) | |
leading_powerline_symbol | string | character to use at the start of the segment when "style": "powerline". By default, Oh My Posh uses an ANSI hack to invert the powerline_symbol, which provides the best alignment but may not work in all terminals. If you see black artifacts at segment starts, set this to the corresponding opening glyph (e.g., \uE0D6 when using \uE0B0, or \uE0D7 when using \uE0B1) | |
invert_powerline | boolean | false | if true swaps the foreground and background colors. Can be useful when the character you want does not exist in the perfectly mirrored variant for example - defaults to false |
leading_diamond | string | character to use at the start of the segment. Will take the background color of the segment as its foreground color | |
trailing_diamond | string | character to use at the end of the segment. Will take the background color of the segment as its foreground color | |
foreground | string | color | |
foreground_templates | []Template | color templates | |
background | string | color | |
background_templates | []Template | color templates | |
template | string | a go text/template template to render the prompt | |
templates | []Template | in some cases having a single template string is a bit cumbersome. Templates allows you to span the segment's template string multiple lines where every template is evaluated and depending on what you aim to achieve, there are two possible outcomes based on templates_logic | |
templates_logic | string | join |
|
options | []Option | see [Options][options] below | |
interactive | boolean | false | when true, the segment text is not escaped to allow the use of interactive prompt escape sequences in Bash/Zsh - defaults to false |
alias | string | for use with cross segment template properties | |
min_width | int | 0 | if the terminal width is smaller than this value, the segment will be hidden. For your terminal width, see oh-my-posh get width. Defaults to 0 (disable) |
max_width | int | 0 | if the terminal width exceeds this value, the segment will be hidden. For your terminal width, see oh-my-posh get width. Defaults to 0 (disable) |
cache | Cache | how to cache the segment to avoid fetching information too much, see below | |
include_folders | []string | define which folders to include to enable the segment, see below | |
exclude_folders | []string | define which folders to exclude to disable the segment, see below | |
force | boolean | false | when true, the segment is always rendered, even when it's only whitespace - defaults to false |
timeout | int | 0 | timeout in milliseconds for segment execution. If the segment takes longer than this value to complete, it will be disabled. Defaults to 0 (no timeout) |
index | int | used to override a specific segment (1-based) |
En Bash/Zsh, cuando la propiedad interactive es true para un segmento, el cálculo de longitud del prompt puede ser incorrecto debido a posibles expansiones de cadenas (por ejemplo, \w en Bash y %d en Zsh, que se expanden al directorio de trabajo actual). Esto provoca que un bloque alineado a la derecha no se posicione correctamente.
Lamentablemente, Oh My Posh no puede conocer la longitud final del prompt ya que la expansión de cadenas la realiza tu shell, así que usa esta función bajo tu propio riesgo.
Estilo
El estilo define cómo se renderiza un prompt. Al analizar los temas de prompt más comunes, identificamos 4 tipos. Todos requieren una configuración diferente y, dependiendo del aspecto que quieras lograr, es posible que necesites comprender/usarlos todos.
Powerline
Lo que inició todo para nosotros. Utiliza un único símbolo (powerline_symbol) para separar los segmentos. Toma el color de fondo del segmento anterior (o transparente si no hay ninguno) y el primer plano del segmento actual (o transparente si es el último segmento). Espera que los segmentos tengan un fondo coloreado, de lo contrario tiene poco uso.
Cuando veas triángulos negros (u otros caracteres según el powerline_symbol que uses) al inicio de un segmento, puedes configurar leading_powerline_symbol como la versión de "apertura" del powerline_symbol. Esto no usará el truco ANSI invertido que tenemos implementado, ya que no es compatible con todos los terminales. Es posible que necesites ajustar la configuración de tu fuente para obtener la mejor alineación.
El estilo powerline tiene problemas en Git Bash debido a que el ancho de los iconos se calcula incorrectamente, lo que rompe el prompt al escribir comandos largos o buscar en el historial.
La siguiente configuración de prompt tiene el mismo problema:
export PS1=" "
Simple
Básico. Texto coloreado sobre fondo transparente. Asegúrate de configurar foreground para disfrutarlo al máximo.
Diamante
Mientras Powerline funciona bien con un solo símbolo, a veces quieres que un segmento tenga símbolos de inicio y fin diferentes. Como un diamante: < my segment text >. La diferencia con el estilo simple es que los símbolos del diamante toman el fondo del segmento como su color de primer plano.
Acordeón
Similar a Powerline, excepto que se mostrará incluso cuando está desactivado, pero sin texto. Así parece que el segmento no está expandido, como un acordeón.
Opciones
El atributo options te permite personalizar el comportamiento y apariencia de un segmento más allá de la configuración predeterminada.
Estas opciones pueden incluir flags de funcionalidad, configuraciones o detalles de estilo adicionales que solo aplican al segmento específico.
Para conocer las opciones disponibles para un segmento particular, consulta su sección de documentación correspondiente donde cada opción se explica en detalle.
Caché
La propiedad de caché te permite controlar con qué frecuencia se actualiza un segmento. Esto es útil cuando un segmento tarda en generarse o cuando quieres evitar obtener información con demasiada frecuencia. La propiedad de caché es un objeto con las siguientes propiedades:
| Name | Type | Description |
|---|---|---|
duration | string | the duration for which the segment will be cached. The duration is a string in the format 1h2m3s. The duration is parsed using the time.ParseDuration function from the Go standard library. To disable the cache, use none |
strategy | string | the strategy to use to identify if we should show the segment's cache value. See below for more information on strategy |
- json
- yaml
- toml
{
"cache": {
"duration": "1h",
"strategy": "folder"
}
}
cache:
duration: 1h
strategy: folder
[cache]
duration = "1h"
strategy = "folder"
Estrategia
Sesión
La estrategia de sesión almacenará en caché el segmento basándose en la sesión actual del shell. Úsala para segmentos que quieras mostrar siempre pero que no necesitan actualizarse con frecuencia.
Carpeta
La estrategia de carpeta almacenará en caché el segmento según el directorio de trabajo actual. Almacenará un valor separado para cada directorio. Esto es útil cuando trabajas, por ejemplo, con segmentos de lenguaje o segmentos de control de código fuente. Los segmentos de control de código fuente entienden el contexto del repositorio en este caso, por lo que se usa el mismo valor de caché de segmento cuando estás en un repositorio git, independientemente de la carpeta en la que te encuentres.
Dispositivo
La estrategia de dispositivo almacenará en caché el segmento basándose en el dispositivo actual. Esto significa que se usa el mismo valor de caché independientemente de la carpeta o sesión del shell. Usa esta estrategia para segmentos que tardan en generarse pero que no cambian con frecuencia, como los segmentos de información del sistema.
Incluir / Excluir Carpetas
A veces puedes querer que un segmento solo se muestre en ciertas carpetas. Si se especifica include_folders,
el segmento solo se renderizará cuando estés en una de esas ubicaciones. Si se especifica exclude_folders, el segmento
no se mostrará cuando estés en una de las carpetas excluidas.
- json
- yaml
- toml
{
"include_folders": [
"/Users/posh/Projects"
]
}
include_folders:
- /Users/posh/Projects
include_folders = [ "/Users/posh/Projects" ]
- json
- yaml
- toml
{
"exclude_folders": [
"/Users/posh/Projects"
]
}
exclude_folders:
- /Users/posh/Projects
exclude_folders = [ "/Users/posh/Projects" ]
Las cadenas especificadas en estas propiedades se evalúan como expresiones regulares. Puedes
usar cualquier construcción válida de expresión regular, pero la expresión debe coincidir con TODO el nombre
del directorio. Lo siguiente coincidirá con /Users/posh/Projects/Foo pero no con /home/Users/posh/Projects/Foo.
- json
- yaml
- toml
{
"include_folders": [
"/Users/posh/Projects/.*"
]
}
include_folders:
- /Users/posh/Projects/.*
include_folders = [ "/Users/posh/Projects/.*" ]
También puedes combinar estas propiedades:
- json
- yaml
- toml
{
"include_folders": [
"/Users/posh/Projects/.*"
],
"exclude_folders": [
"/Users/posh/Projects/secret-project.*"
]
}
include_folders:
- /Users/posh/Projects/.*
exclude_folders:
- /Users/posh/Projects/secret-project.*
include_folders = [ "/Users/posh/Projects/.*" ]
exclude_folders = [ "/Users/posh/Projects/secret-project.*" ]
- Oh My Posh aceptará tanto
/como\como separadores de ruta y coincidirá independientemente de cuál use el sistema operativo actual. - Como las cadenas se evalúan como expresiones regulares, si quieres usar una barra invertida (
\) en un nombre de directorio de Windows, debes especificarla como doble barra invertida, y si usas formato JSON deberías escaparla como\\\\. - El carácter
~al inicio de una carpeta especificada coincidirá con el directorio de inicio del usuario. - La comparación no distingue mayúsculas/minúsculas en Windows y macOS, pero sí en otros sistemas operativos.
Esto significa que para el usuario Bill, que tiene una cuenta Bill en Windows y bill en Linux, ~/Foo podría coincidir
con C:\Users\Bill\Foo o C:\Users\Bill\foo en Windows, pero solo con /home/bill/Foo en Linux.
Índice
La posición del segmento en la configuración. Se usa para sobrescribir un segmento específico en una configuración base.
Es un índice basado en 1, por lo que el primer segmento tiene índice 1.
Ocultar segmentos
Condicionalmente
Para ocultar un segmento completo (incluidos los símbolos inicial y final) basado en una plantilla, la plantilla debe
evaluarse como una cadena vacía. Esto se puede lograr con declaraciones condicionales (if). El ejemplo siguiente renderizará
un segmento tipo diamante solo si la variable de entorno POSH_ENV no está vacía.
Solo se excluyen los espacios, lo que significa que aún puedes agregar saltos de línea y tabulaciones si lo necesitas.
- json
- yaml
- toml
{
"type": "text",
"style": "diamond",
"leading_diamond": " ",
"trailing_diamond": "",
"foreground": "#ffffff",
"background": "#d53c14",
"template": "{{ if .Env.POSH_ENV }} {{ .Env.POSH_ENV }} {{ end }}"
}
type: text
style: diamond
leading_diamond: " "
trailing_diamond:
foreground: "#ffffff"
background: "#d53c14"
template: "{{ if .Env.POSH_ENV }} {{ .Env.POSH_ENV }} {{ end }}"
type = "text"
style = "diamond"
leading_diamond = " "
trailing_diamond = ""
foreground = "#ffffff"
background = "#d53c14"
template = "{{ if .Env.POSH_ENV }} {{ .Env.POSH_ENV }} {{ end }}"
Dinámicamente
A veces, te encuentras en una situación donde no quieres ver un segmento específico, pero el caso de uso no justifica usar una plantilla condicional. En este caso, puedes usar el comando oh-my-posh toggle <type> para activar o desactivar el segmento. Esto funciona por sesión de shell, lo que significa que si desactivas un segmento en una instancia del shell, no se desactivará en las otras.
Para listar los segmentos actualmente desactivados, usa oh-my-posh get toggles.