devAlice
← Windows

PowerShell 7 + oh-my-posh + módulos — ahorra una hora a la semana en Windows Terminal

Entorno PowerShell 7 para uso diario en Windows Terminal — instalación de pwsh, perfil, tema oh-my-posh y seis módulos esenciales.

El PowerShell 5.1 integrado en Windows no es multiplataforma y tiene problemas de compatibilidad de módulos. PowerShell 7 (pwsh) es el estándar. Combínalo con oh-my-posh y seis módulos para igualar (o superar) el zsh + starship de macOS.

Esta guía es una configuración de PowerShell de 30 minutos tras la configuración inicial de Windows, que instala winget.

Resumen

  1. Instalar pwsh 7winget install Microsoft.PowerShell
  2. Establecer pwsh como predeterminado en el shell de Windows Terminal
  3. Activar el perfil — editar $PROFILE
  4. oh-my-posh — prompt (estado de Git / tiempo de ejecución / código de salida)
  5. Seis módulos — Terminal-Icons / posh-git / PSReadLine / z / PSFzf / CompletionPredictor

Requisitos previos

1. Instalar PowerShell 7

winget install --id Microsoft.PowerShell -e

Abre una nueva pestaña y ejecuta pwsh. Confirma:

$PSVersionTable.PSVersion
# Major: 7, Minor: 4+

2. Establecer pwsh como shell predeterminado

Windows Terminal → Settings (Ctrl+,) → Inicio:

  • Perfil predeterminado: PowerShell (7) — el icono azul oscuro (no el 5.1)

3. Configurar el perfil

# Ruta del archivo de perfil
$PROFILE
# C:\Users\me\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
 
# Crear si no existe
if (-not (Test-Path $PROFILE)) { New-Item -Type File -Path $PROFILE -Force }
 
# Editar
notepad $PROFILE
# o
code $PROFILE

4. Instalar oh-my-posh

winget install JanDeDobbeleer.OhMyPosh -s winget

Nueva terminal → previsualizar temas:

Get-PoshThemes

Si las flechas/glifos/tiempo de ejecución se muestran como cuadros, te falta una Nerd Font:

  • JetBrainsMono Nerd Font o
    oh-my-posh font install JetBrainsMono
  • Windows Terminal → Settings → Profile → Appearance → Font face: JetBrainsMono Nerd Font

4.1 Añadir al perfil

Añade al final de $PROFILE:

# Activar oh-my-posh
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\jandedobbeleer.omp.json" | Invoke-Expression

Los temas son cuestión de gusto personal (jandedobbeleer, paradox, negligible, craver, etc.). Todos los temas están en $env:POSH_THEMES_PATH.

5. Seis módulos

# Todos a la vez
Install-Module -Name Terminal-Icons, posh-git, PSReadLine, z, PSFzf -Scope CurrentUser -Force
Install-Module -Name CompletionPredictor -AllowPrerelease -Scope CurrentUser -Force

5.1 Registrar en el perfil

En $PROFILE:

# 5.1 Iconos (iconos por tipo de archivo en la salida de ls)
Import-Module Terminal-Icons
 
# 5.2 posh-git (estado de Git en el prompt)
Import-Module posh-git
# Si tu tema de oh-my-posh ya tiene el estado de Git, puede duplicarse. Elige uno.
 
# 5.3 PSReadLine (teclas estilo bash, historial, color de completado)
Import-Module PSReadLine
Set-PSReadLineOption -PredictionSource HistoryAndPlugin
Set-PSReadLineOption -PredictionViewStyle ListView
Set-PSReadLineKeyHandler -Chord Tab -Function Complete  # estilo bash
 
# 5.4 z (saltar a directorios frecuentes — 'z proj')
Import-Module z
 
# 5.5 PSFzf (historial con Ctrl+R, búsqueda de archivos con Ctrl+T)
Import-Module PSFzf
Set-PsFzfOption -PSReadlineChordProvider 'Ctrl+t' -PSReadlineChordReverseHistory 'Ctrl+r'
# fzf en sí: winget install junegunn.fzf
 
# 5.6 CompletionPredictor (predicciones de tabulación basadas en comandos)
Import-Module CompletionPredictor

6. Alias y funciones

Añade los tuyos al final de $PROFILE:

# Alternativas a ls (compatible con UNIX)
Set-Alias ll Get-ChildItem
function la { Get-ChildItem -Force @args }
 
# Recarga rápida
function reload-profile { . $PROFILE }
 
# Shell de administrador al instante
function admin { Start-Process pwsh -Verb RunAs }
 
# Atajos de Git
function gs { git status -sb }
function gd { git diff $args }
function gpl { git pull --rebase --autostash }
 
# WSL rápido
function w { wsl @args }

7. Verificación

# Recargar perfil
. $PROFILE
 
# 1. Prompt de oh-my-posh — ve a un repo Git para ver la rama
cd C:\Users\me\Documents\my-repo
 
# 2. PSReadLine — flecha arriba para historial, escribe y ve la sugerencia gris → pulsa → para aceptar
git st<tecla →>   # ¿se predice 'status'?
 
# 3. z — salta a una carpeta visitada anteriormente
z my-repo
 
# 4. Ctrl+R — búsqueda interactiva en el historial (fzf)
 
# 5. ll — ls con colores e iconos de Terminal-Icons

Resolución de problemas

oh-my-posh muestra cuadros en lugar de iconos

Nerd Font no aplicada. Windows Terminal → Settings → Profile → Appearance → establece una Nerd Font.

Error de permisos en Install-Module

  • La primera vez: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
  • Omitir -Scope CurrentUser a veces solicita administrador

El perfil no se carga

  • pwsh y Windows Terminal al lanzar PowerShell 5.1 (powershell.exe) tienen rutas de perfil distintas
  • 5.1: ~/Documents/WindowsPowerShell/Microsoft.PowerShell_profile.ps1
  • 7: ~/Documents/PowerShell/Microsoft.PowerShell_profile.ps1
  • Confirma con $PSVersionTable.PSVersion

posh-git es lento (repositorio grande)

git status en cada prompt es lento en monorepos grandes. Si el tema de oh-my-posh ya tiene un segmento de git, desactiva posh-git o establece $GitPromptSettings.EnableFileStatus = $false.

Ctrl+R no funciona

  • fzf no instalado — winget install junegunn.fzf
  • PSFzf instalado pero fzf.exe no está en el PATH

Solo colores en escala de grises

Esquema de colores incorrecto en Windows Terminal. Settings → cambia el esquema a Campbell o One Half Dark.

Referencias

Registro de cambios

  • 2026-05-12: Primer borrador. pwsh 7 + oh-my-posh + seis módulos + alias/funciones + cinco casos de resolución de problemas.