2010-12-15 8 views
5

@@と入力すると、最後の@コマンドが実行されます。しかし、誰もが@@は(vimのヘルプファイルで見つかった)以下のコードであるかを説明することができます?: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 /削除のためのデフォルトのレジスタだと思いますコードを読んでから?これはどこに文書化されていますか?すべての検索で、最後の@コマンドを実行するイディオム@@が得られます。

+0

'@@'には、スターウォーズのAT-ATウォーカーが格納されています。 :P – FrustratedWithFormsDesigner

+0

興味深い。これは、ヤンクや友人が使用するデフォルトのレジスタのようですが、これについてのドキュメントは見つかりません。見知らぬ人はまだ '@@'コマンドに接続されていないようです。通常は、レジスタに何かをヤンクすることができます(例えば、 '' zy [モーション] ''が '' z ''になっている)し、キーストローク( '@ z')として"再生 " 'register。それは特別なケースです!レジスタを再生しても、yankとputで使用されるデフォルトのレジスタを上書きしないのは良いことだと思いますが、vimの動作にこのような不規則性があることは間違いです。 –

答えて

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. 

を与え、@@dcsまたはxコマンド、 またはyコマンドでヤンクテキストを削除したテキストの値を持つことになります。

+1

+1その "本当の"名前は@です。これは意味があります。実際には、レジスタを指定せずに何かをヤンクしてから、 '@ ''コマンドを入力することでそれを再生することができます。なぜ '@@'エイリアスが存在するのでしょうか?コマンドは? –

+0

ああ!だから、LGは言った、それは本当に@のエイリアス "です。私はそれがレジスタのリストに表示されない理由だと思います。 –

関連する問題