成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

使用 Ruby 拓展 Vim

Neilyo / 3237人閱讀

摘要:鑒于如何用拓展的資料相對(duì)缺乏,我決定寫(xiě)下本文,以供后來(lái)者參考。前提你所用的可能不支持拓展。通過(guò)鍵入,你可以了解拓展功能是否已啟用。有兩種方式可以獲取當(dāng)前狀態(tài)輸入通過(guò)的方式執(zhí)行任意表達(dá)式并獲得其結(jié)果。

作為一款歷史悠久的編輯器,Vim 不僅支持用別具一格的 Vimscript 編寫(xiě)插件,還提供了 Python、Ruby、Lua 和 Perl 等語(yǔ)言對(duì)應(yīng)的接口,甚至包括了對(duì) Tcl 的支持,注意我說(shuō)的是名為 Tcl 的編程語(yǔ)言,不是某家電品牌。通過(guò)這些語(yǔ)言,開(kāi)發(fā)者可以擺脫 Vimscript 的限制,挑選自己最擅長(zhǎng)的工具來(lái)拓展自己的編輯器。幾年前,我曾經(jīng)心血來(lái)潮,學(xué)了一段時(shí)間 Vimscript,幫忙翻譯了《笨方法學(xué)Vimscript》一書(shū)。然而學(xué)到的知識(shí)如沙灘上的城堡,早已被時(shí)光之潮拍得支離破碎。所以現(xiàn)在要想寫(xiě)點(diǎn)小效果,都會(huì)用 Vimscript 搭個(gè)腳手架,用其他語(yǔ)言實(shí)現(xiàn)具體的邏輯。考慮到 NeoVim 當(dāng)前并不支持 Lua 和 Perl 等小眾語(yǔ)言,出于適用的目標(biāo),通常只會(huì)選擇用 Python 或者 Ruby 來(lái)實(shí)現(xiàn)。鑒于如何用 Ruby 拓展 Vim 的資料相對(duì)缺乏,我決定寫(xiě)下本文,以供后來(lái)者參考。

前提

你所用的 Vim 可能不支持 Ruby 拓展。通過(guò)鍵入 :echo has("ruby"),你可以了解 Ruby 拓展功能是否已啟用。幸運(yùn)的是,從 Linux 包管理器上安裝的 Vim 默認(rèn)是支持 Ruby 的。如果不支持,就只能自己重新編譯一份了。值得注意的是,NeoVim 還需要運(yùn)行 gem install neovim 來(lái)下載對(duì)應(yīng)的 Ruby Client。

Hello World

一切先從 Hello World 開(kāi)始::ruby p "hello world"。你會(huì)看到一條 “hello world” 打印在編輯器下方。通常的做法是用 Vimscript 寫(xiě)一個(gè)函數(shù),在這個(gè)函數(shù)里面調(diào)用 ruby 命令去執(zhí)行 ruby 代碼。像這樣:

function! Test()
ruby <

這里用到了 Vimscript 的 heredoc 語(yǔ)法,讓 ruby 命令執(zhí)行一個(gè)多行的 Ruby 代碼字符串。最后一行把這個(gè)函數(shù)映射到 Test 命令上,這樣就能通過(guò) :Test 的方式調(diào)用它。

如果要寫(xiě)的 Ruby 代碼比較多,推薦放到一個(gè)獨(dú)立的文件里面,然后再?gòu)?ruby 命令里面 require 進(jìn)來(lái)。記得處理下 ruby 文件加載的路徑。

Vim 跟 Ruby 相關(guān)的 API 文檔可以通過(guò) vert help ruby 看到,整篇說(shuō)明也不過(guò)一兩百行。功能是少了點(diǎn),不過(guò)日常寫(xiě)點(diǎn)小玩意,代替成段 Vimscript 還是能做到的。

IO

要想寫(xiě)出超越 Hello World 的代碼,不能不了解 Vim 提供的輸入輸出 API。
Vim 暴露在 Ruby 代碼里的 API,都在 Vim 這個(gè)模塊下面。

有兩種方式可以獲取當(dāng)前 Vim 狀態(tài)(輸入 API):

通過(guò) Vim::evaluate(expr) 的方式執(zhí)行任意 Vimscript 表達(dá)式并獲得其結(jié)果。這種方法用于獲取 Vim 變量,比如 :ruby p Vim::evaluate(g:maplocalleader)。

通過(guò) Vim::BufferVim::Window 兩個(gè)子模塊,獲取 Buffer 或 Window 的各種狀態(tài)。比如 :ruby p Vim::Buffer.current[1] 會(huì)返回第一行的內(nèi)容??上У氖牵瑳](méi)有 Tab 模塊。

對(duì)應(yīng)有兩種方法可以修改當(dāng)前 Vim 狀態(tài)(輸出 API):

通過(guò) Vim::command(cmd) 的方式執(zhí)行任意命令。其效果等同于 :cmd。比如 :ruby Vim::command("set paste") 其實(shí)就是 :set paste 的意思。

