2010-07-23 3 views
10

입니다. VIM이 커서를 약자 확장 후 일부 위치에 배치하도록 지시하는 방법이 있습니까? 는 .gvimrcVIM 약어 커서 위치는

iabberv <? <?=|?> 

이 같은 뭔가를 말과 파이프 문자가 자동으로 어디 있는지 커서를 배치 할. 나는이 경우에 사용하십시오

답변

10

빠른 해결책은 약자에 몇 가지 키 입력을 삽입하는 것입니다

iabbrev <? <?=?><Left><Left> 

= 후 커서를 왼쪽으로 두 곳을 배치겠습니까.

이러한 방식으로 <End>, <Home>과 같은 다양한 이동 키를 사용하거나 <Esc>으로 일반 모드로 돌아가서 일반적인 일반 모드 명령을 명령 할 수도 있습니다. 예는

이고 첫 번째 예와 동일합니다. 약어로 확장하면 공백이 하나 더 생깁니다. 은 약자로 <BS> (백 스페이스)을 사용하여 제거 할 수 있습니다. 또는 <C-]>으로 확장하면 공간이 없습니다.

보정이 가장 잘 .vimrc에 넣어

func Eatchar(pat) 
    let c = nr2char(getchar(0))  
    return (c =~ a:pat) ? '' : c  
endfunc 

: 약어가 처음 확장되기 때문에, 그리고 공간이 삽입 된 후에는 도움 (map.txt)에서 발견되는 작은 기능이 필요합니다. 이제 다음과 같은 약자들이 의도로 완벽하게 작동합니다

:iabbrev <silent> <? <?=?><Left><Left><C-R>=Eatchar('\s')<CR> 

그것은 조금 지저분하지만 공백을 제거하는 외부 함수 호출을 가지고 있으며 잘 작동합니다.

+0

나는 iabbrev HHA을 시도 있지만 "="문자 :) 내가 을 두어야을 삭제?를 이게 바로 문제를 제외하고 내가 원하는 것입니다. – ivan73

+0

대답하기 전에 ''기능을 테스트하지 않으 셨다니 죄송합니다. 적절한 해결 방법으로 편집했습니다. – progo

+0

쿨,이 대답 : 나는 이런 식으로 사용하고 받아들이 작동합니다 'iabbrev 가 HHA가 = Eatchar ('\ s의') ' – ivan73

0

lh-map-tools으로 수행 할 수 있습니다

" 
" in {rtp}/ftpluvin/vim/vim_snippets.vim 
inoreab <buffer> <silent> if  
     \ <C-R>=InsertSeq('if', 'if!cursorhere!\nendif!mark!')<CR> 

다른 플러그인은 유사한 기능을 제공합니다.

4

원하는 것은 스 니펫입니다. 나는 저격자를 사용한다.

+0

투표까지, 팁 주셔서 감사합니다 Daenyth – ivan73

+0

당신은 살펴 보셔야을 [UltiSnips] (https://github.com/SirVer/ultisnips)에, 그것은 단지 멋지다! – aymericbeaumet