2010-12-06 33 views
0

下面的代碼已從this blogVIM codewalk通過

function! Privatize() 
    let priorMethod = PriorMethodDefinition() 
    exec "normal iprivate :" . priorMethod . "\<Esc>==" 
endfunction 

function! PriorMethodDefinition() 
    let lineNumber = search('def', 'bn') 
    let line  = getline(lineNumber) 
    if line == 0 
    echo "No prior method definition found" 
    endif 
    return matchlist(line, 'def \(\w\+\).*')[1] 
endfunction 

map <Leader>p :call Privatize()<CR> 

我試着拿起,但我不明白PriorMethodDefinition方法。有人可以通過這段代碼走過我嗎?

回答

1

PriorMethodDefinition返回光標上方第一個方法定義的名稱。

它通過search爲包含文本'def'的行向後執行此操作。搜索功能返回行號,getline用於檢索該行的內容。

函數在使用正則表達式獲取方法的名稱並返回之前,檢查它是否找到了有效的行。

,如果您想了解具體情況你可以閱讀更多有關這些功能 - 見:

:help search 
:help getline 
:help matchlist 

編輯:你也可以閱讀有關正則表達式模式

:help pattern 

但起初我覺得有點困惑,所以請允許我稍微解釋一下。下面是使用的表達:

'def \(\w\+\).*' 

這將搜索匹配以下模式的任何文字:「後面緊跟着零個或多個字符.*一個或多個‘字’字\w\+文本def」。匹配單詞字符的部分被放入一個組(或原子)中,由逃脫的零部件指定\( & \)。有關單詞字符等的定義的更多信息可以在上面的幫助鏈接中找到。

matchlist函數返回匹配列表,其中第一個[0]是與正則表達式匹配的全文,後跟子匹配(即我們的組)。我們感興趣的第一個這樣的submatch,因此[1]

+0

真棒。你的回答給了我一些指示,開始閱讀vim的書。謝謝。 – 2010-12-06 23:43:32