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