亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

vim plugin 原理

系統 2407 0

vim 個性化設置與功能擴展均通過 script 來實現,這種 script 又叫 plugin。plugin 是 vim 的核心與精髓。

最常用的配置文件 vimrc,也是一種 plugin。換句話說,所有的 plugin 都在配置 vim 的行為。

plugin 類型及其相互關系

常見的 plugin 類型:

  • vimrc
  • global
  • filetype
  • syntax
  • compiler

vimrc 是核心 plugin (類似 main 函數),所有的配置都可以在這一個文件中完成。 所有其他配置都直接或間接由該文件調用以生效。

與其他編程語言一樣,為了提高源文件的可讀性,增加代碼的可重用性等, 衍生出了 global/filetype/syntax/compile 等 4 中主要的 plugin。

通過 runtime , source 等命令加載其他 plugin。

vim 搜索路徑

vim 通過路徑區分 plugin 類型。 由 runtimepath 控制搜索順序,一旦找到立即停止。

默認搜索順序:

  1. $HOME/.vim : linux home 目錄下的用戶個性化設置
  2. `$VIMRUNTIME: 系統自帶的 plugin

建議將個性化配置全部放在 $HOME/.vim 中, 與 vim 自帶的配置文件隔離,方便備份。 vim 中執行 :echo $variable 查看變量取值.

查看默認 plugin 搜索路徑:

      :set runtimepath?
      
        

runtimepath
      
      =~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/
      
        

vim73,
      
      /usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after
    

plugin 安裝

拷貝到對應的 plugin 目錄下即可。

更新幫助文檔,在 vim 中運行 :helptags ~/vimfiles/doc

global plugin

global plugin 位于 plugin 目錄下,對全局生效,所以默認自動加載。

filetype plugin

filetype plugin 只對特定類型的文件生效。

根據文件類型動態決定行為,通過事件監聽(autocmd)實現。 基本原理如下:

        
          "
        
        
           required
        
        
          filetype plugin on


        
        
          "
        
        
           define behavior when filetype change to `tt`
        
        
          

"
        
        
           here, the behavior is set to execute echo 
        
        
          "
        
        hello
        
          "
        
        

autocmd FileType tt 
        
          echo
        
        
          "
        
        
          hello
        
        
          "
        
        
          "
        
        
           execute cmd below, output 
        
        
          "
        
        hello
        
          "
        
        
           at the bottom of vim window
        
        

:set filetype=tt
      

如果沒有用 autocmd 顯式聲明 xxx 文件對應的行為, 則加載 ftplugin 目錄下的 xxx.vim

      :set filetype=
      
        c


      
      
        "
      
      
        expt: load c.vim and change highlight in c syntax
      
      
        

"
      
      
        required: c.vim in ftplugin, it is in $VIMRUNTIME/ftplugin by default
      
    

注意:使用 ftplugin 時,需要開啟 filetype filetype plugin

      
        :filetype plugin on  " 開啟 filetype 和 filetype plugin

:filetype  " 查看狀態,輸出如下

filetype detection:ON  plugin:ON  indent:ON
      
    

一個更深入 filetype plugin 的例子

      autocmd BufNewFile,BufRead *.xml source ~/.vim/ftplugin/xml.vim
    

同樣是事件監聽機制,區別在于:

  • 監聽的事件: 創建或打開 .xml文件(BufNewFile,BufRead)
  • 執行的行為: 加載 ftplugin/xml.vim

syntax plugin

原理與 ftplugin 類似,監聽 syntax 事件,加載 syntax 目錄下的插件。 觸發 filetype 事件的同時,也會觸發對應的 syntax 事件。

      
        syntax on

:set syntax
      
      =c
    

compile plugin

同樣是事件監聽,插件位于 compiler 目錄。

        
          "
        
        
           add below to vimrc
        
        

autocmd BufNewFile,BufRead *
        
          .py compiler python`


        
        
          "
        
        
           open a file ending with .py and run
        
        

:
        
          make
        
        
          "
        
        
           expt: errors printed
          

更多的一些細節

與 vi 的兼容性。

vim 在 vi 的基礎上進行了很多的功能擴展。 若要使用 vim 的特性,vim 必須運行于與 vi 不兼容的模式。

一般,把 set noncompaible 放在配置文件開始處即可。
ubuntu 12.04 默認的 vimrc 先加載 ubuntu.vim, 其中設置了該選項。

vim feature-list

vim 自身有很多 feature, plugin 都依賴于相應的 feature.

為了使 vimrc 通用,使用 plugin 前先用 has() 檢測feature 是否存在。 如下:

      
        if
      
       has(
      
        "
      
      
        syntax
      
      
        "
      
      
        )

  syntax on

