簡體   English   中英

從vim函數內部更改光標下的單詞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM