摘要:語法高亮插件語法高亮插件需要兩個文件。語法檢測當讀取或創建時,將后綴的文件類型設置為,之后使用類型的語法高亮方案進行著色。語法高亮這是文本的重點,該文件告訴該怎么著色。
實習之后發現,一切代碼活動都局限在一個終端界面了。由于一些安全原因和開發環境的方便,開發都是通過遠程ssh到開發機上開發,自然也就只有終端界面了。VNC因為安全原因不讓用,所以就別妄想使用Clion等IDE來開發了。在這樣的背景下,人們大多使用VIM或者EMACS等編輯器來開發。
在調試過程中,服務端日志是一個重要的參考依據。但是這類文本并不是某種編程語言,通常查閱的時候是沒有語法高亮的,而且為了對grep命令友好,通常會將一條日志打在一行里,這就使得日志信息非常密集,分辯關鍵信息的時候非常不方便。于是我便有了這樣一個想法,編寫VIM插件,對日志中的關鍵信息如時間戳、代碼行號、錯誤碼進行語法高亮。
為了敘述的方便,我們的目標是為下面這段日志進行高亮,將日志級別、時間戳、代碼行號標識出來。
[ERROR][2017-10-01 08:08:08][example.go:231]Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed diam eget risus varius blandit sit amet non magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. [DEBUG][2017-10-01 08:08:10][example.go:233]Lorem ipsum dolor sit amet [INFO][2017-10-01 08:09:09][example.go:2333]Lorem ipsum dolor sit amet語法高亮插件
語法高亮插件需要兩個.vim文件。一個是語法檢測文件(ftdetect),這是為了讓VIM能夠將指定語法應用于指定后綴的文件。一個是語法文件(syntax),這里定義了高亮的語法和著色方案。
插件的目錄結構如下:
/Users/zhuangqh/.vim ├── ftdetect │?? └── log.vim └── syntax └── log.vim
這些文件在類UNIX系統上要放到$HOME/.vim目錄下,Windows系統是$HOME/vimfiles/下。
語法檢測當buffer讀取或創建時,將.log后綴的文件類型設置為log,之后使用log類型的語法高亮方案進行著色。
" ftdetect/log.vim au BufNewFile,BufRead *.log set filetype=log語法高亮
這是文本的重點,該文件告訴VIM該怎么著色。
關鍵字高亮syn keyword ${group} ${keyword}
大多數編程語言都有關鍵字。規則設置的時候,先給他一個組名,后面再接著一些關鍵字,之后再根據這個組名設置顏色。關鍵字高亮的匹配優先級是最高的,如果有其它高亮規則匹配上了也會按關鍵字的規則來高亮。
這個規則對我們這次任務沒什么用,因為我們只想高亮日志開頭的那個特定的ERROR字樣,存在上下文,實際上并不是關鍵字。
匹配字高亮syn match ${name} ${pattern}
這個命令提供了一種強大的匹配方法,用正則表達式來匹配。我們可以用來匹配我們的時間戳,如:syn match logDate "d{4}-dd-dd"
高亮嵌套對某個匹配的字符串高亮之后,對子字符應用不同的規則。
比如上述日志中的代碼行號 example2.go:233,我們先整體匹配了這個模式,然后希望行號能有不一樣的顏色。這可以理解成匹配的上下文,規則只在指定上下文中有效。
syn match logFile "w*.go:d*" contains=logLineNum syn match logLineNum "d*" contained
contains告訴VIM這個token會包含其他哪些token。contained告訴VIM,只有在被其他token包含時,該規則才有效。
匹配偏移在高亮行號時,d*規則會將所有的數字高亮,而事實上,只有冒號右邊的數字才是行號,這就要用到匹配偏移的規則了。
syn match logLineNum ":d*"ms=s+1 contained
匹配偏移用來調整實際匹配的值。ms(me)表示的是實際匹配的起始(終止)下標,s(e)表示的是原匹配字符的起始(終止)下標。我們用:d*匹配后,將下標向右調整一位即可。
記得偏移命令要緊跟模式項,否則會報錯。
區域高亮syn region ${name} start=${pattern} end=${pattern} skip=${pattern}
區域匹配最常見的是匹配一個字符串,用引號包裹的字符串,可以通過skip來跳過轉義字符如"。
在我們的日志高亮任務里,想匹配的是包含特定token的中括號,我們只高亮中括號,其他的交由其他規則來匹配。
syn region logBlock matchgroup=logParen start=/[/ end=/]/ fold配色
hi ${name} ctermfg=${color}
為前面定義的語法token設定著色樣式,ctermfg是彩色終端的前景色,其他選項詳見:highlight
結果把所有規則集結起來如下:
if exists("b:current_syntax") finish endif syn match logLevelError "ERROR" contained syn match logLevelDebug "DEBUG" contained syn match logLevelInfo "INFO" contained syn match logFile "w*.go:d*" contains=logLineNum syn match logLineNum ":d*"ms=s+1 contained syn match logDate "d{4}-dd-dd" contained syn match logTime "dd:dd:dd" contained syn region logBlock matchgroup=logParen start=/[/ end=/]/ fold contains=logLevelError,logLevelDebug,logLevelInfo,logFile,logDate,logTime hi logLevelError ctermfg=red hi logLevelDebug ctermfg=yellow hi logLevelInfo ctermfg=green hi logFile ctermfg=yellow hi logLineNum ctermfg=blue hi logDate ctermfg=yellow hi logTime ctermfg=blue hi logBlock ctermfg=white hi logParen ctermfg=grey let b:current_syntax = "log"參考資料
Creating your own syntax files
Vim自定義語法高亮
:highlight
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25110.html
摘要:語法高亮是一個比較好的解決方案。本來也支持的語法高亮,但是做得還不夠。通過語法高亮,基本就很容易抓住文章的內容和結構了。結語折騰下來,下編輯筆記完全是沒有任何問題的,特別是語法高亮和特性,可以盡可能地減小與生俱來的割裂感。 Vim作為編輯器之神,用于Markdown的編輯和閱讀,會擦出什么樣的火花呢? 因為受不了某知筆記的編輯體驗,前段時間探索了在Vim中編輯和管理Markdown筆記...
摘要:一組就是一個插件,的很多功能都由各式插件實現。與相反到行頭到本行的第一個非字符到行尾到本行最后一個不是字符的位置。到逗號前的第一個字符。在當前行查找第三個出現的。工程文件菜單自定義快捷鍵顯示文件菜單自帶快捷鍵顯示隱藏隱藏文件在新 這里是我新配置出來的 jaywcjlove/vim-web 一直在打磨中,基本上可以用了。拿出來騙 star 先上圖 showImg(https://segm...
摘要:如何優雅的使用二插件介紹插件使用管理。文件管理器樹形結構的文件管理器,目前使用。不同層次的括號顏色不一樣,如下圖另見然而這些彩虹括號插件,都免不了與沖突會使語法高亮失效,只好放棄了。 如何優雅的使用 Vim(二):插件介紹 插件使用 vim-plug 管理。很長一段時間,我都在用 Vundle,切換到 vim-plug 并非完全必要。 插件定義開始 call plug#begin(~...
閱讀 3208·2021-09-30 09:48
閱讀 3485·2021-09-22 16:00
閱讀 1062·2019-08-30 13:08
閱讀 3098·2019-08-30 10:53
閱讀 2410·2019-08-29 18:33
閱讀 1583·2019-08-29 12:47
閱讀 896·2019-08-29 12:16
閱讀 1929·2019-08-26 12:02