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