2010-06-03 4 views
6

나는 가능한 한 자주 명령 모드로 자신을 얻기 위해 나의 정력을 좋아 손실 될 때. 나는 포커스를 잃는 것이 좋은 일이 될 것이라고 생각합니다. 내가 찾은 모든 것은 잃어버린 초점을 저장하는 것입니다. macvim에서 탭을 전환 할 때 또는 다른 응용 프로그램에 탭 이동 + cmd를 할 때빔은 : 명령 모드로 돌아 초점은

나는 cmd를 모드로 자동 복귀에 싶습니다.

+0

및 수퍼 유저에 대한 답변 : http://superuser.com/questions/236534/change이 만약

함께 PopOutOfInsertMode의 내용을 대체, MacVim에서 당신을 위해 작동하지 않습니다 -to-normal-mode-when-macvim-goes-background – rubiii

답변

16

다음 autocommand은 "명백한"선택이 될 것입니다.

au FocusLost,TabLeave * stopinsert 

불행히도, TabLeave의 경우에만 제대로 작동하는 것 같습니다. 의 focusLost 이벤트가 트리거되어 있지만 어떤 이유로 stopinsert 명령은 실제로 빔의 초점을 회복 한 후에의 키 이벤트가 수신 될 때까지 적용되지 않습니다.

대신 feedkeys을 활용할 수 있으며,이 "무슨 일이 있어도 정상 모드로 저를 얻을!" key combo :

au FocusLost,TabLeave * call feedkeys("\<C-\>\<C-n>") 

유일한 단점은 제가 추가 한 것 빔 (7) 2006 년

+0

완벽 하군, 고마워! – devth

+0

쿨 -'Ctrl - \ _ Ctrl-N'에 대해 전혀 알지 못했습니다. 내 vimrc에있는 stopinsert 라인을했지만, 항상 ... 버퍼에 반환 할 때 한 번 더 문자를 갔다는 사실에 의해 도청되었습니다 –

+0

WQ 내가 댓글을 달았,하지만 내 댓글이 서식 제공됩니다. 아래를 참조하십시오. :) 이에 대한 지침은 @jamessan에게 감사해야합니다. –

7

다시 출시 된 이후 feedkeys()는하지만, 적어도 빔 7.이 안 큰 거래를 필요로한다는 것이다 댓글을 달았지만 솔루션을 포맷 할 수는 없습니다.

피드 키 솔루션은 훌륭합니다. 다른 모드가 무엇이든 상관없이 보통의 모드로 항상 돌아갑니다. 명령 줄 모드를 취소하고 싶지 않습니다. (Windows의 경우 끌기 &)) 그리고 비주얼 모드를 취소 할 필요는 없습니다. 단지 삽입 모드를 취소하고 싶었습니다. 당신이 삽입 모드 인 경우에만 튀어, 즉

autocmd FocusLost * call PopOutOfInsertMode() 

function! PopOutOfInsertMode() 
    if v:insertmode 
     feedkeys("\<C-\>\<C-n>") 
    endif 
endfunction 

:

이 솔루션은 다음과 같이 나타납니다. v : insertmode가 "일반 삽입"에서 'i', 바꾸기 모드에서 'r', 가상 바꾸기 모드에서 'v'가 될 수 있기 때문에 더 세분화 될 수 있습니다. 내게있어, 상관없이 튀어 나와서 좋지만 사용자가 맞게 편집하고 싶을 수도 있습니다. 중복 질문이있다

if v:insertmode == 'i' | call feedkeys("\<C-\>\<C-n>") | endif 
+0

추가 정보를 제공해 주셔서 감사합니다! 나는 원래의 해결책과 동일한 문제를 발견했다. 커맨드 모드에서 탭을 짚고 뭔가를 들여다보고 다시 돌아와서 지워 버리는 것은 실망 스러웠습니다. – devth

+1

불행히도 이것은 MacVim에서 작동하지 않습니다. 나는 그것이해야할 일의 목록에 있지만, 이유를 들여다 보지 않았습니다. :) –

+0

혹시 이것을 알아 냈습니까? 나는 똑같은 문제를 겪고있다! – ELLIOTTCABLE

관련 문제