介紹幾個用emacs寫verilog的好用的插件,效率翻倍。
1、projectile
projectile是以項目為單位進(jìn)行編輯插件。默認(rèn)會把git、mercurial hg的根目錄當(dāng)作項目根目錄,也可以手動創(chuàng)建一個.projectile
的空文件作為項目根路徑的標(biāo)記。這里(https://docs.projectile.mx/projectile/index/html)有詳細(xì)介紹。
配置方法:
(add-to-list 'load-path "~/.emacs.d/projectile")
(require 'projectile)
(projectile-mode +1)
(global-set-key [f12] 'projectile-command-map)
配置好后,emacs打開文件時會自動識別項目根目錄,然后用F12 f xxx
來打開當(dāng)前項目下的文件,就不用指定具體路徑,插件會自動在項目下匹配文件名。
又如,F12 s g
就會自動調(diào)用grep
在整個項目下搜索,并且會自動過濾一些臨時文件目錄。當(dāng)然你可以指定用ag
(F12 s s
)或者ripgrep
(F12 s r
)來搜索,速度比linux自帶的grep
快得多。
附:ag的安裝配置
下載ag安裝包(也可以從這里下載:ag_2.1.0.tar.gz,適用于centos7.9,解壓即可),安裝并加到PATH。
下載emacs的ag
、dash
和s
三個配置文件(可以從這里https://melpa.org下載)。
修改.emacs
,增加ag
的配置,如下。
(add-to-list 'load-path "~/.emacs.d/projectile")
(add-to-list 'load-path "~/.emacs.d/ag")
(add-to-list 'load-path "~/.emacs.d/dash")
(add-to-list 'load-path "~/.emacs.d/s")
(require 'projectile)
(require 'ag)
(projectile-mode +1)
2、ivy、counsel、swiper
ivy(包括counsel、swiper)是一個命令自動補全的插件,當(dāng)我們在搜索、執(zhí)行命令時會自動補全,效率會高很多。
配置方法:
(add-to-list 'load-path "~/.emacs.d/swiper")
(require 'ivy)
(require 'counsel)
(require 'swiper)
(ivy-mode)
(setq ivy-use-virtual-buffers t)
(setq enable-recursive-minibuffers t)
(global-set-key "C-s" 'swiper)
(global-set-key "C-r" 'swiper-backward)
(global-set-key (kbd "M-x") 'counsel-M-x)
(global-set-key (kbd "C-x C-f") 'counsel-find-file)
把swiper
和swiper-backward
綁定的C-s
和C-r
,替換掉emacs自帶的搜索。當(dāng)按下C-s
時,就會自動調(diào)用ivy還搜索,更方便快捷地在文件中多處匹配之前跳轉(zhuǎn)。
在執(zhí)行M-x
時,也可以調(diào)用counsel,僅輸入命令的一部分關(guān)鍵詞,來快速篩選出命令,并自動補全。
3、auto-complete
auto-complete是一個自動補全框架,支持多種語言的語法關(guān)鍵字,其中就包括verilog
。
auto-complete也會自動收集RTL或者Testbench中的變量,當(dāng)再次輸入變量時,只需要敲前兩個字母就會彈出候選菜單,通過快捷鍵或者方向箭頭來選取。極大的提高了寫verilog的速度。
(add-to-list 'load-path "~/.emacs.d/auto-complete")
(add-to-list 'load-path "~/.emacs.d/popup-el")
(add-to-list 'load-path "~/.emacs.d/fuzzy-el")
(require 'auto-complete-config)
(ac-config-default)
當(dāng)然也可以再結(jié)合ctags、etag
等工具來生成verilog的調(diào)用關(guān)系,方便在模塊和實例化、函數(shù)調(diào)用和聲明之前跳轉(zhuǎn)。
具體方法可以參考Synopsys用戶大會上華為的一篇文章《Using Verdi to Generate vi and emacs Tagging Databases》。