2012-05-11 56 views
0

我正在嘗試爲像我這樣的瘋狂的人寫一個不錯的功能,喜歡那裏的線條要完美對齊。Vi:如何自動插入空格

我經常寫一些格式爲「key = value」的文件。 由於密鑰可能包含不確定數量的字符,因此必須手動對齊不是很酷的「=」符號。

有沒有辦法告訴vi「當某人鍵入相等的字符,然後插入空格作爲必要的去25列,然後寫一個等號」?

第二步將定義一個快捷方式將此格式應用於整個文件。

任何幫助,將不勝感激。

本。

回答

1

=的行爲映射到插入模式

下一個代碼將從當前光標位置開始直到第24列爲止添加空格,並在其後添加一個等號。如果在光標位置後面有字符(假設在一個字的中間),則這些字符將在第25列後移動。將它添加到您的vimrc文件中並嘗試。

"" If length of the line is more or equal to 24, add an equal sign at the end. 
"" Otherwise insert spaces from current position of cursor until column 24 
"" and an equal sign, moving characters after it. 
function My_align() 
    let line_len = strlen(getline('.')) 
    if line_len >= 24 
     s/$/=/ 
     return 
    endif 
    let col_pos = col('.') 
    exe 's/\%#\(.\|$\)/\=submatch(1) . printf("%' . (24 - col_pos) . 's%s", " ", "=")/' 
endfunction 

inoremap = <Esc>:call My_align()<CR>A 

對於第二步,使用multiple repeats命令,檢查等號並插入空格,直到第25列之前。如果等號在第25列之後執行,將不起作用,但您明白了。

:g/=/exe 's/=/\=printf("%' . (24 - stridx(getline('.'), "=")) . 's", " ") . submatch(0)/'