摘要:鑒于如何用拓展的資料相對缺乏,我決定寫下本文,以供后來者參考。前提你所用的可能不支持拓展。通過鍵入,你可以了解拓展功能是否已啟用。有兩種方式可以獲取當前狀態輸入通過的方式執行任意表達式并獲得其結果。
作為一款歷史悠久的編輯器,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::Buffer 和 Vim::Window 兩個子模塊,獲取 Buffer 或 Window 的各種狀態。比如 :ruby p Vim::Buffer.current[1] 會返回第一行的內容。可惜的是,沒有 Tab 模塊。
對應有兩種方法可以修改當前 Vim 狀態(輸出 API):
通過 Vim::command(cmd) 的方式執行任意命令。其效果等同于 :cmd。比如 :ruby Vim::command("set paste") 其實就是 :set paste 的意思。
通過 Vim::Buffer 和 Vim::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
摘要:是強大快速的文件檢索插件,但是需要的支持,配置起來不是那么簡單。建議在管理器里面安裝插件,還沒試過。中定義如下然后重啟后輸入安裝插件。啟用是命令,或。但是這時候肯定是還不能運行的,因為沒有做支持的檢查。 command-t是強大快速的文件檢索插件,但是需要ruby的支持,配置起來不是那么簡單。 建議在vim-plug管理器里面安裝插件,vundle還沒試過。vim-plug中定義如下:...
摘要:設置密碼將用戶加入群組退出登錄,使用新用戶登錄。所幸,提供直連,在配置里面只限定本地連接基本上還是可以保證數據安全的,所以目前就采用直連的方式。決定轉戰其他的服務器。 本文中我將描述在 DigitalOcean 上配置 Rails 生產環境的過程,希望對有相同需求的人一定的幫助 0x01. 創建服務器 如果你剛剛購買了 DigitalOcean 的服務,先添加一臺機器,小應用的話 ...
閱讀 3475·2021-10-13 09:39
閱讀 1458·2021-10-08 10:05
閱讀 2260·2021-09-26 09:56
閱讀 2275·2021-09-03 10:28
閱讀 2673·2019-08-29 18:37
閱讀 2032·2019-08-29 17:07
閱讀 600·2019-08-29 16:23
閱讀 2191·2019-08-29 11:24