成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

自己寫VIM語法高亮插件

寵來也 / 3432人閱讀

摘要:語法高亮插件語法高亮插件需要兩個文件。語法檢測當(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

相關(guān)文章

  • Vim插件簡單介紹

    摘要:轉(zhuǎn)換時支持模板文件,配合強(qiáng)大的模板文件,可以自己創(chuàng)建,或者是實現(xiàn)語法高亮,還支持?jǐn)?shù)學(xué)公式編輯。標(biāo)簽文件允許這些項目能夠被一個文本編輯器或其它工具簡捷迅速的定位。 原文地址 Vim作為一個強(qiáng)大的編輯器,再配合強(qiáng)大的插件,就可以稱得上為編輯神器了。 pathogen pathogen為管理插件的插件,類似的還有vundle。在 Pathogen 之前,安裝插件就是把插件文件放在.vim目錄...

    dackel 評論0 收藏0
  • Vim與Markdown共舞

    摘要:語法高亮是一個比較好的解決方案。本來也支持的語法高亮,但是做得還不夠。通過語法高亮,基本就很容易抓住文章的內(nèi)容和結(jié)構(gòu)了。結(jié)語折騰下來,下編輯筆記完全是沒有任何問題的,特別是語法高亮和特性,可以盡可能地減小與生俱來的割裂感。 Vim作為編輯器之神,用于Markdown的編輯和閱讀,會擦出什么樣的火花呢? 因為受不了某知筆記的編輯體驗,前段時間探索了在Vim中編輯和管理Markdown筆記...

    RancherLabs 評論0 收藏0
  • 一個前端開發(fā)工程師的Vim跟IDE一樣

    摘要:一組就是一個插件,的很多功能都由各式插件實現(xiàn)。與相反到行頭到本行的第一個非字符到行尾到本行最后一個不是字符的位置。到逗號前的第一個字符。在當(dāng)前行查找第三個出現(xiàn)的。工程文件菜單自定義快捷鍵顯示文件菜單自帶快捷鍵顯示隱藏隱藏文件在新 這里是我新配置出來的 jaywcjlove/vim-web 一直在打磨中,基本上可以用了。拿出來騙 star 先上圖 showImg(https://segm...

    Vultr 評論0 收藏0
  • 折騰Vim 編輯器

    摘要:目的不是比較什么編輯器更好,也不是宣傳多么神奇,只是想給需要的人提供一些幫助。編輯的時候不用頻繁的敲和了。所以,針對不容的環(huán)境,不同的項目,應(yīng)選擇最合適的編輯器,就像不同的項目要用不同的開發(fā)語言一樣。 Abstract 本文主要介紹如何從0開始,構(gòu)造適合自己的vim。目的不是比較什么編輯器更好,也不是宣傳vim多么神奇,只是想給需要的人提供一些幫助。文章以ubuntu14.04,Vim...

    李世贊 評論0 收藏0
  • 如何優(yōu)雅的使用 Vim(二):插件介紹

    摘要:如何優(yōu)雅的使用二插件介紹插件使用管理。文件管理器樹形結(jié)構(gòu)的文件管理器,目前使用。不同層次的括號顏色不一樣,如下圖另見然而這些彩虹括號插件,都免不了與沖突會使語法高亮失效,只好放棄了。 如何優(yōu)雅的使用 Vim(二):插件介紹 插件使用 vim-plug 管理。很長一段時間,我都在用 Vundle,切換到 vim-plug 并非完全必要。 插件定義開始 call plug#begin(~...

    yeooo 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<