zoukankan      html  css  js  c++  java
  • 使用 Python 编写 vim 插件

    http://lib.open-open.com/view/open1330228856906.htmlhttp://vimdoc.sourceforge.net/htmldoc/if_pyth.html#python-vimvim 中输入 命令 python import vim在vim 的python 解释器中 引入 vim 当前的运行状态vim 模块两个 函数command 执行vim命令  eval 获得一个vim 的 状态值 例如 参数 值 a:0 buffers current 当前操作对象 属性 window buffer等window 当前窗口 vim map 设置 快捷键例如:map a=strftime("%c")将F2 映射成 在当前位置的后面插入 当前时间 的命令

    在本地的 ~/.vimrc 文件可以配置 插件函数快捷键

    例子:

    vim 补全 单词的插件

    在当前工程目录下面 有多个文件夹, 每个文件夹 有 多个 xxx.as 文件, 需要 在插入模式下 按下 ctrl + a 不全 当前光标所在位置的单词;

    函数简单的返回第一个匹配的单词。

    函数如下: 在ubuntu 12.04 系统, ~/.vim/plugin/文件夹中 新建 xxx.vim 放置下面的代码

    function! CompleteAsWord() 

    if !exists("g:findMatches")

        let g:findMatch = []

    endif

    python << EOF

    import vim

    import os

    import re

    word = re.compile('\w+')

    cw = vim.current.window

    p = cw.cursor

    #find CurWord row col lastCol

    def tranverse(cur, newPat):

        f = os.listdir(cur)

        ret = []

        for i in f:

            n = os.path.join(cur, i)

            if os.path.isdir(n):

                ret += tranverse(n, newPat)

            elif n.find('.as') != -1 and n.find('swp') == -1:

                li = open(n).readlines()

                for l in li:

                    ws = newPat.findall(l)

                    if len(ws) > 0:

                        return ws

        return ret

    lastWord = word.findall(vim.current.buffer[p[0]-1])

    if len(lastWord) > 0:

        lastWord = lastWord[-1]

        newPat = re.compile("%s\w+"%(lastWord))

        mat = tranverse('.', newPat)

        cw = vim.current.window

        p = cw.cursor

        if len(mat) > 0:

            curLine = vim.current.buffer[p[0]-1]

            vim.current.buffer[p[0]-1] = curLine[:p[1]-len(lastWord)+1]+mat[0]+curLine[p[1]+1:] 

            cw.cursor = (p[0], len(vim.current.buffer[p[0]-1]))

            vim.command('let g:findMatch = ["%s", "%s"]'%(lastWord, mat[0]))

    EOF

    endfunction

    #搞定了 函数之后 需要 在插入模式 map一下功能键
  • 相关阅读:
    [HAOI2018]苹果树
    [TJOI2013]拯救小矮人
    [SDOI2016]硬币游戏
    一辈子都学不会的有上下界的网络流
    [AHOI2014/JSOI2014]支线剧情
    [JSOI2009]球队收益
    hdu-1856 More is better---带权并查集
    hdu-1325 Is It A Tree?---并查集
    hdu-1272 小希的迷宫---并查集或者DFS
    hdu1213-How Many Tables---基础并查集
  • 原文地址:https://www.cnblogs.com/liyonghelpme/p/4273776.html
Copyright © 2011-2022 走看看