学习写插件



  • 插件是什么

    vim的plugin可以理解为函数的集合。把一个简单的函数丢到后缀为vim的文件里,就可以称之为一个插件。
    比如说我们把下面这段代码copy到search_root.vim文件里

    if !exists('g:root_marker')
      let g:root_marker = [".git"]
    endif
    function! Search_root()
        let l:root = fnamemodify(".", ":p:h")
    
        if !empty(g:root_marker)
            let root_found = 0
            let l:cur_dir = fnamemodify(l:root, ":p:h")
            let l:prev_dir = ""
            while l:cur_dir != l:prev_dir
                for tags_dir in g:root_marker
                    let l:tag_path = l:cur_dir . "/" . tags_dir
                    if filereadable(l:tag_path) || isdirectory(l:tag_path)
                        let root_found = 1 | break
                    endif
                endfor
    
                if root_found
                    let l:root = l:cur_dir | break
                endif
    
                let l:prev_dir = l:cur_dir
                let l:cur_dir = fnamemodify(l:cur_dir, ":p:h:h")
            endwhile
    
            return root_found ? l:root : fnamemodify(".", ":p:h")
        endif
    
        return l:root
    endfunction
    

    这就是一个简单的插件了。插件的功能是返回当前编辑文件.git目录所在的路径。

    插件目录结构

    0_1521694289680_33662c13-35b2-4667-b24c-349f352bcdd6-图片.png
    借用下vim的目录

    • colors 目录:存放colorscheme
    • compiler目录: 不会呀
    • doc目录:存放帮助文件
    • ftdetect目录: 检测文件类型
      比如说你给xyz语言写了个语法高亮文件,就需要在这里写
    if has("autocmd")
        autocmd BufNewFile,BufRead *.xyz setf xyz
    endif
    
    • ftplugin目录:不会用
    • indent目录:某种语言的缩进文件
    • keymap目录:看名字就知道是放按键映射的,但我们一般直接丢到vimrc里了
    • plugin目录:插件的主要文件就是放在这个目录里的
    • syntax目录:某种语言的语法高亮文件

    以上并不严格,和xyz语言的编码规范一样,你不遵守,他也没有办法

    vim script基础

    熟悉大部分基本操作,寄存器,map,autocmd等

    :h usr_41.txt
    :h eval.txt
    

登录后回复