在vim函数内更改光标下的单词

3
我想编写一个函数,用于增加/减小LaTeX文本的大小。例如,当光标位于单词\footnotesize上方时,我想调用Tex_ChangeSize(-1)将其更改为\small,并使用Tex_ChangeSize(1)将其更改为\normalsize
我的代码如下:
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: 用以下内容替换当前光标下的单词
        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个回答

1

getline+setline是一个不错的选择,因为它不会破坏任何寄存器(无论是@"还是@/),但在utf-8世界中找到当前单词的限制有点棘手,因为制表符(\t)也可以使用。(col('.')+match()可以解决这个问题;请参见https://github.com/LucHermitte/lh-misc/blob/master/plugin/vim-tip-swap-word.vim以获取示例)

您还可以拥有一个nnoremapping,它使用s:ChangeSize()执行简单的cw<c-r>=<sid>ChangeSize(1)<cr>,该函数测试@"以查看下一个符号是什么,以便返回它--虽然在这种情况下不破坏@"很简单。

如果您不想让它返回任何内容,您还可以从函数内部使用:exe 'normal! "_cw'.new_word进行操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接