2012-10-30 3 views
2

에서 호출 된 모드를 감지 할 수있는 함수에 :map을 사용할 수 있습니까? 이것은 내가 무엇을 가지고 :평야에서 호출 된 함수 내에서 모드 검색 :

func! s:ShowModeFunction() 
    echomsg mode(1) 
endfunc 

noremap <expr> <Plug>ShowMode <SID>ShowModeFunction() 

map \m <Plug>ShowMode 

지도 \m은 결국 일반 모드, 운영자중인 모드, 또는 비주얼 모드 중 하나를 나타내는 문자열 을 메아리 상단 함수를 호출합니다.

이것은 중간지도의 <expr>에서만 작동합니다. 모든 콜론 명령은 이 항상 "일반 모드"를 반환하기 때문에 최종 mode() 호출을 쓸모 없게 만듭니다. 불행히도 <expr>은 정확히 이고, 오른쪽에 표현식이 필요하며, 함수는 아무것도 반환하지 않으므로 암시 적 반환 값 0이 사용됩니다. 은 커서를 첫 번째 열로 이동시킵니다.

답변

4

그냥이 다음 식 매핑에서 어떤 조합입니다, 함수 반환 아무것도하지 않습니다 :

func! s:ShowModeFunction() 
    echomsg mode(1) 
    return '' 
endfunc 

지도-EXPR의 다른 제한이 있다면, 그냥 거기에 변수를 설정하고, 수행 실제 작업 (변수 평가 포함)을 "보통"매핑으로, :call<Plug>ShowMode 매핑 (또는 다른 중간 매핑)에 추가하여 사용자 정의 가능성을 유지할 수 있습니다.

+0

이것은 나를 위해 작동하지 않습니다. 이제 모드 문자와 함께 프롬프트가 표시됩니다. 'V'. 두 번째 제안에 대해서 -': call' 명령은''mode()'가''normal mode ''를 위해 항상''n '을 반환 할 것이므로 의문의 여지가 없습니다. – glts

+0

당신의 정확한 예제가 저에게 효과적입니다. ': echomsg' 때문에 디스플레이가 좀 엉망이지만 프롬프트가 아니므로'l'이나'i'와 같은 명령이 즉시 실행됩니다. ': let g : mode = mode (1)'로 바꿔보십시오. 어쨌든 실제 사용에 가깝습니다. –

+0

충분히 공정해. 고마워. 잠시 질문을 공개하겠습니다. – glts

관련 문제