2011-04-13 5 views
2

LaTeX 텍스트의 크기를 늘리거나 줄이는 함수를 작성하고 싶습니다. 커서가 단어 \ footnotesize 이상인 경우, 예를 들어, 나는 \ normalsize로 변경 작은 및 Tex_ChangeSize(1) \ 로 변경 Tex_ChangeSize(-1)를 호출합니다.vim 함수 내부에서 커서 아래 단어 바꾸기

무엇 나도 몰라
 
function! Tex_ChangeSize(direction) 
    let sizes = ["tiny", "scriptsize", "footnotesize", "small", "normalsize", "large", "Large", "LARGE", "huge", "Huge"] 
    let cursize = index(sizes,expand("<cword>")) 
    if cursize != -1 
     "FIXME: replace current word under cursor with the following 
     echo sizes[cursize + a:direction] 
    endif 
endfunction 
imap <C-h> <C-o>:call Tex_ChangeSize(-1)<Enter> 
imap <C-g> <C-o>:call Tex_ChangeSize(1)<Enter> 

, 커서 아래에있는 단어를 교체하는 방법 (참조 FIXME) :

는 내가 가지고있는 것은 다음과 같다. 더 정확하게 말하면 : getline(line('.'))을 파싱하고 setline()으로 다시 설정하는 것보다 나은 방법이 있습니까?

답변

1

getline + setline은 어떤 레지스터도 엉켜하지 않으므로 (@"@/도 아니지만) 현재 단어의 한계를 찾는 것은 utf-8 세계에서 약간 까다 롭습니다. 탭 문자 (\ t)를 사용할 수도 있습니다. (col('.') + match() 그것을 할 것이다 예제 https://github.com/LucHermitte/lh-misc/blob/master/plugin/vim-tip-swap-word.vim 참조)

또한 볼 @"을 테스트 s:ChangeSize() 간단한 cw<c-r>=<sid>ChangeSize(1)<cr> 어떤 기호를 반환하기 위해 옆 않는 nnoremapping을 가질 수 있습니다 - @"가 장난하지 이 경우 간단합니다.

아무 것도 반환하지 않으려면 기능 내에서 :exe 'normal! "_cw'.new_word으로 재생할 수 있습니다.