簡體   English   中英

vim中的子功能

[英]subfunctions in vim

我在menu.vim中創建了很多功能。

我注意到在許多函數中使用了相同的代碼,這就是為什么我決定使用子函數來清理文件的原因。

pe這是我的函數中經常返回的代碼:

let zoek = @/    
if a:type == "'<,'>"    
 let r = substitute(zoek, '\\%V', '', 'g')    
elseif a:type == "%"    
 let r = zoek    
endif    

let a = substitute(r, '\', '', 'g')      

if matchstr(d, '>') == '>' || matchstr(d, '<') == '<'     
 let e = substitute(d, '\zs>\(\d\+\)%<\ze', '\1-', 'g')     
endif

如何從中創建子功能? 如何調用?
Vim有子功能嗎?

您可以在字典中定義«local»函數:在以下代碼中

function MyFunc()
    let d={}
    function d.function()
        echo "Foo"
    endfunction
    call d.function()
endfunction

函數d.function僅可在s:MyFunc內部訪問,並在s:MyFunc退出后銷毀。 我將«local»用引號引起來,因為d.function是名為42全局函數(或其他數字,沒關系)。 沒有引用就不能調用它,創建引用的唯一方法是使用function dict.key() (引用可以在創建后復制,但是您不能使用對function()調用來創建引用MyFuncfunction("MyFunc") )是可能的。 請注意,每次創建函數時,數字(在這種情況下為42)都會遞增,並且我既不知道最大數量是多少,也不知道達到最大數量時將發生什么。 我個人使用字典功能是因為它們還有兩個優點:

  1. 如果沒有調試器或在某處顯式傳遞函數引用(可能作為其容器的一部分),則無法訪問在腳本本地字典中定義的字典函數。
  2. 如果在字典中定義了一個以上的函數以清除它們,則只需刪除該字典即可。 對於重新加載插件很有用。

Vimscript中只有一種類型的函數,但是我不確定這是否是您正在menu.vim中使用的函數。 因此定義了用戶定義的函數:

    function! MyNewFunction()
        " your code here
    endfunction

然后,您可以使用以下命令在腳本的其他位置(以及其他函數內部)調用此函數:

    call MyNewFunction()

或使用設置等於您的函數返回值的變量

    let my_variable = MyNewFunction()

當然,這是一個非常簡單的概述,因為您說您已經在使用函數。 更多信息,包括變量的使用,在這里:

    help user-functions

抱歉,如果我沒有回答您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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