2011-01-29 4 views
5

私は、Vimの通常モードで<C-a>が数字を増やすだけでなく、ブール値をトグルするべきであるという考えに達しました。これは、整数だから、私downloaded an excellent scriptは毛深い仕事をする2.Vimの通常モードCTRL-Aと同義ですか?

を法と<C-a>のための新しい定義書いたように、あなたがtruefalseを考慮すれば理にかなって:

fun! NewCA() 
    let cw = tolower(expand("<cword>")) 
    if cw == "true" || cw == "false" 
     ToggleWord 
    else 
     " run the built-in <C-a> 
     execute "normal \<C-a>" 
    endif 
endfun 
command! NewCA :call NewCA() 
nnoremap <C-a> :NewCA<cr> 

をしかし、それが起こるとして、nnoremap doesnの」内部の機能をチェックするまでは行かない。 私のカーソルが単語trueまたはfalseにない場合、再帰的な動作が発生します。

この点で私はたくさんのことを誓いますが、なぜBramがEmacsから優れたアイデアを選ぶのではなく、すべてが機能であり、キーバインドが自由に設定可能でなければなりません。その後、私はちょうど<C-a>の機能をチェックし、その機能でそれを呼び出すことができます。しかし、いいえ、私はそのような機能を見つけることができず、execute "normal foo"というフレーズがVimイディオムのようです。

私は<C-a>作品を作ることができる方法上の任意の提案

ようにカーソルがに trueまたは false
  • フォールバックワード上で

    • トグルブール値を内蔵しそう<C-a>行動

    ヘルプありがとう!

  • 答えて

    8

    に変更

    execute "normal \<C-a>"
    :あなたは通常モードで
    <C-v><C-a>
    を実行して^ A

    を得ることができます

    normal! ^A

    "!" :help :normalまた、コマンドが必要とされていない定義

    :norm[al][!] {commands}  
    ... 
    If the [!] is given, mappings will not be used. 
    .... 
    

    から通常の言う「使用デフォルトのマッピング」

    +0

    どちらも答えは同じ、正しい解を持つことができます。私はあなたをコミュニティに歓迎するために受け入れられた答えとしてこれをチェックしました。 :) – progo

    6

    の終わりに、あなたは直接

    nnoremap <C-a> :call NewCA() 
    
    +0

    ああ、私はそのようなノブを感じる!私はドキュメントをもっと慎重に読むことをもっとよく知っていたはずです。ありがとう。実際、私はデバッグのために余分な 'command!'ステートメントを持っていました。 :) – progo

    +0

    地図には最後の ''が必要です: 'nnoremap :call NewCA()' – radke

    関連する問題