Saltar a contenido

Cmder

Emulador de consola para Windows

Configuración

  • Para que respete el prompt con el símbolo λ y muestre las ramas de git, hay que desinstalar el clink global, y utilizar el que trae en cmder\vendor\clink. Además, es necesario modificar C:\cmder/vendor/clink-completions/npm_prompt.lua por:
local color = require('color')

function npm_prompt_filter()
    local package = io.open('package.json')
    if package ~= nil then
        local package_info = package:read('*a')
        package:close()
        local package_name = string.match(package_info, '"name"%s*:%s*"(%g-)"')
        if package_name == nil then
            package_name = ''
        end     
        local package_version = string.match(package_info, '"version"%s*:%s*"(.-)"')
        if package_version == nil then
            package_version = ''
        end   
        local package_string = color.color_text("("..package_name.."@"..package_version..")", color.YELLOW)
        clink.prompt.value = clink.prompt.value:gsub('{git}', '{git} '..package_string)
    end
    return false
end

clink.prompt.register_filter(npm_prompt_filter, 40)

Trucos

Cambiar al directorio de otra unidad

Se hace con /d

cd /d x:\directorio

Esto en realidad es un truco de Windows, no de cmder

Lanzar una aplicación/script en el arranque

Se hace añadiéndolo <cmder>/config/user-profile.cmd

Por ejemplo, para activar un entorno virtual python en el arranque:

conda activate ai

Hacer un refresco de pantalla

En algunos casos no funciona correctamente el comando clear desde ssh. Para solucionarlo se puede configurar una nueva macro a la combinación de teclas Ctrl+L que haga print("echo -e \"\\0033\\0143\"\n")

Cambiar el prompt (y otras configuraciones)

Se hace en cmder/config/user-startup.cmd

@prompt $e[1;32;40m$p$g$e[1;32;40m$S$E[0m

Nota: subido a gists

Nota: el prompt por defecto muestra en qué rama nos encontramos si estamos en un directorio controlado por gist. Esto es relativamente útil, pero consume recursos que, por ejemplo, en la tablet hace que vayan más lentas las operaciones sobre esos directorios (ls, etc)

Combinaciones de teclas

Combinación de teclas Función
Ctrl-@ set-mark
Ctrl-a beginning-of-line
Ctrl-b backward-char
Ctrl-c ctrl-c
Ctrl-d delete-char
Ctrl-e end-of-line
Ctrl-f forward-char
Ctrl-g abort
Ctrl-h backward-delete-char
Ctrl-i clink-completion-shim
Ctrl-j accept-line
Ctrl-k kill-line
Ctrl-l clear-screen
Ctrl-m accept-line
Ctrl-n next-history
Ctrl-p previous-history
Ctrl-q reload-lua-state
Ctrl-r reverse-search-history
Ctrl-s forward-search-history
Ctrl-t transpose-chars
Ctrl-u unix-line-discard
Ctrl-v paste-from-clipboard
Ctrl-w unix-word-rubout
Ctrl-y yank
Ctrl-z undo
Ctrl-] character-search
Ctrl-_ undo
Ctrl-Alt-c copy-line-to-clipboard
Ctrl-Alt-e expand-env-vars
Ctrl-Alt-g abort
Ctrl-Alt-h backward-kill-word
Ctrl-Alt-i tab-insert
Ctrl-Alt-j vi-editing-mode
Ctrl-Alt-m vi-editing-mode
Ctrl-Alt-r revert-line
Ctrl-Alt-u up-directory
Ctrl-Alt-y yank-nth-arg
Ctrl-Alt-[ complete
Ctrl-Alt-] character-search-backward
Alt-` set-mark
Alt-# insert-comment
Alt-& tilde-expand
Alt-* insert-completions
Alt-- digit-argument
Alt-. yank-last-arg
Alt-[0-9] digit-argument
Alt-\< beginning-of-history
Alt-= possible-completions
Alt-> end-of-history
Alt-? possible-completions
Alt-\ delete-horizontal-space
Alt-_ yank-last-arg
Alt-b backward-word
Alt-c capitalize-word
Alt-d kill-word
Alt-f forward-word
Alt-h show-rl-help
Alt-l downcase-word
Alt-n non-incremental-forward-search-history
Alt-p non-incremental-reverse-search-history
Alt-r revert-line
Alt-t transpose-words
Alt-u upcase-word
Alt-y yank-pop
Alt-~ tilde-expand
Ctrl-x,Ctrl-g abort
Ctrl-x,Ctrl-r re-read-init-file
Ctrl-x,Ctrl-u undo
Ctrl-x,Ctrl-x exchange-point-and-mark
Ctrl-x,( start-kbd-macro
Ctrl-x,) end-kbd-macro
Ctrl-x,e call-last-kbd-macro

Errores

Al crear un fichero package.json en ese directorio me da el siguiente error:

C:\cmder/vendor/clink-completions/npm_prompt.lua:11: attempt to concatenate local 'package_version' (a nil value)

La solución es editar cmder/vendor/clink-completions/npm_prompt.lua, modificando

...
local package_name = string.match(package_info, '"name"%s*:%s*"(%g-)"')
local package_version = string.match(package_info, '"version"%s*:%s*"(.-)"')
...

por

...
local package_name = string.match(package_info, '"name"%s*:%s*"(%g-)"')
if package_name == nil then
    package_name = ''
end     
local package_version = string.match(package_info, '"version"%s*:%s*"(.-)"')
if package_version == nil then
    package_version = ''
end   
...

Última actualización: December 7, 2021