99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Vimscript 函數(shù)

2018-02-24 16:02 更新

一如大多數(shù)編程語(yǔ)言,Vimscript支持函數(shù)。讓我們看看如何創(chuàng)建函數(shù),然后再討論它們的古怪之處。

執(zhí)行下面的命令:

:function meow()

你可能會(huì)認(rèn)為這將定義函數(shù)meow。不幸的是,情況不是這樣的,我們已經(jīng)掉進(jìn)了Vimscript其中的一個(gè)坑。

沒(méi)有作用域限制的Vimscript函數(shù)必須以一個(gè)大寫(xiě)字母開(kāi)頭!

即使你_真的_給函數(shù)限定了作用域(我們待會(huì)會(huì)談到),你最好也用一個(gè)大寫(xiě)字母開(kāi)頭。 大多數(shù)Vimscript程序猿都是這么做的,所以不要破例。

ok,是時(shí)候認(rèn)真地定義一個(gè)函數(shù)了。執(zhí)行下面的命令:

:function Meow()
:  echom "Meow!"
:endfunction

這次Vim愉快地定義了一個(gè)函數(shù)。讓我們?cè)囋囘\(yùn)行它:

:call Meow()

不出所料,Vim顯示Meow!

讓我們?cè)囋嚵钏祷匾粋€(gè)值。執(zhí)行下面的命令:

:function GetMeow()
:  return "Meow String!"
:endfunction

現(xiàn)在執(zhí)行這個(gè)命令試試:

:echom GetMeow()

Vim將調(diào)用這個(gè)函數(shù)并把結(jié)果傳遞給echom,顯示Meow String!

調(diào)用函數(shù)

我們已經(jīng)看到,Vimscript里調(diào)用函數(shù)有兩種不同的方法。

當(dāng)你想直接調(diào)用一個(gè)函數(shù)時(shí),使用call命令。執(zhí)行下面命令:

:call Meow()
:call GetMeow()

第一個(gè)函數(shù)輸出Meow!,然而第二個(gè)卻沒(méi)有任何輸出。當(dāng)你使用call時(shí),返回值會(huì)被丟棄, 所以這種方法僅在函數(shù)具有副作用時(shí)才有用。

第二種方法是在表達(dá)式里調(diào)用函數(shù)。這次不需要使用call,你只需引用函數(shù)的名字。 執(zhí)行下面的命令:

:echom GetMeow()

正如我們見(jiàn)過(guò)的,這會(huì)調(diào)用GetMeow并把返回值傳遞給echom。

隱式返回

執(zhí)行下面的命令:

:echom Meow()

這將會(huì)顯示兩行:Meow!0。第一個(gè)顯然來(lái)自于Meow內(nèi)部的echom。第二個(gè)則告訴我們, 如果一個(gè)Vimscript函數(shù)不返回一個(gè)值,它隱式返回0。看我們可以利用這一點(diǎn)做什么。執(zhí)行下面命令:

:function TextwidthIsTooWide()
:  if &l:textwidth ># 80
:    return 1
:  endif
:endfunction

這個(gè)函數(shù)涉及到我們之前學(xué)到的許多重要概念:

  • if語(yǔ)句
  • 將選項(xiàng)作為變量
  • 訪問(wèn)特定作用域里的選項(xiàng)變量
  • 大小寫(xiě)敏感的比較

如果你對(duì)以上內(nèi)容感到陌生,最好翻到前幾章溫習(xí)一遍。

現(xiàn)在我們已經(jīng)定義了一個(gè)函數(shù),該函數(shù)告訴我們當(dāng)前緩沖區(qū)的textwidth會(huì)不會(huì)設(shè)得‘太過(guò)寬’。 (因?yàn)?0字符的限制適用于除了HTML之外的任何代碼文件)

現(xiàn)在讓我們使用它。執(zhí)行下面的命令:

:set textwidth=80
:if TextwidthIsTooWide()
:  echom "WARNING: Wide text!"
:endif

在這里我們做了什么?

  • 一開(kāi)始我們?cè)O(shè)置全局的textwidth80。
  • 接著我們運(yùn)行一個(gè)if語(yǔ)句判斷TextwidthIsTooWide()是否為真。
  • 由于不滿足條件,if語(yǔ)句體(譯注:包括函數(shù)內(nèi)的和函數(shù)外的)不會(huì)被執(zhí)行。

因?yàn)槲覀儧](méi)有顯式返回一個(gè)值,Vim從函數(shù)中返回代表'falsy'的0。試試改變一下。運(yùn)行下面的命令:

:setlocal textwidth=100
:if TextwidthIsTooWide()
:  echom "WARNING: Wide text!"
:endif

這次函數(shù)中的if執(zhí)行了它的語(yǔ)句體,返回1,并且我們手工輸入的if語(yǔ)句也執(zhí)行了_它_的語(yǔ)句體。

練習(xí)

閱讀:help :call。目前先忽略關(guān)于"范圍"的內(nèi)容。你可以傳遞多少參數(shù)給一個(gè)函數(shù)?感到驚訝不?

閱讀:help E124第一自然段并找出你可以用哪些字符來(lái)命名函數(shù)。可以用下劃線嗎?點(diǎn)(Dashes)呢? 重音符號(hào)(Accented characters)?Unicode符號(hào)?如果讀了文檔還是搞不清楚,試一下看看。

閱讀:help return。這個(gè)命令的縮寫(xiě)("short form")是什么?(我說(shuō)了你千萬(wàn)不要用它) 在你的預(yù)期之內(nèi)嗎?如果不是,為什么?

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)