2015-02-23 27 views
0

我試圖用vim的indentexpr EXECUT與下代碼如何使用EXECUT在vim indentexpr

function! AddSpace(lnum,str) 
    while len(getline(a:lnum)) < 80 
     execut a:lnum . "," . a:lnum . "s/".a:str."/ ".a:str 
    endwhile 
endfunction 

function! GetIndent() 
    if getline(v:lnum) =~ ';' 
     call AddSpace(v:lnum,";") 
    endif  
    ... 
    return ... 
endfunction 

setlocal indentexpr=GetIndent() 

和GG = G.It不工作... Vim的只是失敗陷入死循環。但是,其他縮進規則在循環之前工作。

但母雞我通過

call AddSpace(3,";") 

它工作正常調用它。

也許「execut」沒有在indentexpr工作嗎?

還有什麼方法可以用「execut」插入空間到文件中嗎? 或者有沒有更好的方法來完成沒有光標移動插入?

感謝您的幫助!

+1

如果你急於縮短執行時間,爲什麼不縮短到'exe'? – romainl 2015-02-23 14:32:47

+0

exe聽起來像是從微軟的東西... – kosmos 2015-02-23 14:44:27

回答

2

'indentexpr'並不意味着直接實際修改文本。實際上,在評估表達式時明確禁止修改文本。錯誤消息在默認情況下被抑制,因此您不會看到有什麼錯誤,但表達式只是在遇到文本修改時停止。

您的AddSpace函數應該返回要添加的空格的數量,而不是實際添加空格。請注意,您不需要while循環,只需使用減法來查找所需的空格數。

查看:help 'indentexpr'瞭解詳情。

+0

如果我想獲得'console.log(一);'當縮進'console.log(一);'?我只能源另一個腳本? – kosmos 2015-02-24 02:19:32

+0

縮進隻影響行首的空白。如果你想影響整條線,你需要一個自定義映射,或者可能是一個formatexpr。 – Ben 2015-02-24 16:13:14