2013-02-21 1 views
1

내가 이렇게 같은 단일 keybind과 (사용하지 않을 경우 예를 들어, 그렇지 않으면 fo-=a과 해제, fo+=a로 사용 가능) 정력에 자동 서식을 전환하기 위해 노력하고있어 : 내가 조건문 확인 존재 일부를 사용하는 방법에 대한 생각vim에서 하나의 키 바인딩으로 자동 포맷을 전환하는 방법은 무엇입니까?

nnoremap <leader>a "magic goes here" 

하지만, 나는 아무것도 찾을 수 없었다. 어떻게해야합니까?

+1

우와. 사람, vim 질문은 SO에 속합니다. 특히 스크립팅에 대해 이야기하는 사람은 분명합니다. http://meta.stackexchange.com/questions/25925/vim-questions-do-they-belong-to-stack-overflow-or-super-user – sehe

답변

3

이 내가 할 줄 것입니다 :

function! ToggleAutoFormat() 
    if -1==stdridx(&fo, 'a') 
     set fo+=a 
    else 
     set fo-=a 
    endif 
endfunction 

nnoremap <leader>a :call ToggleAutoFormat() 
+3

Ooh, 하나의 라이너 : nnoremap a : exe 'set fo '(& fo = ~'a '?'- ':'+ ')' 'a' ' –

+0

@ Daaan kudos! 나는'= ~'연산자를 암기하지 않았습니다! 나는 듀얼 bool 설정으로 비슷한 oneliner 트릭을했는데, http://superuser.com/a/339595/75721에 관심이 있으시면 :) – sehe

+0

@ Daaan 두 분 모두 고맙습니다. 지금은 하나의 라이너를 사용하겠습니다. – none

2

마법

아래 스 니펫에서 '&'입니다 : 도움말 EXPR - 옵션

nnoremap <leader>a call ToggleFormat() 

function! toggleFormat() 
     if &formatoptions !~ 'a' 
      set fo+=a 
     else 
      set fo-=a 
     endif 
    return 0 
endfunction 
+0

+1의 청결한'! ~'버전의 sehe의 답변. 조건부와'fo' 내부에서'formatoptions'를 사용하는 것은 재미 있습니다. btw'return 0'은 무엇을합니까? – none

+0

return 0은이 컨텍스트에서 아무 것도 수행하지 않습니다. 그러나 다양한 조건에서 수익을 올리고 다른 목적으로 상태 결과를 해석 할 수 있습니다 (예 : '내가 켜기'의 경우 상단에 1을 반환). 내가 가진 것처럼 그것을 포함하는 것은 습관 일 뿐이므로이 함수를 의사 절차로 만들어야합니다. – Lighthart

관련 문제