2009-11-05 6 views
9

\bit으로 쓸 수 있고 vim에서 무언가로 확장 할 수 있기를 원합니다. 하지만 약어의 왼쪽에 백 슬래시를 어떻게 인코딩합니까? vim 약어에서 백 슬래시 사용

나는이 모든 시도 :

:iab \bit replacement_text 
:iab <Bslash>bit replacement_text 
:iab <bs>bit replacement_text 

을하지만,이 모두를위한 E474: Invalid argument을 얻었다.

map_backslash 도움말 항목에 <Bslash>이 나와 있지만 작동하지 않는 것으로 보입니다. 당신이 자주 코드에서 당신이 (나를 위해 탭 위) 지연과 같은`역 따옴표 같은 다른 지도자를 해달라고하면 또한

inoremap \bit replacementtext 

:iab `f foobar 

사용하지 않을 수 있다면

+0

Aaarrghghh! 크래커 야. 내가 배운 은 {rhs} 것입니다. {lhs}에서 "\ b"(따옴표 제외)가 작동하지만 두 번째 문자가 "\ bi"에 추가되면 E474가 나타납니다. "\\"와 "\\ b"는 허용되지만 "\\ bi"는 허용되지 않습니다. '\ bit "(작은 따옴표가없는 경우)는 작동하지만 큰 따옴표는 ab의 일부입니다. 내가 말했던 것처럼, "Aaarrghghh!" +1 –

+0

당신이 이것을 답장하면 @Ewan 나는 이것을 투표 할 수 있으며 따옴표를보기가 더 쉬울 것입니다. 이것은 흥미로운 것들입니다 ... – Peter

답변

9

"bit"에 약어를 정의한 다음 앞에 "\"가 있는지 테스트하고, 그렇다면 새 텍스트를 반환하거나 그렇지 않으면 "bit"를 테스트 할 수 있습니다.

function! s:Expr(default, repl) 
    if getline('.')[col('.')-2]=='\' 
    return "\<bs>".a:repl 
    else 
    return a:default 
    endif 
endfunction 

:inoreab bit <c-r>=<sid>Expr('bit', 'foobar')<cr> 

그건 내가 MapNoContext()에서 사용한 트릭입니다.

EDIT : :h abbreviations을 참조하십시오. 요청한 사항을 직접 달성 할 수없는 이유가 있습니다.

EDIT2 : 그것은 쉽게 이런 식으로 캡슐화 할 수 있습니다

function! s:DefIab(nore, ...) 
    let opt = '' 
    let i = 0 
    while i != len(a:000) 
    let arg = a:000[i] 
    if arg !~? '<buffer>\|<silent>' 
     break 
    endif 
    let opt .= ' '.arg 
    let i += 1 
    endwhile 

    if i+2 != len(a:000) 
    throw "Invalid number of arguments" 
    endif 
    let lhs = a:000[i] 
    let rhs = a:000[i+1] 

    exe 'i'.a:nore.'ab'.opt.' '.lhs.' <c-r>=<sid>Expr('.string(lhs).', '.string(rhs).')<cr>' 
endfunction 

command! -nargs=+ InoreabBSlash call s:DefIab('nore', <f-args>) 

을 그리고 사용하는 간단한 :

InoreabBSlash <buffer> locbit foobar 

또는

InoreabBSlash bit foobar 
1

+0

이것은 똑같은 방식으로 작동하지는 않지만 똑같습니다. 그 나머지 시간을 기다리는 동안 성가신 일시 중지가있을 것입니다. 나는 주위에 방법을 꽤 볼 수 없습니다. – sykora

+0

그래, 나 자신을 시도 - 그리고 그것을 좋아하지 않았다. – Peter

+0

나는 몇 가지 imap ( = 일부 함수 처리를 위해)을 사용한다. 잠시 멈춘다. (더 빨리 입력해야한다.) – michael

0

당신은 단지로 백 슬래시를 사용할 수 있습니다 그 뒤에 하나의 문자 만있는 경우 약자의 접두사이므로 :iab \b replacementtext 작동합니다. 내가 약식의 'NORE "버전을 사용하고

inoreabbr \bit\ replacement_text 

참고, 더 나은 당신이 재귀를하지 않을 경우 명확하게하기 위해 : 나는 양쪽에 백 슬래시를 사용하는 것이 좋습니다

2

는 정력이 그런 식으로 행복하다 확장. 나는 오랫동안 아래의 약어를 사용 해왔다. 그들은 크게 작동한다 :

inoreabbr \time\ <C-R>=strftime("%d-%b-%Y @ %H:%M")<CR> 
inoreabbr \date\ <C-R>=strftime("%d-%b-%Y")<CR> 
+0

창조적 인 대안. 뒷부분의 백 슬래시는 _non-id_로 허용되는 약어로 변환합니다. –

관련 문제