乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      VIM進階索引::高亮

       Rainboy913 2013-12-06

      Vim進階索引[5]::高亮
      與以前的教程相比,這一篇做了一些小改變:使用了縮寫而不是每次都給出完整的命令。提示使用文檔時不同給出完整的命令而是給出“關鍵字”——你可以用“:h 關鍵字”的方式找到Vim文檔中的相應內容。

      hq00e
      在語法高亮相信大家在使用Vim的文檔時就已經見過了,Vim提供了一個測試用的腳本。輸入下面的命令:
         :e $VIMRUNTIME/syntax/colortest.vim
         :so %
      這個腳本除了讓你知道Vim是可以顯示許多顏色的外,它還是一個實時定義顏色的腳本實例。在本文的末尾我們會用同樣的技巧生成一個Web色表。
      Vim中與色彩有關的設定大致可以分為兩部分:

      • Vim編輯環(huán)境配色。如Vim編輯區(qū)的前景背景顏色(文本的默認顏色)、狀態(tài)欄顏色、錯誤提示顏色、光標、圈選區(qū)(可視區(qū))、行號、折疊的顏色等。這些都屬于編輯器的環(huán)境設定。
      • 文件使用的所使用的色彩。即所謂的語法高亮/語法著色,如Vim文檔中索引標簽使用粉紅色,示例使用藍色、鏈接使用青色。或是當你打開C語言文件時,注釋藍色、數據類型青色、字串粉紅、關鍵字赭色。都是Vim根據文件類型啟用相應的語法文件,對該應用顏色的部分進行識別并著色。

      本文將通過對這些色彩進行設置的實例,讓用戶逐步了解與色彩相關的命令。
      1 環(huán)境配色
      Vim的環(huán)境配色決定了用戶編輯環(huán)境的基本風格。語法高亮可以關閉但環(huán)境配色是始終存在的,下面我們將逐步地改造并定義屬于自已的配色風格。
      1.1 使用預置的配色風格
      要改變Vim的編輯環(huán)境的配色很容易因為Vim提供了多種預置的配色風格(顏色主題)。比如要使用'evening'風格:在菜單中選擇“編輯-調色板-evening”?;蛘咴诿钚兄惺褂?colorscheme命令
      1

      :colors evening
      可以看到編輯環(huán)境包括編輯區(qū)的前景背景的顏色都發(fā)生了變化。命令行下Vim默認是黑底白字,圖形下的Vim是白底黑字,在應用了上面的命令后都成了深灰的背景,銀灰的前景。
      提示:在菜單中選擇“default”或使用命令:colors default,換回默認的配色。關鍵字::colorscheme
      1.2 修改環(huán)境配色
      如果你不滿足于使用現成的顏色主題的話,那我們來看一下如何修改環(huán)境配色。首先要掌握的命令是:highlight。
      " 使用默認的高亮(移除用戶定義的高亮,即根據'ft'重新載入語法文件)
      :hi clear
             
      " guifg表示圖型介面(gui)下的前景色(ForeGround)
      " guibg表示圖型介面(gui)下的背景色(BackGround)
      :hi {組} guifg={值} guibg={值}
             
      " 進行顏色關聯(lián)。
      " 這條命令使{組1}使用與{組2}一樣的顏色設置
      :hi link {組1} {組2}
      例如,要將“組”為“c_name”的組在圖形介面下的顏色設置為背景黑色,前景灰色可用如下命令:
      :hi c_name guifg=gray guibg=black
      讓組“c_blah”使用與“c_name”一樣的顏色設置:
      :hi link c_blah c_name
      注意:目前我們只涉及圖形介面下Vim(gVim)的色彩控制。所以本文接下來的例子,在我們講到命令行下的顏色設置之前,所有例子都是在gVim環(huán)境中完成的。
      忘了解釋一下“組”(高亮組)是什么?有什么用?Vim中“組”被用來表示一組顏色設置(前景、背景、字體、風格)。當某個介面元素(或是編輯區(qū)中的文本)應用了特定的“組”后,它就根據“組”表示的顏色設置來顯示。應用了同樣“組”的介面元素或文本會有一樣的顏色顯示。有:hi為“組”分配顏色時,如果組已存在則覆蓋原有的設置,否則定義新組。
      現在我們知道通過賦于guifg和guibg顏色值為組分配顏色。哪到底可以使用哪些顏色呢?圖形介面下的顏色有“名稱”或“數值”兩種表示方式。名稱如上面所用的gray、black還有大家熟悉的red、white、yellow,更多可以使用的顏色名稱見文檔:gui-colors。顏色還可以用“數值”來表示,方法是用三個分別表示“紅、黃、藍”的十六進制數值表示。如red還可以表示為#ff0000。記得數值前要加上#號。沒錯,這與html文件中顏色的表示方法是一樣的。用這種方法我們可以表示更多的顏色:
      " 將前景改為淡紫色
      :hi c_name guifg=#E6E6FA
      提示:此外guifg/guibg還支持三個特殊的值:none、fg、bg,分別表示無顏色、編輯區(qū)一般文本的前景色、一般文本的背景色。
      要改變Vim的配色我們需要知道都有哪些組可以改。下面表中是Vim環(huán)境配色中介面元素所應用的“組”(組名在前):
      Cursor
      光標
      ErrorMsg
      命令行中的錯誤提示
      Folded
      折疊行
      LineNr
      行號
      NonText
      非文本區(qū)(控制字符和一些特殊字符和編輯器空白區(qū)等)
      Normal
      編輯區(qū)一般文本的前景和背景色
      Search
      搜索
      StatusLine
      狀態(tài)行
      Visual
      圈選區(qū)
      提示:完整的列表見highlight-groups。非Windows用戶還可以設置菜單、滾動條和提示框的顏色。見hl-menu。
      現在做個實驗,打開一個文檔并依次輸入下面的命令,觀察變化:
      :se ft= "關閉高亮
      " 分別改變編輯區(qū)的前景色(guifg)和背景色(guibg)為灰色和紅色
      :hi Normal guifg=gray guibg=red
      " 修改背景色為暗灰色,上面設置的前景色將被保留
      :hi Normal guibg=#333333
             
      "顯示狀態(tài)行
      :se laststatus=2
      " 設置狀態(tài)行的顏色。
      " 如果沒“gui=none”會發(fā)現狀態(tài)行的前/背景色顛倒了。
      " 關于gui我們稍后再說
      :hi Statusline guifg=green guibg=gray gui=None
      " 狀態(tài)欄的默認顏色
      :hi statusline gui=bold,inverse guifg=fg guibg=bg
      " 使錯誤提示使用與狀態(tài)欄一樣的顏色設置(默認是紅色)
      " 用hi link對已定義顏色的組重新定義顏色要加“!”
      :hi! link ErrorMsg statusline
      " 下面的命令會出錯,錯誤提示成了綠色的
      :hi link
      " 清除顏色。
      :hi! link ErrorMsg none
      " 無顏色的錯誤提示
      :echoerr "abc"
      " 恢復默認的顏色
      :hi clear
      注:“:hi link {組} NONE”是:hi link的一種用法,用來清除組的顏色關聯(lián)。
      2 語法高亮
      前面我們講了如何更改Vim環(huán)境配色,如光標,狀態(tài)行,錯誤提示的顏色。并沒有涉及到如何根據編輯的文件來顯示不同顏色,即語法高亮。與更改配色相比設置語法高亮要更復雜一些:配色中更改的組是確定的,因為編輯器中的介面元素是固定的,而語法高亮中所打開文件中那些需要高亮那些不需要,以及對不同類型的文件應用不同的語法高亮都要視具體的文件而定。很多時候我們還需要“創(chuàng)造”(自定義)出一些組來。但與配色一樣在語法高亮中顏色的顯示依然是由:hi命令控制。
      2.1 修改當前的高亮設置
      這一節(jié)我們將對當前文本中的語法高亮進行修改,你會發(fā)現這與修改環(huán)境配色相似——所不同的只是“組”名。這是一組實驗:
      :h syntax.txt "打開Vim文檔
      :hi helpHyperTextJump guifg=darkblue "改變文檔中鏈接的顏色
      :hi clear
      "清除自定義顏色——包括上面的顏色
      :hi! link helpHyperTextJump Identifier "恢復顏色
      所以要定義顏色只要對相應的組名的顏色進行設置就行了。那你要問了,這個helpHyperTextJump是從哪來的我怎么會知道哪個的組名是哪個?如果我要定義自已的組名呢?
      要查看當前的語法文件中定義了哪些組名可以用不帶參數的:hi查看。此外,還可以用:
      " 查看當前的文件類型(假設是texinfo文件)。
      :se ft
      texinfo
      " 知道是texinfo文件后,使用以下命令打開相應的語法文件
      " 在語法文件中,:syn命令后跟的就是組名。
      :e $vimruntime/syntax/texinfo.vim
      那用戶該怎么定義自已的組呢?繼續(xù)往下看吧……
      2.2 定義新的高亮
      在定義新的高亮組時我們要先回答這個問題:為什么要定義新的組呢?有很多可能的原因:其中之一是我們想在不修改原來的高亮的情況下增加一種色彩,為些我們需要定義新的高亮組,并分配適當的顏色。
      現在我們要定義自已的組了,首先要為我們自定義的組取個名字,組的命名與變量一樣只能由字符下劃線和數字組成(雖然我們前面的例子中使用了不同的大小寫,但組名是不區(qū)分大小寫的)。下面的命令中我們定義了一個組名為“mygroup”的組
      2
      。
      :hi mygroup guifg=#ff9999
      這條命令告訴Vim將mygroup組的字串顏色定義為淡紅色(lightred)。但Vim現在還不知道哪些字串屬于mygroup,所以我們得告訴Vim——方法是使用:match命令:
      :match mygroup /xxx/
      這條命令告訴Vim凡匹配式樣的xxx的字串都屬于mygroup。這樣當前文件中所有匹配“xxx”的字串都會變成淡紅色。定義自己的顏色是不是很容易呢?先用:hi命令定義組及其使用的顏色。再用:match告訴Vim編輯區(qū)文本中哪些部分是屬于自定義組的。最后,Vim會根據:match設置的規(guī)則將當前編輯區(qū)文本分為許多不同的組(如果有定義多個組的話),并對不同的組應用:hi為其分配的顏色
      下面我們要用一個更實際的例子來加深對語法高亮的印象。
      看一下這個簡單的表格:
      王小明        數學        46
      李阿月        數學        72
      林小麗        數學        91
      這是某個班主任手中的成績單。他/她的班級有25個學生,這是其中的三條數據。這個班級經常有考試,這個老師希望考試的結果更直接明了一點:不及格(少于60分)的成績顯示為紅色,90分以上的成績有顯示為青色,這樣他/她就可以很快知道哪些學生該補課
      3
      ,而哪些學生該表揚。當科目為數學時將科目顯示為藍色,這個班主任教數學的!學生名字顯示為粉紅色——看來這個班主任是女的。最后全班最高分的顏色反白顯示。
      我們先取幾個不同的組名
      4
      :“u_student、u_subject、u_mark_fail、u_mark_a”分別表示“學生、科目、不及格、優(yōu)秀”等。將這個表格另存為文本文件并用gVim打開,使用下面的命令:
      :hi u_student guifg=#ff9999 guibg=white
      :hi u_subject guifg=lightblue guibg=white
      :hi u_mark_fail guifg=red guibg=white
      :hi u_mark_a guifg=darkcyan guibg=white
      " 上面的命令定義了不同的組及其對應的顏色
      " 現在我們要用match告訴Vim怎么分辨不同的組,
      " 我們要用到一些的正則表達式
             
      "行頭開始至第一個空白字符
      :syn match u_student /^\S*/
      :syn match u_subject /數學/
      :syn match u_mark_fail /\s[1-5]\=.$/
      :syn match u_mark_a /\s100\|\s9.$/
      你可能發(fā)現了每條match命令前面都多了:syn。這是因為使用match命令時前一個match定義的組的顏色會丟失。用match命令你沒辦法同時顯示多種顏色。在上面的match命令前加上syn就行了,就可以顯示所有自定義的顏色了。
      提示:其實:syntax match與:match是不同的命令,不過“目前為止”它們的語法是一樣的,我們在下一篇會講到:syntax命令。
      現在我們?yōu)槌煽儐渭由项伾?,但下一次呢?我們可不希望每次打開都手動設置,我們可以將之放進單獨文件中。將上面的命令復制到單獨的文件中,然后用:so命令運行就可以了。
      2.3 寫語法文件
      我們在前面寫的腳本,保存起來就成了一語法文件。我們使用:so命令就可以運行了,不過你也許還希望它像其他語法文件一樣能自動加載。要做到這一點也很簡單。
      在我們繼續(xù)之前我簡單描述一下語法文件加載的機制。Vim讀入/新建文件時根據后綴名判斷文件類型(或者根據模式行中設置的'filetype'設置項判斷文件類型),然后在$VIMRUNTIME/syntax/和$VIM/vimfiles/syntax/中查找以文件類型為文件名,.vim為后綴的文件。找到的話加載該文件。
      所以語法文件我們已經有了,我們只需要再選擇合適的文件類型名。假設我們使用的文件類型名是'u_mark',將上面的腳本命名為u_mark.vim放到這個目錄中:$VIM/vimfiles/syntax/。然后要讓Vim打開成績單時知道自動應用語法文件。在學習autocmd和filetype的內容之前,在這里我們可以簡單地使用模式行,來達到這個目的。在成績單文件的末尾加入模式行:
         vim:ft=u_mark
      現在打開成績單文件時Vim就會自動加載語法文件。如果打開成績單時還是沒出現語法高亮請確定已經開啟了語法高亮。使用:syn on開啟高亮,必要的話將之放到.vimrc中。
      3 :highlight命令詳解
      現在是對:hi進一步挖掘的時候了。
      3.1 命令行下的顏色設置
      在前面的內容中,我們講:hi命令時一直都是以圖形介面(gui)為例設置前景和背景色。由于命令終端對顏色顯示的限制,Vim在命令行下可以使用的顏色相對gui要少得多,所以使用:hi命令時圖形介面和命令行介面的顏色是分開設置的。對于黑白終端來說就無所謂顏色了,而彩色終端用cterm來表示,前景色就是“ctermfg”,而背景色是“ctermbg”。下面是一個表格:
      終端類型    前景色      背景色      注釋
      term         -          -           黑白終端
      cterm       ctermfg     ctermgb     彩色終端
      gui         guifg       guibg       圖形介面
      在前面我們對編輯區(qū)文本的顏色進行了定義:
      :hi Normal guifg=gray guibg=red
      現在我們對其命令行下的顏色進行定義
      :hi Normal ctermfg=gray ctermbg=red
      我們可以簡單地寫成一行:
      :hi Normal guifg=gray guibg=red ctermfg=gray ctermbg=red
      有哪些顏色可以使用?見cterm-colors。
      3.2 顯示樣式
      :hi命令除控制顏色外還可以控制文字的顯示樣式。term、cterm和gui分別控制三種不同終端下的字體式樣。這些字體樣式包括了粗體、下劃線、斜體、反顯。使用多種樣式時將樣式用逗號隔開。詳細樣式見attr-list。
      " 設置錯誤提示在不同終端下的顯示樣式
      :hi ErrorMsg term=bold,reverse cterm=bold,reverse gui=reverse
             
      " 將某項的值設為NONE,可清除該項的樣式設定
      :hi ErrorMsg term=NONE
      需要注意的是gui下不支持粗體的樣式,但gui下多了一個字體的設置項font,用以指定字體::hi tung_poem font=……
      另外因為Normal組是做為Vim的基準設定,所以對Normal進行的字體樣式設定將被忽略。
      3.3 關于link
      在使用:hi link命令時有幾個細節(jié)要注意一下。文檔中都有(hi-link),這里簡單提一下。仍是以命令“:hi link {組1} {組2}”為例:

      • 如果在關聯(lián)之前{組1}組已經定義過了了,則要使用加!號的形式:hi! link否則提示錯誤。
      • 當{組1}關聯(lián)到{組2}后,{組1}組使用與{組2}一樣的顏色設置。如果此時再用:hi對{組1}定義顏色,則關聯(lián)被取消。{組1}回復到設置關聯(lián)前的顏色設置(如果有的話),再應用新定義的顏色。
      • default開關項。由于Vim有多個配置文件,又有語法文件定義顏色。所以一組顏色可能被多次定義,為了讓某一組顏色只在未定義時關聯(lián)到其他組。可以使用開關項default:
             :hi default link {組1} {組2}
        一般而言,后定義(關聯(lián))的顏色總是覆蓋先定義(關聯(lián))的顏色。在使用了這個開關項時,設置了default開關的總是被覆蓋。僅當其他地方未定義{組1}時,才使用該關聯(lián)。這主要是用在語法文件中,語法文件的加載要晚于配置文件。當在配置文件中定義顏色時,由于語法文件較晚加載自定義的顏色總是被覆蓋。如果在語法文件中使用了default,則配置文件中自定義的顏色就能被顯示出來。

      使用:hi link還能節(jié)省大量的時間,減少重復的勞動。完整的顏色定義通常較長,因為要兼顧各種終端的顯示能力。這是Vim中對Comment組的顏色定義:
        :hi Comment        term=bold cterm=NONE ctermfg=Cyan ctermbg=NONE gui=NONE guifg=#80a0ff guibg=NONE
      如果每定義一種顏色都要寫這么長就太折騰人了。避免這種情況的最好方法是利用好預定義的顏色。這些是Vim預定義的組、所表示的意義及其使用的顏色與樣式:
      Comment     注釋
      Constant    常量
      Identifier    變量名
      Statement    語句
      PreProc    預處理器
      Type    數據類型
      Special     特殊符號
      Underlined    突出顯示的文本
      Ignore    無設置
      Error    語法錯誤
      Todo    待做事項
      Vim的語法文件本身就大量地使用了:hi link命令,它們大部就是關聯(lián)到上面所列的組。在上面成績單的例子中我們定義了u_subject在gui下的顏色為藍色,但使用下面這條命令我們除了達到同樣的效果外,還定義在其他終端下的顏色:
      :hi! link u_subject Comment
      所以在定義新的顏色時,先在上面的列表中看一看有沒有你需要的顏色,如果有的話又可以節(jié)省很多時間了。
      4 綜合
      現在看一下與語法高亮相關的幾個例子。
      4.1 高亮tags
      見文檔:tag-highlight
      4.2 生成web色索引
      使用:hi命令和:syn match命令就可以讓Vim顯示出斑斕的色彩?,F在我們要更進一步結合上面的兩個命令與Vim腳本寫出一個217色的Web安全色表。
      " 生成Web色表
      " 用法:so web_color_gen.vim
      " 限制:只能在gui中使用
      " 注意:這個腳本在Vim6.3/6.4中有時會出現顏色渲染錯誤的情況。
      "       在Vim7中則沒發(fā)現類似情況。
             
      " 關閉搜索高亮
      se nohls
             
      " 定義數組
      " 在Vim7中定義數組就不會這么累了
      let c0="00"
      let c1="33"
      let c2="66"
      let c3="99"
      let c4="cc"
      let c5="ff"
             
      " 生成web色的數值表
      let L1=0
      while L1" . ':s/^/\=c{L1}.c{L2}.c{L3}." "/' . "\"
            let L3=L3+1
          endw
          let L2=L2+1
        endw
        let L1=L1+1
      endw
             
      g/./exec 'hi '.expand("").' guifg=grey guibg=#'.expand("") |
          \ exec 'syn match '.expand("").' /'.expand("").' /'
             
      新建空文檔,然后運行腳本就可以看到web色表了。
      這里有幾個地方我解釋一下。
      exec "norm o\" . ':s/^/\=c{L1}.c{L2}.c{L3}." "/' . "\"
      這條命令在文檔中新起一行,并用:s命令插入顏色值。關于:s命令的rhs中使用\=在“寄存器”篇中我們已經講過了(見:sub-replace-special)。當L1、L2、L3分別為1、2、3時,這條命令就成了:
      exec "norm o\" . ':s/^/\=c1.c2.c3." "/' . "\"
      其結果就是在當前行下插入了“336699 ”。在這三組循環(huán)運行完后文檔區(qū)將會有如下的web色數值表:
      000000
      000033
      ...
      ffffff
      還有就是expand()。這個函數的作用是將一些特殊的符號擴展為該符號所表示的字串。expand("")將返回當前光標所在位置的“詞”。常見的用法還有expand("%")、expand("")等。篇幅所限,關于這個函數的用法見*expand()*。
      g/./exec 'hi '.expand("").' guifg=grey guibg=#'.expand("") ……
      g/./表示對所有非空行執(zhí)行命令。假設當前行在“336699 ”,對這行執(zhí)行“exec 'hi…. .expand("")”命令時,expand("")將被擴展為“336699”,這樣命令就成了:
      hi 336699 guifg=grey guibg=336699
      同樣的后面的:syn命令就成了syn match 336699 /336699 /。在運行完這組命令后Vim就會刷新屏幕上的顏色了。
      提示:這段代碼只有在圖形介面下能發(fā)揮功用,在腳本開頭加入這段代碼以檢測運行環(huán)境:
      if !has("gui")
          finish
      endif
      另外,在腳本末尾添加下面代碼可以使用web色表更易讀一點:
      1d " 刪除空行
      " 格式化顏色表,每行六種顏色。
      g/./norm 6gJ
      這是運行結果(部分):
      660000 660033 660066 660099 6600cc 6600ff
      663300 663333 663366 663399 6633cc 6633ff
      666600 666633 666666 666699 6666cc 6666ff
      669900 669933 669966 669999 6699cc 6699ff
      66cc00 66cc33 66cc66 66cc99 66cccc 66ccff
      4.3 其他應用
      Vim定義的高亮還可以用以生成彩色的html文檔或打印彩色文檔。

      • 要生成html文檔,只要先開啟高亮然后簡單的輸入:TOhtml命令就可以生成使用與當前顏色設置一樣的html文檔了。TOhtml其實是一個插件,除了簡單的用法,它其實還支持許多高級的控制選項如編碼,CSS等。這是非常值得用戶花點時間了解的命令——關鍵字“:TOhtml”。
      • :hardcopy命令會根據當前的色彩設定打印文檔。此外在Linux/Unix中這個命令還可以用來生成PostScript文檔。關鍵字“:hardcopy”。

      5 小結
      至此對于給定的組我們已經能決定它顏色的顯示了。然而,依賴:syn match加正則表達式的方式定義組仍有局限——它不能針對組與組之間的關系作出調整,注釋的嵌套便是一例。這解決這些問題或者說要定義有更復雜規(guī)則的組我們需要對:syntax命令有進一步的了解。下一篇我們將深入高亮的另一重要命令:syntax并,定義更復雜的語法文件。
      Footnotes
      [
      1
      ] 其實Vim中的顏色文件,配色文件,語法文件,配置文件和插件本質上都是腳本文件都可以用ru或so運行。colors命令可以認為是預設了目錄的so命令。
      [
      2
      ] 這里用的命令格式與上面修改高亮時的命令格式是一樣的,它們的唯一區(qū)別在于使用的是否是新的組名。如前所述,Vim并不知道它是修改已有組的顏色設置,還是定義了新的組。要檢查特定的組是否已存在可以用:hi mygroup,如出現錯誤提示則說明在“當前應用的語法文件”中不存在組mygroup
      [
      3
      ] 在我讀書的會兒老師會要求我們把錯的題目抄800-1000遍
      [
      4
      ] 沒錯,你可以按自己的意愿選擇組名


      本文來自ChinaUnix博客,如果查看原文請點:http://blog./u/12467/showart_229636.html

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多