TL;DR — Cómo dejar cmd, PowerShell (incluido admin), Git Bash, Windows Terminal y la terminal de VS Code con el mismo flujo: seleccionar = copiado al portapapeles y clic derecho = pegar. Todo con mecanismos nativos, sin AutoHotkey ni utilidades externas.
Aplica a: Windows 10 / 11
El objetivo
Un solo hábito para todas las consolas:
- Arrastras el mouse sobre el texto → queda copiado.
- Clic derecho → pega en la línea de comandos.
Cada consola lo logra con SU propio mecanismo (por eso “se pierde” la config si solo tocas una). Esta es la tabla completa:
| Consola | Copiar al seleccionar | Pegar con clic derecho | Dónde se configura |
|---|---|---|---|
| cmd / PowerShell clásicos (conhost) | Seleccionar + 1er clic derecho (límite nativo) | 2º clic derecho | Registro HKCU\Console (QuickEdit) |
| Windows Terminal | ✅ al soltar el mouse | ✅ | settings.json → copyOnSelect |
| Git Bash (mintty) | ✅ al soltar el mouse | ✅ | ~/.minttyrc |
| Terminal de VS Code | ✅ al soltar el mouse | ✅ | settings.json de VS Code |
| Claude Code (su TUI) | ✅ (con TUI en modo default) | — | ~/.claude/settings.json |
⚠️ Importante: nada de esto usa Ctrl+C, así que no matas procesos por accidente (Claude Code y compañía quedan a salvo). Y el copy-on-select global del SO (AutoHotkey) quedó descartado a propósito: enredaba el copiar/pegar normal fuera de las terminales.
1) cmd y PowerShell clásicos — QuickEdit (registro)
Pega este bloque en PowerShell:
# Default global
Set-ItemProperty -Path 'HKCU:\Console' -Name 'QuickEdit' -Value 1 -Type DWord
# Forzarlo en todos los sub-perfiles por aplicación (powershell.exe, Git Bash, Git CMD…)
Get-ChildItem 'HKCU:\Console' | ForEach-Object {
Set-ItemProperty -Path $_.PSPath -Name 'QuickEdit' -Value 1 -Type DWord
Write-Host (' perfil: ' + $_.PSChildName + ' -> QuickEdit=1')
}
Límite nativo de conhost: soltar el mouse NO copia. El flujo es: seleccionar → 1er clic derecho copia (y quita la selección) → 2º clic derecho pega. Es lo máximo que da la consola clásica; el “soltar = copiado” lo dan las demás.
2) Windows Terminal — copyOnSelect
Ctrl + , → Abrir archivo JSON → agrega en la raíz (o verifica que ya esté):
"copyOnSelect": true,
"copyFormatting": "none"
Con copyOnSelect activo, el clic derecho siempre pega. Esta es la consola por defecto en Windows 11, así que cubre los cmd/PowerShell que abres normalmente.
3) Git Bash — .minttyrc
Git Bash usa mintty, que ignora el registro y el JSON de Windows Terminal. Crea el archivo C:\Users\<tu-usuario>\.minttyrc con:
CopyOnSelect=yes
RightClickAction=paste
El menú contextual de mintty no se pierde: queda en Ctrl + clic derecho.
Comando listo:
@"
CopyOnSelect=yes
RightClickAction=paste
"@ | Set-Content "$env:USERPROFILE\.minttyrc" -Encoding ascii
4) Terminal integrada de VS Code
En el settings.json de VS Code (Ctrl+Shift+P → “Preferences: Open User Settings (JSON)”):
"terminal.integrated.copyOnSelection": true,
"terminal.integrated.rightClickBehavior": "paste"
Trampa real (me pasó): con "rightClickBehavior": "copyPaste" el clic derecho copia cuando hay selección activa en vez de pegar — y como copyOnSelection ya copió, parece que “el pegado no funciona”. Debe ser "paste".
5) Claude Code (bonus)
Para poder seleccionar/copiar con el mouse dentro de la TUI de Claude Code, en ~/.claude/settings.json:
"tui": "default",
"env": { "CLAUDE_CODE_DISABLE_MOUSE_CLICKS": "1" }
(tui: default desactiva el renderer fullscreen que captura el mouse; la variable evita que los clics lleguen a la app pero conserva el scroll de la rueda.)
Cómo probar que quedó
- Cierra TODAS las consolas abiertas — las ventanas viejas no toman los cambios. Este es el motivo nº 1 de “no funcionó”.
- Abre una nueva, ejecuta algo (
Get-Date), selecciona la salida con el mouse. - Ve a otra consola y da clic derecho → debe pegar. ✅
Si en una consola específica no funciona
- ¿La abres desde un acceso directo anclado? Los
.lnkde consola guardan sus propias propiedades y pisan el registro. Clic derecho al acceso directo → Propiedades → Opciones → marca “Modo de edición rápida”. - ¿Es conhost clásico? Recuerda el doble clic derecho (1º copia, 2º pega) — no es un bug.
- ¿Es una app de terminal distinta (ConEmu, Hyper, etc.)? Cada una tiene su propia opción de copy-on-select; el patrón es el mismo.
Por qué NO un copy-on-select global (y cómo se apagó)
Antes de esta versión hubo un intento de “copiar al seleccionar en todo el SO” con AutoHotkey: al soltar el mouse tras arrastrar, enviaba Ctrl+C. Se descartó por dos motivos:
- Enredaba el copiar/pegar normal fuera de las terminales: al seleccionar cualquier texto o una ruta en el Explorador disparaba un copiado, y luego Ctrl+V traía algo distinto a lo esperado. Con falsos positivos (arrastrar archivos en el Explorador “copiaba” los archivos).
Ctrl+Ces peligroso en consolas: interrumpe el proceso en ejecución (podría matar a Claude Code). Por eso el script tenía que excluir las terminales… justo donde sí queremos el copy-on-select. Al final resultó ser lo contrario de lo útil.
La regla correcta = copy-on-select SOLO en terminales, con los mecanismos nativos de arriba (QuickEdit / copyOnSelect / mintty), que copian por el buffer de la consola, no por Ctrl+C. Fuera de terminales, Windows normal.
Si tienes ese AutoHotkey activo, apágalo así:
# 1) Cerrar el proceso si está corriendo
Get-CimInstance Win32_Process |
Where-Object { $_.CommandLine -match 'copy-on-select\.ahk' } |
ForEach-Object { Stop-Process -Id $_.ProcessId -Force }
# 2) Sacarlo del arranque (movido a un .disabled, reversible)
$lnk = [Environment]::GetFolderPath('Startup') + '\copy-on-select.lnk'
if (Test-Path $lnk) { Move-Item $lnk "$env:USERPROFILE\bin\copy-on-select.lnk.disabled" -Force }
Para reactivarlo algún día: devuelve el
.lnka la carpeta Startup y relanza el.ahk.
Cómo revertirlo
# QuickEdit off
Set-ItemProperty 'HKCU:\Console' -Name 'QuickEdit' -Value 0 -Type DWord
Get-ChildItem 'HKCU:\Console' | ForEach-Object { Set-ItemProperty $_.PSPath -Name 'QuickEdit' -Value 0 -Type DWord }
# Windows Terminal: copyOnSelect -> false · VS Code: quitar las 2 líneas · Git Bash: borrar .minttyrc