我想编写一个函数,它可以增加/减少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: 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()
更好的方法?
答案 0 :(得分:1)
getline + setline是一个更整洁的选择,因为它不会弄乱任何寄存器(@"
和@/
),但是找到当前单词的限制有点棘手8世界,也可以使用制表符(\ t)。 (col('.')
+ match()
会执行此操作;有关示例,请参阅https://github.com/LucHermitte/lh-misc/blob/master/plugin/vim-tip-swap-word.vim
您还可以使用nnoremapping执行简单的cw<c-r>=<sid>ChangeSize(1)<cr>
s:ChangeSize()
,@"
测试@"
以查看下一个符号以便返回它 - 而不是弄乱{{1}虽然在这种情况下很简单。
如果您不想让它返回任何内容,您也可以在该功能中使用:exe 'normal! "_cw'.new_word
。