2013-03-11 3 views
1

나는 imap과 재귀와 같은 vim 매핑에 관한 두 부분으로 질문을했습니다. Vim에서 매핑은 오른쪽 재귀 적이거나 왼쪽 또는 오른쪽 재귀가 될 수 없지만 왼쪽 재귀 적으로 허용되지 않습니다. 왜 안돼?Vim 매핑에서 재귀에 관한 규칙은 무엇입니까?

제가

:imap x xyz 

후 삽입 모드에서 "X"를 입력 실행

  1. (왼쪽 재귀), 버퍼로 입력 무엇

    된다 : I는 I의 의미를 설명하기 위해 다음의 실시 예를 테스트
    xyz 
    

    내가 알 수있는 한,이 동작은 imap 대신 inoremap을 사용했을 때 일어날 일과 구별 할 수 없습니다.

  2. (둘 재귀 왼쪽이나 오른쪽) 내가

    :imap x yxz 
    

    다음 삽입 모드에서 'x'를 입력 실행하면, 버퍼에 넣어 (이 시도) 무엇 없습니다

    y...yz 
    
  3. 내가

    :imap x yzx 
    

    다음 삽입 모드에서 'x'를 입력 실행하면

    (오른쪽 재귀), 무엇이다 버퍼에 넣어 (이 시도) I는

    :imap x abc 
    :imap a x 
    

    후 삽입 모드에서 "X"를 입력하여 실행하는 경우 (상호 재귀)

    yzyzyzyzyzyz... 
    
  4. 이고, I는 "순환 매핑 E223"를 수신한다.

은 내가 Vim은 왼쪽 재귀 매핑과 상호 재귀 매핑을 허용하지 않습니다 것을 증명 한 것 같다,하지만 난 확인하고 싶습니다 : 규칙이 빔에 (상호 가능) 재귀 매핑을 정의하는 무엇입니까 ?

+2

하지만 ... 왜?! 재귀 매핑의 유일한 유효한 사용은 버퍼 끝에 오류가 발생할 때까지 적용하는 것입니다. –

+0

@IngoKarkat, 왜 안 되니? Vim은 그것을 허용하므로 어떻게 작동하는지 알고 싶었습니다. 당신이 제공하는 유스 케이스가 재귀 적 매핑 (아마도 상호적일 수있다)의 유일하게 유효한 사용인가 확신 할 수 있는가? – BlueBomber

답변

1
http://vim.wikia.com/wiki/Recursive_mappings에서

과 정력 명령

:help recursive_mapping 

If you include the {lhs} in the {rhs} you have a recursive mapping. When 
{lhs} is typed, it will be replaced with {rhs}. When the {lhs} which is 
included in {rhs} is encountered it will be replaced with {rhs}, and so on. 
This makes it possible to repeat a command an infinite number of times ... 
There is one exception: If the {rhs} starts with {lhs}, the first character 
is not mapped again (this is Vi compatible) ... For example, if you use: 

:map x y 
:map y x 

Vim will replace x with y, and then y with x, etc. 
When this has happened 'maxmapdepth' times (default 1000), 
Vim will give the error message "recursive mapping". 

이 보인다 그 {좌}는 단일 문자이지만, {좌}이 때 행동이 여전히 관찰 매핑으로 문서 만 문제 자체 두 개 이상의 문자가 있고 {rhs}의 접두사입니다.

관련 문제