国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用 Ruby 拓展 Vim

Neilyo / 3226人閱讀

摘要:鑒于如何用拓展的資料相對缺乏,我決定寫下本文,以供后來者參考。前提你所用的可能不支持拓展。通過鍵入,你可以了解拓展功能是否已啟用。有兩種方式可以獲取當前狀態輸入通過的方式執行任意表達式并獲得其結果。

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

前提

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

Hello World

一切先從 Hello World 開始::ruby p "hello world"。你會看到一條 “hello world” 打印在編輯器下方。通常的做法是用 Vimscript 寫一個函數,在這個函數里面調用 ruby 命令去執行 ruby 代碼。像這樣:

function! Test()
ruby <

這里用到了 Vimscript 的 heredoc 語法,讓 ruby 命令執行一個多行的 Ruby 代碼字符串。最后一行把這個函數映射到 Test 命令上,這樣就能通過 :Test 的方式調用它。

如果要寫的 Ruby 代碼比較多,推薦放到一個獨立的文件里面,然后再從 ruby 命令里面 require 進來。記得處理下 ruby 文件加載的路徑。

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

IO

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

有兩種方式可以獲取當前 Vim 狀態(輸入 API):

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

通過 Vim::BufferVim::Window 兩個子模塊,獲取 Buffer 或 Window 的各種狀態。比如 :ruby p Vim::Buffer.current[1] 會返回第一行的內容。可惜的是,沒有 Tab 模塊。

對應有兩種方法可以修改當前 Vim 狀態(輸出 API):

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

通過 Vim::BufferVim::Window 去設置 Buffer 或 Window 的狀態。比如 :ruby Vim::Buffer.current[1] = "ruby evaluation" 會把第一行變成 ruby evaluation。

More

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24984.html

相關文章

  • VIM加速

    摘要:使用內置命令查看加載時間參考啟動速度優化的一些經驗然后就能看到各個環節加載時間,以毫秒為單位,即小數點前面是毫秒數。生成的命令行結果生成的命令行結果根據系統判斷使用哪些插件注意的屬于系統級查詢,效率極低,拖慢速度。盡可能減少使用。 使用VIM內置命令查看加載時間 參考:vim 啟動速度優化的一些經驗 $ vim --startuptime /tmp/vim.log ~/.vimrc +...

    dabai 評論0 收藏0
  • Vim安裝command-t文件檢索插件

    摘要:是強大快速的文件檢索插件,但是需要的支持,配置起來不是那么簡單。建議在管理器里面安裝插件,還沒試過。中定義如下然后重啟后輸入安裝插件。啟用是命令,或。但是這時候肯定是還不能運行的,因為沒有做支持的檢查。 command-t是強大快速的文件檢索插件,但是需要ruby的支持,配置起來不是那么簡單。 建議在vim-plug管理器里面安裝插件,vundle還沒試過。vim-plug中定義如下:...

    Drinkey 評論0 收藏0
  • NeoVim初識

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

    褰辯話 評論0 收藏0
  • 編譯VIM

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

    tianyu 評論0 收藏0
  • Passenger + Nginx + Rails 生產環境配置

    摘要:設置密碼將用戶加入群組退出登錄,使用新用戶登錄。所幸,提供直連,在配置里面只限定本地連接基本上還是可以保證數據安全的,所以目前就采用直連的方式。決定轉戰其他的服務器。 本文中我將描述在 DigitalOcean 上配置 Rails 生產環境的過程,希望對有相同需求的人一定的幫助 0x01. 創建服務器 如果你剛剛購買了 DigitalOcean 的服務,先添加一臺機器,小應用的話 ...

    kid143 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<