2010-03-29 6 views
2

이것에 공란을 그리면 Google이 도움이되지 못했습니다.Vim : 함수에서 ex 명령 (설정)을 호출 하시겠습니까?

이 같은 기능을 원하십니까 :

function JakPaste() 
     let tmp = :set paste? 
     if tmp == "paste" 
       set nopaste 
     else 
       set paste 
     endif 
endfunction 

map <F2> :call JakPaste()<CR> 

그러나이 작동하지 않습니다. 이 오류에

function JakPaste() 
     let tmp = set paste? 
endfunction 

map <F2> :call JakPaste()<CR> 

누르면 F2 결과 :

Error detected while processing function JakPaste: 
line 1: 
E121: Undefined variable: set 
E15: Invalid expression: set paste? 
Hit ENTER or type command to continue 

어떻게 내가 정력 기능에서 전직 명령 (세트)를 호출해야 내가 점선을 격리했다?

This 다소 관련성이 있지만 아직 이해가 안가는 것 같습니다.

답변

6

이유가 작동하지 않는 이유는 표현식에서 명령을 실행하려고한다는 것입니다. 다른 것들입니다. 단지 ? 구조를 사용하면 vim이 옵션의 값을 반향하게됩니다. 이것은 값을 반환하는 함수와 같지 않습니다. 명확하게하기 : 문제는 함수에서 ex 명령을 호출하는 것이 아니라 함수의 다른 모든 행이 ex 명령입니다. 식에서 ex 명령을 호출한다는 것입니다.

하지만 여기서 시도하는 작업을 수행하는 올바른 방법은 아닙니다. 여기에 가장 짧은 방법은 rampion의 의견 덕분이다 :

set paste! 

를 이제, 당신이 이제까지 똑똑 뭔가 단지 부울 반전보다는, 당신이 사용할 수있는 변수로 옵션 이름을 설정하는 &을 사용할 수 있습니다 필요한 경우. 여기에 두 가지 방법으로 사용할 수 있습니다

" still a function, good for taking extra action (here, printing notification)" 
function TogglePaste() 
    if (&paste) 
     set nopaste 
     echo "paste off" 
    else 
     set paste 
     echo "paste on" 
    endif 
endfunction 

" just set the variable directly" 
let &paste = !&paste 
+6

또는 그냥 '! 설정 붙여 넣기' – rampion

+0

@rampion : 와우, 내가 문서를 충분히 읽은 계속 생각. 맞춰봐. – Cascabel

+0

': set paste! '를 사용하여 새 값을 표시하도록 할 수도 있습니다. 붙여 넣기? ' –

관련 문제