首页  >  问答  >  正文

vim - 怎样管理 ultisnips 脚本 ?

文件 php.snippets 里的 snippet...endsnippet 块越来越多;
越来越不方便管理,尤其是有些代码块很大时;
观察了下 honza/vim-snippets, 发现也是一个语言一个文件;

是否有方法或偏方治理下?

淡淡烟草味淡淡烟草味2712 天前752

全部回复(2)我来回复

  • 巴扎黑

    巴扎黑2017-05-16 16:39:13

    看文档
    看文档
    看文档
    https://github.com/SirVer/ultisnips/blob...

    Using a strategy similar to how Vim detects |ftplugins|, UltiSnips
    iterates over the snippet definition directories looking for files
    with names of the following patterns: ft.snippets, ft_*.snippets, or
    ft/, where "ft" is the 'filetype' of the current document and "" is
    a shell-like wildcard matching any string including the empty string.
    The following table shows some typical snippet filenames and their
    associated filetype.

    snippet filename         filetype ~
    ruby.snippets            ruby
    perl.snippets            perl
    c.snippets               c
    c_my.snippets            c
    c/a                      c
    c/b.snippets             c
    all.snippets             *all
    all/a.snippets           *all

    比如你有一堆ruby的snippet, 你可以拆分这些snippet到单独的文件. 然后可以通过目录管理ruby/*[.snippets], 也可以直接用文件管理ruby_*.snippets

    其实, 你是怎么管理代码的呢?

    回复
    0
  • PHP中文网

    PHP中文网2017-05-16 16:39:13

    解决方案:folding(根据以下假定)

    根据我的猜测,假定你的不方便管理指的是snippets块越多,文件越长,浏览起来不太容易

    .vimrc设置如下

    set foldcolumn=1 "设置vim左侧1个宽度用来显示folds闭合状态"
    set foldmethod=syntax "folds根据语言来决定如何进行闭合"
    

    命令(normal模式下):

    zR "打开所有folds"
    zM "关闭所有folds"
    zi "在以上两个命令间切换,其实是切换foldenable On/Off"
    

    folds闭合前后对比(通过以上命令)

    操作:先通过zM命令把所有snippets块闭合(文件变得很小,每个snippets只显示一行),然后方便的进行浏览,找到你需要的snippets(将光标移至该处),然后在zR或者zi将所有snippets打开,此时,你就可以查看这个snippets的内容了;
    Bonus:当你按照上述操作之后,光标应该在最底下,用命令zz就可以将内容移至屏幕中部,方便查看

    最后附上简单的.vimrc供参考(Plugin用Vundle进行管理):

    set nocompatible
    filetype off
    set rtp+=~/.vim/bundle/Vundle.vim
    
    call vundle#begin()
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Plugin goes here
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    Plugin 'VundleVim/Vundle.vim'
    Plugin 'tpope/vim-sensible'
    Plugin 'tpope/vim-fugitive'
    Plugin 'tpope/vim-commentary'
    Plugin 'tpope/vim-repeat'
    Plugin 'scrooloose/syntastic'
    Plugin 'tpope/vim-surround'
    Plugin 'vim-airline/vim-airline'
    Plugin 'vim-airline/vim-airline-themes'
    Plugin 'tomasr/molokai'
    Plugin 'morhetz/gruvbox'
    Plugin 'mattn/emmet-vim'
    Plugin 'SirVer/ultisnips'
    Plugin 'honza/vim-snippets'
    Plugin 'ctrlpvim/ctrlp.vim'
    Plugin 'scrooloose/nerdtree'
    Plugin 'mru.vim'
    Plugin 'rking/ag.vim'
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Plugin stops here
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    call vundle#end()
    
    filetype plugin indent on
    
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Tab Settings
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    set tabstop=4
    set shiftwidth=4
    set expandtab
    
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Colorscheme Settings
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    set background=dark
    if has('gui_running')
        colorscheme molokai
    else
        colorscheme slate
    endif
    
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Text
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    set linebreak
    set textwidth=500
    set wrap
    
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Other Settings
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    set number
    let mapleader=','
    set foldcolumn=1
    set foldmethod=syntax
    
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    " User ,ev to open .vimrc file
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    nmap <leader>ev :tabedit $MYVIMRC<CR>
    
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Automatically source .vimrc file
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    augroup source_vimrc
        autocmd!
        autocmd BufWritePost $MYVIMRC source $MYVIMRC
    augroup END
    
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    " CtrlP
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""
    let g:ctrlp_user_command = 'ag %s -i --nocolor --nogroup --hidden
        \ --ignore .git
        \ --ignore .svn
        \ --ignore .hg
        \ --ignore .DS_Store
        \ --ignore "**/*.pyc"
        \ -g ""'
    
    let g:ctrlp_working_path_mode=0
    let g:ctrlp_match_window='results=100'
    
    """"""""""""""""""""""""""""""
    " JavaScript section
    """""""""""""""""""""""""""""""
    au FileType javascript call JavaScriptFold()
    au FileType javascript setl fen
    au FileType javascript setl nocindent
    
    au FileType javascript imap <c-t> $log();<esc>hi
    au FileType javascript imap <c-a> alert();<esc>hi
    
    au FileType javascript inoremap <buffer> $r return 
    au FileType javascript inoremap <buffer> $f //--- PH ----------------------------------------------<esc>FP2xi
    
    function! JavaScriptFold() 
        setl foldmethod=syntax
        setl foldlevelstart=1
        syn region foldBraces start=/{/ end=/}/ transparent fold keepend extend
    
        function! FoldText()
            return substitute(getline(v:foldstart), '{.*', '{...}', '')
        endfunction
        setl foldtext=FoldText()
    endfunction

    回复
    0
  • 取消回复