2011-01-29 3 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 아무튼 ' 내부 기능을 확인하기 위해 멀리갑니다. 내 커서가 true 또는 false이라는 단어에없는 경우 재귀 동작이 발생합니다.

이 시점에서 나는 많은 것을 맹세한다. 왜 Bram이 Emacs로부터 훌륭한 아이디어를 선택하지 않았는지, 모든 것이 기능과 키 바인딩이 자유롭게 설정할 수 있어야한다는 이유가 무엇인가. 그럼 난 그냥 <C-a>에 대한 함수를 확인하고 그 함수에서 호출 할 수 있습니다. 그러나 아니오, 나는 그런 기능을 발견 할 수없고, execute "normal foo" 어구는 Vim 관용구 인 것을 보인다.

내가 <C-a> 작품을 만들 수있는 방법에 대한 제안

있도록 커서가 true 또는 false
  • 가을 다시 단어 이상

    • 전환 부울 내장 그렇지 않으면 <C-a> 행동

    감사합니다.

  • 답변

    8

    변화

    execute "normal \<C-a>"
    에 "!"

    normal! ^A

    당신이 정상 모드에서

    <C-v><C-a>
    를 실행하여 ^를 얻을 수 있습니다

    :help :normal

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

    에서 일반적인 말 "사용 기본 매핑"

    +0

    모두 대답은, 같은, 올바른 해결책을 가질 수 필요하지 않습니다 정의. 나는 당신을 지역 사회에 환영하기위한 받아 들인 대답으로 이것을 체크했다. :) – progo

    6

    의 말에 또한 명령은 직접

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

    오, 이런, 나는 그런 멍청한 느낌! 나는 문서를 더 조심스럽게 읽는 것이 더 잘 알려 져야했다. 대단히 감사합니다. 사실 나는 디버깅 목적을위한 관계없는'명령! '문장을 가지고 있으며, 당신 말이 맞습니다. :) – progo

    +0

    지도는 마지막 ''이 필요합니다 :'nnoremap : call NewCA() ' – radke