[英]Change word under cursor from inside a vim function
我想編寫一個函數,該函數增加/減小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()
設置回去的方法更好的方法了?
getline + setline是更整潔的選擇之一,因為它不會弄亂任何寄存器( @"
或@/
),但是在utf-8世界中,使用制表符(\\ t)來查找當前單詞的限制有些棘手也可以使用。( col('.')
+ match()
可以做到;見https://github.com/LucHermitte/lh-misc/blob/master/plugin/vim-tip-swap-word.vim舉些例子)
您也可以使用nnoremapping進行簡單的cw<cr>=<sid>ChangeSize(1)<cr>
和s:ChangeSize()
,以測試@"
來查看下一個符號以返回它-不會弄亂@"
很簡單,但在這種情況下。
您也可以使用:exe 'normal! "_cw'.new_word
函數中的:exe 'normal! "_cw'.new_word
如果您不希望它返回任何內容)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.