2012-03-20 6 views
1

vim이 외부 명령을 실행 중일 때 표시되는 vim 상태 줄을 변경하고 싶습니다. vim에서 "!"를 사용하여 외부 프로그램으로 텍스트 행을 파이프하는 vim 스크립트가 있습니다. 실행 후 vim은 명령 출력을 기다리고 행을 바꿉니다. 기다리는 동안 상태 표시 줄에 외부 명령의 상태를 표시하고 싶습니다. 이것이 가능합니까?명령을 실행하는 동안 vim 상태 표시 줄 변경

답변

1

임시 전역 변수를 사용하여이 문제를 해결할 것입니다.

:이 같은이 함수의 반환 값을 사용하도록 statusline을 설정할 수 있습니다

function! TemporaryStatus() 
    if exists("g:temp_var") 
     return g:temp_var 
    else 
     return "" 
    endif 
endfunction 

: 여기가있는 경우 변수 g:temp_var의 값을 반환하는 간단한 함수는 그렇지 않으면 빈 문자열을 반환한다

set statusline=%!TemporaryStatus() 

그런 다음 느린 외부 명령을 호출 할 때 미리 표시 할 메시지를 사용하여 임시 변수를 설정하고 나중에 unlet을 설정하십시오. redraw! 명령이 있는지 빔이 표시를 갱신 (따라서 statusline에 g:temp_var의 업데이트 된 값을 사용) 만들 필요하다고

... 
let g:temp_var = "I am calling a slow external command" 
redraw! 
call SlowExternalCommand() 
unlet g:temp_var 
redraw! 
... 

참고 : 예를 들면.

편집 물론

그것을 메아리와 같이, 이후에 표시를 취소하여 메시지를 표시하는 것이 훨씬 간단 할 것이다 :

... 
redraw! 
echo "I am calling a slow external command" 
call SlowExternalCommand() 
redraw! 
... 

메시지가 표시됩니다 이런 식으로 Vim 명령 줄이 아니라 상태 표시 줄에 있습니다. 위에 정의 된 함수는 필요하지 않습니다.

+0

나는 본다. 하지만 필요한 것은 업데이트 된 상태 표시 줄입니다. 예 : 5 % 10 % 15 % (진행 정보 자체는 외부 명령에 의해 만들어지며 vim이 그것을 읽을 수있는 파이프 나 파일에 기록 될 수 있습니다). 그러나 중요한 문제는 상태 명령 줄이 외부 명령을 실행하는 동안 업데이트를 허용하는지 여부입니다. – highsciguy

+0

'!'를 사용하여이 작업을 수행 할 수 없습니다. '!'는 시스템 호출 중에 Vim을 중지시킨다. Vim을 중지하지 않는다고 주장하는'! start' (': help :! start' 참조)를 사용해 볼 수도 있습니다.하지만 사용한 적이 없습니다. 작동하면 명령이 실행되는 동안'g : temp_var'를 업데이트 할 수 있습니다. –

+0

그러나 이것은 아마도 파일에 명령의 출력을 삽입 할 수 없다는 것을 의미합니까? – highsciguy

관련 문제