国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

自己寫VIM語法高亮插件

寵來也 / 3423人閱讀

摘要:語法高亮插件語法高亮插件需要兩個文件。語法檢測當讀取或創建時,將后綴的文件類型設置為,之后使用類型的語法高亮方案進行著色。語法高亮這是文本的重點,該文件告訴該怎么著色。

實習之后發現,一切代碼活動都局限在一個終端界面了。由于一些安全原因和開發環境的方便,開發都是通過遠程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插件簡單介紹

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

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

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

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

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

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

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

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

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

    yeooo 評論0 收藏0

發表評論

0條評論

寵來也

|高級講師

TA的文章

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