first commit
This commit is contained in:
242
plugin/NERD_tree.vim
Normal file
242
plugin/NERD_tree.vim
Normal file
@@ -0,0 +1,242 @@
|
||||
" ============================================================================
|
||||
" File: NERD_tree.vim
|
||||
" Maintainer: Martin Grenfell <martin.grenfell at gmail dot com>
|
||||
" License: This program is free software. It comes without any warranty,
|
||||
" to the extent permitted by applicable law. You can redistribute
|
||||
" it and/or modify it under the terms of the Do What The Fuck You
|
||||
" Want To Public License, Version 2, as published by Sam Hocevar.
|
||||
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
"
|
||||
" ============================================================================
|
||||
"
|
||||
" SECTION: Script init stuff {{{1
|
||||
"============================================================
|
||||
if exists("loaded_nerd_tree")
|
||||
finish
|
||||
endif
|
||||
if v:version < 700
|
||||
echoerr "NERDTree: this plugin requires vim >= 7. DOWNLOAD IT! You'll thank me later!"
|
||||
finish
|
||||
endif
|
||||
let loaded_nerd_tree = 1
|
||||
|
||||
"for line continuation - i.e dont want C in &cpo
|
||||
let s:old_cpo = &cpo
|
||||
set cpo&vim
|
||||
|
||||
"Function: s:initVariable() function {{{2
|
||||
"This function is used to initialise a given variable to a given value. The
|
||||
"variable is only initialised if it does not exist prior
|
||||
"
|
||||
"Args:
|
||||
"var: the name of the var to be initialised
|
||||
"value: the value to initialise var to
|
||||
"
|
||||
"Returns:
|
||||
"1 if the var is set, 0 otherwise
|
||||
function! s:initVariable(var, value)
|
||||
if !exists(a:var)
|
||||
exec 'let ' . a:var . ' = ' . "'" . substitute(a:value, "'", "''", "g") . "'"
|
||||
return 1
|
||||
endif
|
||||
return 0
|
||||
endfunction
|
||||
|
||||
"SECTION: Init variable calls and other random constants {{{2
|
||||
call s:initVariable("g:NERDTreeAutoCenter", 1)
|
||||
call s:initVariable("g:NERDTreeAutoCenterThreshold", 3)
|
||||
call s:initVariable("g:NERDTreeCaseSensitiveSort", 0)
|
||||
call s:initVariable("g:NERDTreeNaturalSort", 0)
|
||||
call s:initVariable("g:NERDTreeSortHiddenFirst", 1)
|
||||
call s:initVariable("g:NERDTreeChDirMode", 0)
|
||||
call s:initVariable("g:NERDTreeCreatePrefix", "silent")
|
||||
call s:initVariable("g:NERDTreeMinimalUI", 0)
|
||||
if !exists("g:NERDTreeIgnore")
|
||||
let g:NERDTreeIgnore = ['\~$']
|
||||
endif
|
||||
call s:initVariable("g:NERDTreeBookmarksFile", expand('$HOME') . '/.NERDTreeBookmarks')
|
||||
call s:initVariable("g:NERDTreeBookmarksSort", 1)
|
||||
call s:initVariable("g:NERDTreeHighlightCursorline", 1)
|
||||
call s:initVariable("g:NERDTreeHijackNetrw", 1)
|
||||
call s:initVariable('g:NERDTreeMarkBookmarks', 1)
|
||||
call s:initVariable("g:NERDTreeMouseMode", 1)
|
||||
call s:initVariable("g:NERDTreeNotificationThreshold", 100)
|
||||
call s:initVariable("g:NERDTreeQuitOnOpen", 0)
|
||||
call s:initVariable("g:NERDTreeRespectWildIgnore", 0)
|
||||
call s:initVariable("g:NERDTreeShowBookmarks", 0)
|
||||
call s:initVariable("g:NERDTreeShowFiles", 1)
|
||||
call s:initVariable("g:NERDTreeShowHidden", 0)
|
||||
call s:initVariable("g:NERDTreeShowLineNumbers", 0)
|
||||
call s:initVariable("g:NERDTreeSortDirs", 1)
|
||||
|
||||
if !nerdtree#runningWindows() && !nerdtree#runningCygwin()
|
||||
call s:initVariable("g:NERDTreeDirArrowExpandable", "▸")
|
||||
call s:initVariable("g:NERDTreeDirArrowCollapsible", "▾")
|
||||
else
|
||||
call s:initVariable("g:NERDTreeDirArrowExpandable", "+")
|
||||
call s:initVariable("g:NERDTreeDirArrowCollapsible", "~")
|
||||
endif
|
||||
call s:initVariable("g:NERDTreeCascadeOpenSingleChildDir", 1)
|
||||
call s:initVariable("g:NERDTreeCascadeSingleChildDir", 1)
|
||||
|
||||
if !exists("g:NERDTreeSortOrder")
|
||||
let g:NERDTreeSortOrder = ['\/$', '*', '\.swp$', '\.bak$', '\~$']
|
||||
endif
|
||||
let g:NERDTreeOldSortOrder = []
|
||||
|
||||
call s:initVariable("g:NERDTreeGlyphReadOnly", "RO")
|
||||
|
||||
" ASCII 160: non-breaking space used to delimit items in the tree's nodes.
|
||||
call s:initVariable("g:NERDTreeNodeDelimiter", "\u00a0")
|
||||
|
||||
if !exists('g:NERDTreeStatusline')
|
||||
|
||||
"the exists() crap here is a hack to stop vim spazzing out when
|
||||
"loading a session that was created with an open nerd tree. It spazzes
|
||||
"because it doesnt store b:NERDTree(its a b: var, and its a hash)
|
||||
let g:NERDTreeStatusline = "%{exists('b:NERDTree')?b:NERDTree.root.path.str():''}"
|
||||
|
||||
endif
|
||||
call s:initVariable("g:NERDTreeWinPos", "left")
|
||||
call s:initVariable("g:NERDTreeWinSize", 31)
|
||||
|
||||
"init the shell commands that will be used to copy nodes, and remove dir trees
|
||||
"
|
||||
"Note: the space after the command is important
|
||||
if nerdtree#runningWindows()
|
||||
call s:initVariable("g:NERDTreeRemoveDirCmd", 'rmdir /s /q ')
|
||||
call s:initVariable("g:NERDTreeCopyDirCmd", 'xcopy /s /e /i /y /q ')
|
||||
call s:initVariable("g:NERDTreeCopyFileCmd", 'copy /y ')
|
||||
else
|
||||
call s:initVariable("g:NERDTreeRemoveDirCmd", 'rm -rf ')
|
||||
call s:initVariable("g:NERDTreeCopyCmd", 'cp -r ')
|
||||
endif
|
||||
|
||||
|
||||
"SECTION: Init variable calls for key mappings {{{2
|
||||
call s:initVariable("g:NERDTreeMapActivateNode", "o")
|
||||
call s:initVariable("g:NERDTreeMapChangeRoot", "C")
|
||||
call s:initVariable("g:NERDTreeMapChdir", "cd")
|
||||
call s:initVariable("g:NERDTreeMapCloseChildren", "X")
|
||||
call s:initVariable("g:NERDTreeMapCloseDir", "x")
|
||||
call s:initVariable("g:NERDTreeMapDeleteBookmark", "D")
|
||||
call s:initVariable("g:NERDTreeMapMenu", "m")
|
||||
call s:initVariable("g:NERDTreeMapHelp", "?")
|
||||
call s:initVariable("g:NERDTreeMapJumpFirstChild", "K")
|
||||
call s:initVariable("g:NERDTreeMapJumpLastChild", "J")
|
||||
call s:initVariable("g:NERDTreeMapJumpNextSibling", "<C-j>")
|
||||
call s:initVariable("g:NERDTreeMapJumpParent", "p")
|
||||
call s:initVariable("g:NERDTreeMapJumpPrevSibling", "<C-k>")
|
||||
call s:initVariable("g:NERDTreeMapJumpRoot", "P")
|
||||
call s:initVariable("g:NERDTreeMapOpenExpl", "e")
|
||||
call s:initVariable("g:NERDTreeMapOpenInTab", "t")
|
||||
call s:initVariable("g:NERDTreeMapOpenInTabSilent", "T")
|
||||
call s:initVariable("g:NERDTreeMapOpenRecursively", "O")
|
||||
call s:initVariable("g:NERDTreeMapOpenSplit", "i")
|
||||
call s:initVariable("g:NERDTreeMapOpenVSplit", "s")
|
||||
call s:initVariable("g:NERDTreeMapPreview", "g" . NERDTreeMapActivateNode)
|
||||
call s:initVariable("g:NERDTreeMapPreviewSplit", "g" . NERDTreeMapOpenSplit)
|
||||
call s:initVariable("g:NERDTreeMapPreviewVSplit", "g" . NERDTreeMapOpenVSplit)
|
||||
call s:initVariable("g:NERDTreeMapQuit", "q")
|
||||
call s:initVariable("g:NERDTreeMapRefresh", "r")
|
||||
call s:initVariable("g:NERDTreeMapRefreshRoot", "R")
|
||||
call s:initVariable("g:NERDTreeMapToggleBookmarks", "B")
|
||||
call s:initVariable("g:NERDTreeMapToggleFiles", "F")
|
||||
call s:initVariable("g:NERDTreeMapToggleFilters", "f")
|
||||
call s:initVariable("g:NERDTreeMapToggleHidden", "I")
|
||||
call s:initVariable("g:NERDTreeMapToggleZoom", "A")
|
||||
call s:initVariable("g:NERDTreeMapUpdir", "u")
|
||||
call s:initVariable("g:NERDTreeMapUpdirKeepOpen", "U")
|
||||
call s:initVariable("g:NERDTreeMapCWD", "CD")
|
||||
|
||||
"SECTION: Load class files{{{2
|
||||
call nerdtree#loadClassFiles()
|
||||
|
||||
" SECTION: Commands {{{1
|
||||
"============================================================
|
||||
call nerdtree#ui_glue#setupCommands()
|
||||
|
||||
" SECTION: Auto commands {{{1
|
||||
"============================================================
|
||||
augroup NERDTree
|
||||
"Save the cursor position whenever we close the nerd tree
|
||||
exec "autocmd BufLeave ". g:NERDTreeCreator.BufNamePrefix() ."* if g:NERDTree.IsOpen() | call b:NERDTree.ui.saveScreenState() | endif"
|
||||
|
||||
"disallow insert mode in the NERDTree
|
||||
exec "autocmd BufEnter ". g:NERDTreeCreator.BufNamePrefix() ."* stopinsert"
|
||||
augroup END
|
||||
|
||||
if g:NERDTreeHijackNetrw
|
||||
augroup NERDTreeHijackNetrw
|
||||
autocmd VimEnter * silent! autocmd! FileExplorer
|
||||
au BufEnter,VimEnter * call nerdtree#checkForBrowse(expand("<amatch>"))
|
||||
augroup END
|
||||
endif
|
||||
|
||||
" SECTION: Public API {{{1
|
||||
"============================================================
|
||||
function! NERDTreeAddMenuItem(options)
|
||||
call g:NERDTreeMenuItem.Create(a:options)
|
||||
endfunction
|
||||
|
||||
function! NERDTreeAddMenuSeparator(...)
|
||||
let opts = a:0 ? a:1 : {}
|
||||
call g:NERDTreeMenuItem.CreateSeparator(opts)
|
||||
endfunction
|
||||
|
||||
function! NERDTreeAddSubmenu(options)
|
||||
return g:NERDTreeMenuItem.Create(a:options)
|
||||
endfunction
|
||||
|
||||
function! NERDTreeAddKeyMap(options)
|
||||
call g:NERDTreeKeyMap.Create(a:options)
|
||||
endfunction
|
||||
|
||||
function! NERDTreeRender()
|
||||
call nerdtree#renderView()
|
||||
endfunction
|
||||
|
||||
function! NERDTreeFocus()
|
||||
if g:NERDTree.IsOpen()
|
||||
call g:NERDTree.CursorToTreeWin()
|
||||
else
|
||||
call g:NERDTreeCreator.ToggleTabTree("")
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! NERDTreeCWD()
|
||||
|
||||
if empty(getcwd())
|
||||
call nerdtree#echoWarning('current directory does not exist')
|
||||
return
|
||||
endif
|
||||
|
||||
try
|
||||
let l:cwdPath = g:NERDTreePath.New(getcwd())
|
||||
catch /^NERDTree.InvalidArgumentsError/
|
||||
call nerdtree#echoWarning('current directory does not exist')
|
||||
return
|
||||
endtry
|
||||
|
||||
call NERDTreeFocus()
|
||||
|
||||
if b:NERDTree.root.path.equals(l:cwdPath)
|
||||
return
|
||||
endif
|
||||
|
||||
let l:newRoot = g:NERDTreeFileNode.New(l:cwdPath, b:NERDTree)
|
||||
call b:NERDTree.changeRoot(l:newRoot)
|
||||
normal! ^
|
||||
endfunction
|
||||
|
||||
function! NERDTreeAddPathFilter(callback)
|
||||
call g:NERDTree.AddPathFilter(a:callback)
|
||||
endfunction
|
||||
|
||||
" SECTION: Post Source Actions {{{1
|
||||
call nerdtree#postSourceActions()
|
||||
|
||||
"reset &cpo back to users setting
|
||||
let &cpo = s:old_cpo
|
||||
|
||||
" vim: set sw=4 sts=4 et fdm=marker:
|
1118
plugin/asyncrun.vim
Normal file
1118
plugin/asyncrun.vim
Normal file
File diff suppressed because it is too large
Load Diff
132
plugin/buffergator.vim
Normal file
132
plugin/buffergator.vim
Normal file
@@ -0,0 +1,132 @@
|
||||
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
"" Buffergator
|
||||
""
|
||||
"" Vim document buffer navigation utility
|
||||
""
|
||||
"" Copyright 2011 Jeet Sukumaran.
|
||||
""
|
||||
"" This program is free software; you can redistribute it and/or modify
|
||||
"" it under the terms of the GNU General Public License as published by
|
||||
"" the Free Software Foundation; either version 3 of the License, or
|
||||
"" (at your option) any later version.
|
||||
""
|
||||
"" This program is distributed in the hope that it will be useful,
|
||||
"" but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
"" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
"" GNU General Public License <http://www.gnu.org/licenses/>
|
||||
"" for more details.
|
||||
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
" Reload and Compatibility Guard <<FOLD<<
|
||||
" ============================================================================
|
||||
" Reload protection.
|
||||
if (exists('g:did_buffergator') && g:did_buffergator) || &cp || version < 700
|
||||
finish
|
||||
endif
|
||||
let g:did_buffergator = 1
|
||||
|
||||
" avoid line continuation issues (see ':help user_41.txt')
|
||||
let s:save_cpo = &cpo
|
||||
set cpo&vim
|
||||
" >>FOLD>>
|
||||
|
||||
" Global MRU Initialization <<FOLD<<
|
||||
" ==============================================================================
|
||||
" Moves (or adds) the given buffer number to the top of the list
|
||||
if !exists("g:buffergator_mru_cycle_loop")
|
||||
let g:buffergator_mru_cycle_loop = 1
|
||||
endif
|
||||
let g:buffergator_track_mru = 1
|
||||
let g:buffergator_mru = []
|
||||
function! BuffergatorUpdateMRU(acmd_bufnr)
|
||||
if len(g:buffergator_mru) < 1 " maybe should be 2?
|
||||
if g:buffergator_mru_cycle_loop
|
||||
let g:buffergator_mru = []
|
||||
for l:bni in range(bufnr("$"), 1, -1)
|
||||
if buflisted(l:bni)
|
||||
\ && getbufvar(l:bni, "&filetype") != "netrw"
|
||||
call add(g:buffergator_mru, l:bni)
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
endif
|
||||
if !exists("w:buffergator_mru")
|
||||
let w:buffergator_mru = g:buffergator_mru[:]
|
||||
endif
|
||||
if g:buffergator_track_mru
|
||||
let bnum = a:acmd_bufnr + 0
|
||||
" if bnum == 0 || !buflisted(bnum) || !(empty(getbufvar(bnum, "netrw_browser_active")))
|
||||
if bnum == 0 || !buflisted(bnum) || getbufvar(bnum, "&filetype") == "netrw"
|
||||
return
|
||||
endif
|
||||
call filter(g:buffergator_mru, 'v:val !=# bnum')
|
||||
call insert(g:buffergator_mru, bnum, 0)
|
||||
call filter(w:buffergator_mru, 'v:val !=# bnum')
|
||||
call insert(w:buffergator_mru, bnum, 0)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Autocommands that update the most recenly used buffers
|
||||
augroup BuffergatorMRU
|
||||
au!
|
||||
autocmd BufEnter * call BuffergatorUpdateMRU(expand('<abuf>'))
|
||||
autocmd BufRead * call BuffergatorUpdateMRU(expand('<abuf>'))
|
||||
autocmd BufNewFile * call BuffergatorUpdateMRU(expand('<abuf>'))
|
||||
autocmd BufWritePost * call BuffergatorUpdateMRU(expand('<abuf>'))
|
||||
augroup NONE
|
||||
|
||||
" >>FOLD>>
|
||||
|
||||
" Public Command and Key Maps <<FOLD<<
|
||||
" ==============================================================================
|
||||
" command! -nargs=0 BuffergatorToggle :call buffergator#ToggleBuffergator()
|
||||
" command! -nargs=0 BuffergatorClose :call buffergator#CloseBuffergator()
|
||||
" command! -nargs=0 BuffergatorOpen :call buffergator#OpenBuffergator()
|
||||
" command! -nargs=0 BuffergatorTabsToggle :call buffergator#ToggleBuffergatorTabs()
|
||||
" command! -nargs=0 BuffergatorTabsOpen :call buffergator#OpenBuffergatorTabs()
|
||||
" command! -nargs=0 BuffergatorTabsClose :call buffergator#CloseBuffergatorTabs()
|
||||
" command! -nargs=0 BuffergatorUpdate :call buffergator#UpdateBuffergator('',-1)
|
||||
" command! -nargs=* BuffergatorMruCyclePrev :call buffergator#BuffergatorCycleMru(-1, "<args>")
|
||||
" command! -nargs=* BuffergatorMruCycleNext :call buffergator#BuffergatorCycleMru(1, "<args>")
|
||||
" command! -nargs=? -bang BuffergatorMruList :call buffergator#BuffergatorEchoMruList('<bang>')
|
||||
|
||||
" if !exists('g:buffergator_suppress_keymaps') || !g:buffergator_suppress_keymaps
|
||||
" " nnoremap <silent> <Leader><Leader> :BuffergatorToggle<CR>
|
||||
" nnoremap <silent> <Leader>b :BuffergatorOpen<CR>
|
||||
" nnoremap <silent> <Leader>B :BuffergatorClose<CR>
|
||||
" nnoremap <silent> <Leader>t :BuffergatorTabsOpen<CR>
|
||||
" nnoremap <silent> <Leader>to :BuffergatorTabsOpen<CR>
|
||||
" nnoremap <silent> <Leader>tc :BuffergatorTabsClose<CR>
|
||||
" nnoremap <silent> <Leader>T :BuffergatorTabsClose<CR>
|
||||
" if !exists('g:buffergator_suppress_mru_switching_keymaps') || !g:buffergator_suppress_mru_switching_keymaps
|
||||
" nnoremap <silent> <M-b> :BuffergatorMruCyclePrev<CR>
|
||||
" nnoremap <silent> <M-S-b> :BuffergatorMruCycleNext<CR>
|
||||
" if !exists('g:buffergator_keep_old_mru_switching_keymaps') || !g:buffergator_keep_old_mru_switching_keymaps
|
||||
" nnoremap <silent> gb :BuffergatorMruCyclePrev<CR>
|
||||
" nnoremap <silent> gB :BuffergatorMruCycleNext<CR>
|
||||
" else
|
||||
" nnoremap <silent> [b :BuffergatorMruCyclePrev<CR>
|
||||
" nnoremap <silent> ]b :BuffergatorMruCycleNext<CR>
|
||||
" endif
|
||||
" endif
|
||||
" if !exists('g:buffergator_suppress_mru_switch_into_splits_keymaps') || !g:buffergator_suppress_mru_switch_into_splits_keymaps
|
||||
" nnoremap <silent> <Leader><LEFT> :BuffergatorMruCyclePrev leftabove vert sbuffer<CR>
|
||||
" nnoremap <silent> <Leader><UP> :BuffergatorMruCyclePrev leftabove sbuffer<CR>
|
||||
" nnoremap <silent> <Leader><RIGHT> :BuffergatorMruCyclePrev rightbelow vert sbuffer<CR>
|
||||
" nnoremap <silent> <Leader><DOWN> :BuffergatorMruCyclePrev rightbelow sbuffer<CR>
|
||||
" nnoremap <silent> <Leader><S-LEFT> :BuffergatorMruCycleNext leftabove vert sbuffer<CR>
|
||||
" nnoremap <silent> <Leader><S-UP> :BuffergatorMruCycleNext leftabove sbuffer<CR>
|
||||
" nnoremap <silent> <Leader><S-RIGHT> :BuffergatorMruCycleNext rightbelow vert sbuffer<CR>
|
||||
" nnoremap <silent> <Leader><S-DOWN> :BuffergatorMruCycleNext rightbelow sbuffer<CR>
|
||||
" endif
|
||||
" endif
|
||||
|
||||
" >>FOLD>>
|
||||
|
||||
" Restore State <<FOLD<<
|
||||
" ============================================================================
|
||||
" restore options
|
||||
let &cpo = s:save_cpo
|
||||
" >>FOLD>>
|
||||
|
||||
" vim:foldlevel=4:
|
66
plugin/template.vim
Normal file
66
plugin/template.vim
Normal file
@@ -0,0 +1,66 @@
|
||||
" File: template.vim
|
||||
" Author: Wonder <wonderbeyond@gmail.com>
|
||||
" Description:
|
||||
" Generates template for new files.
|
||||
" 这里主要根据文件名加载模板, 而不是根据 vim 识别到的文件类型.
|
||||
" .c 和 .h 文件可能会被识别为相同类型, 显然它们需要不同的模板.
|
||||
" Rules:
|
||||
" *先看整个文件名(不含路径), 再看扩展名.
|
||||
" 例如 main.cc 文件中会定义 main 函数, 其他 .cc 文件则未必然.
|
||||
" *先看是否有普通的静态模板, 再看是否有动态模板.
|
||||
|
||||
if exists("g:enable_template") && g:enable_template == 1 && exists("g:template_dir")
|
||||
augroup Template_Generator
|
||||
autocmd! Template_Generator
|
||||
autocmd BufNewFile * call Read_template()
|
||||
augroup END
|
||||
else
|
||||
finish
|
||||
endif
|
||||
|
||||
let s:common_tpl_dir = g:template_dir . "/common"
|
||||
let s:dynamic_tpl_dir = g:template_dir . "/dynamic"
|
||||
|
||||
function! Read_template()
|
||||
let filename = expand("%:t")
|
||||
let extname = expand("%:e")
|
||||
|
||||
" 先检查是否存在[普通的][全名]匹配模板(例如 main.cc).
|
||||
let common_tpl_file = expand(s:common_tpl_dir . "/full/" . filename)
|
||||
if filereadable(common_tpl_file)
|
||||
call Read_template_file(common_tpl_file)
|
||||
return
|
||||
endif
|
||||
|
||||
" 再检查是否存在[动态的][全名]匹配模板.
|
||||
let dynamic_template_generator = expand(s:dynamic_tpl_dir . "/full/" .filename)
|
||||
if executable(dynamic_template_generator)
|
||||
call Read_dynamic_template(dynamic_template_generator, filename)
|
||||
return
|
||||
endif
|
||||
|
||||
" 再检查是否存在[普通的][后缀]匹配模板.
|
||||
let common_tpl_file = expand(s:common_tpl_dir . "/ext/" . extname)
|
||||
if filereadable(common_tpl_file)
|
||||
call Read_template_file(common_tpl_file)
|
||||
return
|
||||
endif
|
||||
|
||||
" 最后检查是否存在[动态的][后缀]匹配模板.
|
||||
let dynamic_template_generator = expand(s:dynamic_tpl_dir . "/ext/" . extname)
|
||||
if executable(dynamic_template_generator)
|
||||
call Read_dynamic_template(dynamic_template_generator, filename)
|
||||
return
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! Read_template_file(filename)
|
||||
silent execute "0r " . a:filename
|
||||
endfunction
|
||||
|
||||
" 读取模板生成器动态生成的模板.
|
||||
" generator参数指定生成器程序的路径.
|
||||
" 同时还把文件名传递给生成器.
|
||||
function! Read_dynamic_template(generator, filename)
|
||||
silent execute "0r !" . a:generator . " " . a:filename
|
||||
endfunction
|
Reference in New Issue
Block a user