2010-12-15 8 views
5

Sé que al escribir @@ ejecuto el último comando @. Pero puede alguien explicar lo que es @@ en el código de abajo (que se encuentra en los archivos de ayuda VIM) ?:¿Cuál es la variable @@ de vim?

function! CountSpaces(type, ...) 
    let sel_save = &selection 
    let reg_save = @@ 

    if a:0 
    silent exe "normal! `<" . a:type . "`>y" 
    elseif a:type == 'line' 
    silent exe "normal! '[V']y" 
    elseif a:type == 'block' 
    silent exe "normal! `[\<C-V>`]y" 
    else 
    silent exe "normal! `[v`]y" 
    endif 

    echomsg strlen(substitute(@@, '[^ ]', '', 'g')) 

    let &selection = sel_save 
    let @@ = reg_save 
endfunction 

Parece ser un registro, pero no está en la lista en :help registers. Al leer el código, ¿supongo que es el registro predeterminado para tirar/eliminar? ¿Está esto documentado en algún lugar? Todas mis búsquedas arrojan la expresión @@ que ejecuta el último comando @.

+0

'@@' almacena un caminante AT-AT de Star Wars. : P – FrustratedWithFormsDesigner

+0

Interesante. Parece ser el registro predeterminado utilizado por yank y amigos, pero no puedo encontrar ninguna documentación sobre esto. Más extraño aún, no parece estar conectado al comando '@@' en absoluto. Normalmente puede arrastrar algo en un registro (por ejemplo: '" zy [motion] 'se arrastra a z) y luego" reproducirlo "como pulsaciones de teclas (' @ z') pero '@@' no reproduce el contenido de '@ 'registro. ¡Es un caso especial! Supongo que es bueno que la reproducción de un registro no sobrescriba el registro predeterminado utilizado por yank y put, pero es un poco desconcertante que haya tal irregularidad en el comportamiento de vim. –

Respuesta

11

:help @r me da

register      *expr-register* *@r* 
-------- 
@r   contents of register 'r' 

The result is the contents of the named register, as a single string. 
Newlines are inserted where required. To get the contents of the unnamed 
register use @" or @@. See |registers| for an explanation of the available 
registers. 

Así, @@ tendrá el valor del texto eliminado con un comando d, c, s o x, o el texto pegado con un comando y.

+1

+1 así que parece su nombre "real" es @ ", que tiene sentido. En realidad, puedes arrastrar algo sin especificar un registro, y luego "reproducirlo" escribiendo el comando '@" '. Me pregunto por qué existe el alias' @@ 'y hay alguna forma de determinar programáticamente qué' @@ ' comando? –

+0

¡Ah, ja! Así que, como LG dijo, es realmente un alias para @ ". Supongo que es por eso que no aparece en la lista de registros. –

Cuestiones relacionadas