삽입 모드에서 문자 시퀀스 매핑


11

삽입 모드에서 이미 키 조합을 매핑 할 수 있습니다.

:inoremap abc <do stuff>

그러나 여기에는 몇 가지 단점이 있습니다.

  • 와 같은 부분 버전의 시퀀스를 입력 할 때 ab문자는 전체 명령을 입력할지 여부를 확인하기 위해 "대기 중"이기 때문에 실제로 짧은 시간 동안 표시되지 않습니다. 이것은 바람직하지 않습니다. 체인의 부분 하위 문자열을 입력하면 일시 중지하지 않고 문자 체인을 매핑하고 싶습니다.

  • 을 입력 ab한 다음 일시 중지하고 (위의 점에서 언급 한대로 문자가 실제로 나타날 때까지 기다린 후)을 입력 c하면 명령이 실행되지 않습니다. 얼마나 오래 기다리 든 명령을 실행하고 싶습니다.

을 사용 iab하지만 다음과 같은 이유로 작동하지 않습니다.

  1. 문자열 뒤에 공백을 입력해야합니다.
  2. 임의의 명령을 실행할 수 없으며 텍스트 문자열 만 삽입하십시오.

지도를 사용하지 않고 삽입 모드에서 특정 문자열을 입력하면 명령이나 키 입력을 실행할 수있는 방법이 있습니까? (입력 할 때마다 성가 시게 멈추고 a너무 오래 기다리면 작동하지 않습니다)?


이러한 단점도 마찬가지입니다 :cnoremap abc <do stuff>.
Martin Tournoij

1
할 때 지연이 없습니다 ab<any key>.
romainl

답변:


10

이를 수행하는 한 가지 방법이 있습니다.

let s:inputBuffer = ''

augroup _silentInsertTrigger
    autocmd!
    autocmd InsertCharPre * call <sid>OnPreEnterChar()
    autocmd InsertLeave * call <sid>OnInsertLeave()
augroup END

function! s:OnPreEnterChar()
    let s:inputBuffer .= v:char

    if s:inputBuffer[-3:] ==# 'abc'
        echo '<do stuff>'
    endif

    return v:char
endfunction

function! s:OnInsertLeave()
    let s:inputBuffer = ''
endfunction
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.