2010-12-15 4 views
5

Я знаю это, набрав @@ Выполняю последнюю команду @. Но может ли кто-нибудь объяснить, что @@ в коде ниже (находится в 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 

Это, как представляется, регистр, но не в списке на :help registers. Из чтения кода я бы предположил, что это регистр по умолчанию для yanking/deleting? Является ли это документированным где угодно? Все мои запросы просто дают @@ идиом, который выполняет последнюю команду @.

+0

`@@` хранит ходунки AT-AT от Star Wars. : P – FrustratedWithFormsDesigner 2010-12-15 21:35:40

+0

Интересно. Кажется, это регистр по умолчанию, используемый yank и друзьями, но я не могу найти документацию об этом. По-прежнему незнакомец, похоже, что он вообще не подключен к команде `@@`. Обычно вы можете что-то записывать в регистр (например: `` zy [motion] `yanks в z), а затем« воспроизводить »его как нажатия клавиш (` @ z`), но `@@` не воспроизводит содержимое `@ `register.Это особый случай! Я полагаю, что хорошо, что повторное воспроизведение регистра не перезаписывает регистр по умолчанию, используемый yank и put, но это немного смущает, что в поведении vim существует такая неравномерность. – 2010-12-15 21:44:35

ответ

11

:help @r дает мне

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. 

Таким образом, @@ будет иметь значение текста удаляется с d, c, s или x команды, или текст скопированного с помощью команды y.

Смежные вопросы