endif
      
    

:version 查看 feature-list

      
        :version

VIM 
      
      - Vi IMproved 
      
        7.3
      
       (
      
        2010
      
       Aug 
      
        15
      
      , compiled May  
      
        4
      
      
        2012
      
      
        04
      
      :
      
        25
      
      :
      
        35
      
      
        )

包含補丁: 
      
      
        1
      
      -
      
        429
      
      
        

修改者 pkg
      
      -vim-
      
        maintainers@lists.alioth.debian.org

編譯者 buildd@

巨型版本 無圖形界面。  可使用(
      
      +)與不可使用(-
      
        )的功能:


      
      +arabic +autocmd -balloon_eval -browse ++builtin_terms +byte_offset +cindent -clientserver -clipboard +cmdline_compl +
      
        cmdline_hist


      
      +cmdline_info +comments +conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con +
      
        diff
      
       +digraphs -dnd -ebcdic +emacs_tags +eval +
      
        ex_extra

 
      
      +extra_search +farsi +file_in_path +find_in_path +
      
        float
      
       +folding -footer +fork() +gettext -hangul_input +iconv +insert_expand +
      
        jumplist

 
      
      +keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap -lua +menu +mksession +modify_fname +mouse -mouseshape +
      
        mouse_dec

 
      
      +mouse_gpm -mouse_jsbterm +mouse_netterm -mouse_sysmouse +mouse_xterm +mouse_urxvt +multi_byte +multi_lang -mzscheme +
      
        netbeans_intg

 
      
      +path_extra -
      
        perl
      
       +persistent_undo +postscript +printer +profile +python -python3 +quickfix +reltime +rightleft -ruby +scrollbind +
      
        signs

 
      
      +smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white -tcl +terminfo +
      
        termresponse

 
      
      +textobjects +title -toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo +vreplace +wildignore +wildmenu +
      
        windows

 
      
      +writebackup -X11 -xfontset -xim -xsmp -xterm_clipboard -
      
        xterm_save

  系統 vimrc 文件: 
      
      
        "
      
      
        VIM/vimrc
      
      
        "
      
      
        

  用戶 vimrc 文件: 
      
      
        "
      
      
        HOME/.vimrc
      
      
        "
      
      
        

    用戶 exrc 文件: 
      
      
        "
      
      
        HOME/.exrc
      
      
        "
      
      
        

       VIM 預設值: 
      
      
        "
      
      
        /usr/share/vim
      
      
        "
      
      
        

編譯方式: 
      
      
        gcc
      
       -c -I. -Iproto -DHAVE_CONFIG_H -g -O2 -fstack-protector --param=ssp-buffer-size=
      
        4
      
       -Wformat -Wformat-security -Werror=format-
      
        s

ecurity 
      
      -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=
      
        1
      
      
        

鏈接方式: 
      
      
        gcc
      
         -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,--as-needed -o vim  -lm -ltinfo -lnsl  -lselinux  -lacl -lattr -lgpm -ldl     -
      
        L


      
      /usr/lib/python2.
      
        7
      
      /config -lpython2.
      
        7
      
       -lpthread -ldl -lutil -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-
      
        functions

請按 ENTER 或其它命令繼續
      
    

vim plugin 原理


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 老子影院午夜久久亚洲 | 久久8| 四虎影视网站 | 日日摸夜夜欧美一区二区 | 狠狠干天天爽 | 一级特黄aaa大片免费看 | 国产高清看片日韩欧美久久 | 成人午夜视频网站 | 国产成社区在线视频观看 | 擼擼色在线看观看免费 | aaa一级特黄 | 日韩天堂 | 国产精品伦理一二三区伦理 | 国产亚洲欧洲国产综合一区 | 图片专区亚洲欧美另类 | 欧美高清一区 | 麻豆伦理 | 人人干人人模 | 久久亚洲精品国产精品婷婷 | 69成人影院 | 精品免费久久久久久久 | 狠狠久久综合 | 最新亚洲国产有精品 | 天天操天天射天天插 | 免费在线一级片 | 香蕉网伊在线中文慕大全 | 天天做天天看夜夜爽毛片 | 在线播放精品视频 | 五月天激情亚洲婷婷在线 | 亚洲综合色自拍一区 | 天天做天天爱天天操 | 91视频最新网址 | 日本天天操 | 欧美精品一区二区三区视频 | 性生生活网站免费 | 偷偷鲁影院手机在线观看 | 久草新免费 | 国产不卡在线 | 不卡一级aaa全黄毛片 | 九色视频极品论坛区 | 男人在线网站 |