給ctags新增對Elixir的支援

2021-09-20 02:36:39 字數 1919 閱讀 1600

ctags 官方已經許久未更新了,截至本文寫作時止,最後一次更新在 2009-07-09,所以很多新出的語言都沒能得到支援

現在 github 上有乙個 fork 出來的專案叫 universal-ctags,它拾起了對 ctags 的更新,但是很遺憾,elixir 也暫未得到支援

好在 ctags 支援乙個自定義的配置檔案,名為 .ctags,可以在這裡書寫規則實現對未知程式語言的解析

下面是針對 elixir 的配置

--langdef=elixir

--langmap=elixir:.ex.exs

--regex-elixir=/^[ \t]*def(p?)[ \t]+([a-z_][a-za-z0-9_?!]*)/\2/f,functions,functions (def ...)/

--regex-elixir=/^[ \t]*defcallback[ \t]+([a-z_][a-za-z0-9_?!]*)/\1/c,callbacks,callbacks (defcallback ...)/

--regex-elixir=/^[ \t]*defdelegate[ \t]+([a-z_][a-za-z0-9_?!]*)/\1/d,delegates,delegates (defdelegate ...)/

--regex-elixir=/^[ \t]*defexception[ \t]+([a-z][a-za-z0-9_]*\.)*([a-z][a-za-z0-9_?!]*)/\2/e,exceptions,exceptions (defexception ...)/

--regex-elixir=/^[ \t]*defimpl[ \t]+([a-z][a-za-z0-9_]*\.)*([a-z][a-za-z0-9_?!]*)/\2/i,implementations,implementations (defimpl ...)/

--regex-elixir=/^[ \t]*defmacro(p?)[ \t]+([a-z_][a-za-z0-9_?!]*)\(/\2/a,macros,macros (defmacro ...)/

--regex-elixir=/^[ \t]*defmacro(p?)[ \t]+([a-za-z0-9_?!]+)?[ \t]+([^ \ta-za-z0-9_]+)[ \t]*[a-za-z0-9_!?!]/\3/o,operators,operators (e.g. "defmacro a <<< b")/

--regex-elixir=/^[ \t]*defmodule[ \t]+([a-z][a-za-z0-9_]*\.)*([a-z][a-za-z0-9_?!]*)/\2/m,modules,modules (defmodule ...)/

--regex-elixir=/^[ \t]*defprotocol[ \t]+([a-z][a-za-z0-9_]*\.)*([a-z][a-za-z0-9_?!]*)/\2/p,protocols,protocols (defprotocol...)/

--regex-elixir=/^[ \t]*record\.defrecord[ \t]+:([a-za-z0-9_]+)/\1/r,records,records (defrecord...)/

把上述內容儲存到文字檔案,並命名為 .ctags,macosx 和 linux 放置到自己的家目錄下即可;windows 下得先設定個名為 homepath 的環境變數,然後將 .ctags 放置到該環境變數所指路徑下

開啟命令列,執行 ctags --list-languages,在輸出的資訊中能找到 elixir 則說明配置成功

在 vim 裡面即時瀏覽**結構,首推 tagbar 外掛程式,這裡就不介紹怎麼安裝、怎麼使用了,下面是新增對 elixir 的支援,將其寫在 .vimrc 中即可

let g:tagbar_type_elixir = , 'scope2kind': }

新增對應的指令碼

prompt eas cj401 boe db oracle tables full install sie.sie deduction invoices.sql eas cj401 boe db oracle tables full install sie.sie deduction invoic...

C vector新增物件方式

3 vector新增物件方式2 指定容量 1 vector每新增乙個物件,就會進行一輪呼叫拷貝建構函式建立新物件 2 若新增物件時容量不足 1 先通過拷貝構造出來建立新物件 2 進行擴容遷移原先的物件 3 新增 1 步驟中建立的新物件 3 若vector初始化時未指定capacity容量,則每新增乙...

js動態新增物件

js的陣列,字串,物件操作是實現一些功能不可缺少的部分。一般情況下js的陣列和字串動態加起來比較方便,都有自己提供的方法,陣列的push 字串直接用加號等。但是js物件動態新增就需要一點工作了 下面我寫了兩種動態新增物件的方法 第一種function toobj1 key,val data key ...