通過(guò) Vim::BufferVim::Window 去設(shè)置 Buffer 或 Window 的狀態(tài)。比如 :ruby Vim::Buffer.current[1] = "ruby evaluation" 會(huì)把第一行變成 ruby evaluation。

More

如果你對(duì)用 Ruby 拓展 Vim 感興趣,而又恰好使用 NeoVim,可以看下這個(gè)項(xiàng)目:https://github.com/alexgenco/...
這個(gè)項(xiàng)目提供了我們前面安裝的 neovim gem。除了 Vim 模塊,這個(gè) gem 還在 NeoVim 模塊下面放了更多的 API。如果你在寫(xiě)的 Ruby 拓展需要更多的 API,可以考慮給這個(gè) gem 貢獻(xiàn)代碼。當(dāng)然,額外引入的新功能就不會(huì)兼容原生 Vim 了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/24984.html

相關(guān)文章

  • VIM加速

    摘要:使用內(nèi)置命令查看加載時(shí)間參考啟動(dòng)速度優(yōu)化的一些經(jīng)驗(yàn)然后就能看到各個(gè)環(huán)節(jié)加載時(shí)間,以毫秒為單位,即小數(shù)點(diǎn)前面是毫秒數(shù)。生成的命令行結(jié)果生成的命令行結(jié)果根據(jù)系統(tǒng)判斷使用哪些插件注意的屬于系統(tǒng)級(jí)查詢,效率極低,拖慢速度。盡可能減少使用。 使用VIM內(nèi)置命令查看加載時(shí)間 參考:vim 啟動(dòng)速度優(yōu)化的一些經(jīng)驗(yàn) $ vim --startuptime /tmp/vim.log ~/.vimrc +...

    dabai 評(píng)論0 收藏0
  • Vim安裝command-t文件檢索插件

    摘要:是強(qiáng)大快速的文件檢索插件,但是需要的支持,配置起來(lái)不是那么簡(jiǎn)單。建議在管理器里面安裝插件,還沒(méi)試過(guò)。中定義如下然后重啟后輸入安裝插件。啟用是命令,或。但是這時(shí)候肯定是還不能運(yùn)行的,因?yàn)闆](méi)有做支持的檢查。 command-t是強(qiáng)大快速的文件檢索插件,但是需要ruby的支持,配置起來(lái)不是那么簡(jiǎn)單。 建議在vim-plug管理器里面安裝插件,vundle還沒(méi)試過(guò)。vim-plug中定義如下:...

    Drinkey 評(píng)論0 收藏0
  • NeoVim初識(shí)

    摘要:檢查是否已經(jīng)有了支持看到這個(gè),就是成功了添加支持首先查看本機(jī)的在哪個(gè)位置,比如。安裝到目錄下然后在配置文件中加入引用注意后要用單引號(hào)。重啟后,在中安裝應(yīng)用的命令 安裝 Mac上安裝(無(wú)需編譯直接解壓運(yùn)行): cd /tmp wget https://github.com/neovim/neovim/releases/download/v0.3.1/nvim-macos.tar.gz &...

    褰辯話 評(píng)論0 收藏0
  • 編譯VIM

    摘要:編譯最麻煩的只有一個(gè)問(wèn)題各個(gè)語(yǔ)言的位置和開(kāi)發(fā)庫(kù)的位置。第一個(gè)我們直接使用的語(yǔ)言,第二個(gè)是本機(jī)編譯開(kāi)發(fā)能夠引用的開(kāi)發(fā)庫(kù)。所以,根據(jù)語(yǔ)言支持的需要,我們要安裝這些開(kāi)發(fā)庫(kù)如果安裝好這些依賴,且明白各自的位置后,剩下的編譯是超級(jí)簡(jiǎn)單的。 編譯VIM最麻煩的只有一個(gè)問(wèn)題:各個(gè)語(yǔ)言的位置和開(kāi)發(fā)庫(kù)的位置。 注意:語(yǔ)言本身的位置好說(shuō),但是dev開(kāi)發(fā)庫(kù)就不一樣了。比如,一般我們本機(jī)只安裝python,而...

    tianyu 評(píng)論0 收藏0
  • Passenger + Nginx + Rails 生產(chǎn)環(huán)境配置

    摘要:設(shè)置密碼將用戶加入群組退出登錄,使用新用戶登錄。所幸,提供直連,在配置里面只限定本地連接基本上還是可以保證數(shù)據(jù)安全的,所以目前就采用直連的方式。決定轉(zhuǎn)戰(zhàn)其他的服務(wù)器。 本文中我將描述在 DigitalOcean 上配置 Rails 生產(chǎn)環(huán)境的過(guò)程,希望對(duì)有相同需求的人一定的幫助 0x01. 創(chuàng)建服務(wù)器 如果你剛剛購(gòu)買(mǎi)了 DigitalOcean 的服務(wù),先添加一臺(tái)機(jī)器,小應(yīng)用的話 ...

    kid143 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<