2008-06-17 17:03:00 +08:00
|
|
|
" ============================================================================
|
|
|
|
" File: NERD_tree.vim
|
2009-10-09 09:46:40 +08:00
|
|
|
" Maintainer: Martin Grenfell <martin.grenfell at gmail dot com>
|
2008-06-17 17:03:00 +08:00
|
|
|
" 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.
|
|
|
|
"
|
|
|
|
" ============================================================================
|
2013-01-05 09:08:06 +08:00
|
|
|
"
|
2007-11-03 05:23:09 +08:00
|
|
|
" SECTION: Script init stuff {{{1
|
|
|
|
"============================================================
|
2019-12-31 14:31:59 +08:00
|
|
|
scriptencoding utf-8
|
|
|
|
|
2019-12-31 13:50:25 +08:00
|
|
|
if exists('loaded_nerd_tree')
|
2007-11-03 05:23:09 +08:00
|
|
|
finish
|
|
|
|
endif
|
2019-05-10 04:25:36 +08:00
|
|
|
if v:version < 703
|
2019-05-09 22:12:25 +08:00
|
|
|
echoerr "NERDTree: this plugin requires vim >= 7.3. DOWNLOAD IT! You'll thank me later!"
|
2007-11-03 05:23:09 +08:00
|
|
|
finish
|
|
|
|
endif
|
|
|
|
let loaded_nerd_tree = 1
|
2008-10-01 17:32:03 +08:00
|
|
|
|
2019-12-31 14:40:39 +08:00
|
|
|
"for line continuation - i.e dont want C in &cpoptions
|
|
|
|
let s:old_cpo = &cpoptions
|
|
|
|
set cpoptions&vim
|
2008-10-01 17:32:03 +08:00
|
|
|
|
2020-10-15 06:08:18 +08:00
|
|
|
"SECTION: Initialize variable calls and other random constants {{{2
|
|
|
|
let g:NERDTreeAutoCenter = get(g:, 'NERDTreeAutoCenter', 1)
|
|
|
|
let g:NERDTreeAutoCenterThreshold = get(g:, 'NERDTreeAutoCenterThreshold', 3)
|
|
|
|
let g:NERDTreeCaseSensitiveSort = get(g:, 'NERDTreeCaseSensitiveSort', 0)
|
|
|
|
let g:NERDTreeNaturalSort = get(g:, 'NERDTreeNaturalSort', 0)
|
|
|
|
let g:NERDTreeSortHiddenFirst = get(g:, 'NERDTreeSortHiddenFirst', 1)
|
|
|
|
let g:NERDTreeUseTCD = get(g:, 'NERDTreeUseTCD', 0)
|
|
|
|
let g:NERDTreeChDirMode = get(g:, 'NERDTreeChDirMode', 0)
|
|
|
|
let g:NERDTreeCreatePrefix = get(g:, 'NERDTreeCreatePrefix', 'silent')
|
|
|
|
let g:NERDTreeMinimalUI = get(g:, 'NERDTreeMinimalUI', 0)
|
|
|
|
let g:NERDTreeMinimalMenu = get(g:, 'NERDTreeMinimalMenu', 0)
|
|
|
|
let g:NERDTreeIgnore = get(g:, 'NERDTreeIgnore', ['\~$'])
|
|
|
|
let g:NERDTreeBookmarksFile = get(g:, 'NERDTreeBookmarksFile', expand('$HOME') . '/.NERDTreeBookmarks')
|
|
|
|
let g:NERDTreeBookmarksSort = get(g:, 'NERDTreeBookmarksSort', 1)
|
|
|
|
let g:NERDTreeHighlightCursorline = get(g:, 'NERDTreeHighlightCursorline', 1)
|
|
|
|
let g:NERDTreeHijackNetrw = get(g:, 'NERDTreeHijackNetrw', 1)
|
|
|
|
let g:NERDTreeMarkBookmarks = get(g:, 'NERDTreeMarkBookmarks', 1)
|
|
|
|
let g:NERDTreeMouseMode = get(g:, 'NERDTreeMouseMode', 1)
|
|
|
|
let g:NERDTreeNotificationThreshold = get(g:, 'NERDTreeNotificationThreshold', 100)
|
|
|
|
let g:NERDTreeQuitOnOpen = get(g:, 'NERDTreeQuitOnOpen', 0)
|
|
|
|
let g:NERDTreeRespectWildIgnore = get(g:, 'NERDTreeRespectWildIgnore', 0)
|
|
|
|
let g:NERDTreeShowBookmarks = get(g:, 'NERDTreeShowBookmarks', 0)
|
|
|
|
let g:NERDTreeShowFiles = get(g:, 'NERDTreeShowFiles', 1)
|
|
|
|
let g:NERDTreeShowHidden = get(g:, 'NERDTreeShowHidden', 0)
|
|
|
|
let g:NERDTreeShowLineNumbers = get(g:, 'NERDTreeShowLineNumbers', 0)
|
|
|
|
let g:NERDTreeSortDirs = get(g:, 'NERDTreeSortDirs', 1)
|
2015-11-26 07:29:00 +08:00
|
|
|
|
2017-10-27 15:06:51 +08:00
|
|
|
if !nerdtree#runningWindows() && !nerdtree#runningCygwin()
|
2020-10-15 06:08:18 +08:00
|
|
|
let g:NERDTreeDirArrowExpandable = get(g:, 'NERDTreeDirArrowExpandable', '▸')
|
|
|
|
let g:NERDTreeDirArrowCollapsible = get(g:, 'NERDTreeDirArrowCollapsible', '▾')
|
2015-11-26 07:29:00 +08:00
|
|
|
else
|
2020-10-15 06:08:18 +08:00
|
|
|
let g:NERDTreeDirArrowExpandable = get(g:, 'NERDTreeDirArrowExpandable', '+')
|
|
|
|
let g:NERDTreeDirArrowCollapsible = get(g:, 'NERDTreeDirArrowCollapsible', '~')
|
2015-11-26 07:29:00 +08:00
|
|
|
endif
|
2019-04-23 03:58:06 +08:00
|
|
|
|
2020-10-15 06:08:18 +08:00
|
|
|
let g:NERDTreeCascadeOpenSingleChildDir = get(g:, 'NERDTreeCascadeOpenSingleChildDir', 1)
|
|
|
|
let g:NERDTreeCascadeSingleChildDir = get(g:, 'NERDTreeCascadeSingleChildDir', 1)
|
2007-11-03 05:23:09 +08:00
|
|
|
|
2020-10-15 06:08:18 +08:00
|
|
|
let g:NERDTreeSortOrder = get(g:, 'NERDTreeSortOrder', ['\/$', '*', '\.swp$', '\.bak$', '\~$'])
|
2018-07-27 20:46:50 +08:00
|
|
|
let g:NERDTreeOldSortOrder = []
|
2007-11-03 05:23:09 +08:00
|
|
|
|
2020-10-15 06:08:18 +08:00
|
|
|
let g:NERDTreeGlyphReadOnly = get(g:, 'NERDTreeGlyphReadOnly', 'RO')
|
2016-02-27 09:57:40 +08:00
|
|
|
|
2019-12-31 13:50:25 +08:00
|
|
|
if has('conceal')
|
2020-10-15 06:08:18 +08:00
|
|
|
let g:NERDTreeNodeDelimiter = get(g:, 'NERDTreeNodeDelimiter', "\x07")
|
2019-12-31 14:29:58 +08:00
|
|
|
elseif (g:NERDTreeDirArrowExpandable ==# "\u00a0" || g:NERDTreeDirArrowCollapsible ==# "\u00a0")
|
2020-10-15 06:08:18 +08:00
|
|
|
let g:NERDTreeNodeDelimiter = get(g:, 'NERDTreeNodeDelimiter', "\u00b7")
|
2019-03-07 21:24:17 +08:00
|
|
|
else
|
2020-10-15 06:08:18 +08:00
|
|
|
let g:NERDTreeNodeDelimiter = get(g:, 'NERDTreeNodeDelimiter', "\u00a0")
|
2019-03-07 21:24:17 +08:00
|
|
|
endif
|
Support unusual characters in file and directory names (#868)
* Use a delimiter in node to separate file/dir name from the rest.
* Switch warning message to use nerdtree#deprecated function.
* Compress the space between the tree symbols and the node.
* Include the delimiter when calculating indent or getting filename.
* Don't need to strip leading delimiter. It will already be gone.
* Simplify the way the delimiter is being used.
I don't know what I was thinking. The delimiter doesn't need to be used
to separate every indicator on the node's text, ie.
Bad: Tree|GenericFlags|Filename|ExecutableFlag|Link|ReadonlyFlag
Better: Tree GenericFlags|Filename|ExecutableFlag Link ReadonlyFlag
This was unnecessary, given that we're only interested in the filename.
So, just one pair of delimiters is all we need. That greatly simplifies
the _stripMarkup function, and restores a bunch of other statements to
what they already are in the master branch.
* Add syntax highlighting to conceal the delimiter
* Put a if has("conceal") check around the syntax statement using it.
* Make concealment work correctly for LinkFile and readonly files.
* Use highlight Ignore if conceal isn't available.
This is probably the best we can do, especially if some other character
must be used in place of nbsp.
* Make the regex better match the original, but more compact.
It was allowing 2+ spaces, instead of only 1+.
* Fix the syntax highlighing of delimiters around NERDTreeExecFile.
* Bug fix: Parse . and .. from path string with trailing slash.
* Fix unresponsive cascaded directories.
Using ':' as a more visible delimiter, when directories are cascaded,
the line appears in NERDTree like so:
▾ :lib/::nerdtree/:
Before this commit, the s:UI._stripMarkup function was leaving the
internal delimiters in place (lib/::nerdtree/). Now they are removed,
resulting in a valid path (lib/nerdtree/).
* Use .= to shorten statement. Use clearer substitutes to get node name.
* Remove node delimiters that terminate the line.
* If flags are needed after the node name, then put another delimiter
before them.
* When joining directory nodes for cascaded display, strip off the
delimiter from the child node(s).
* Remove the unnecessary substitution of doubled intermediate
delimiters, since they're not in there anymore.
* DRY up the addition of the 2nd delimiter, and use only 1 for all tags.
2018-10-25 10:41:13 +08:00
|
|
|
|
2020-10-15 06:08:18 +08:00
|
|
|
"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 = get(g:, 'NERDTreeStatusline', "%{exists('b:NERDTree')?b:NERDTree.root.path.str():''}")
|
2009-09-15 15:57:08 +08:00
|
|
|
|
2020-10-15 06:08:18 +08:00
|
|
|
let g:NERDTreeWinPos = get(g:, 'NERDTreeWinPos', 'left')
|
|
|
|
let g:NERDTreeWinSize = get(g:, 'NERDTreeWinSize', 31)
|
2007-11-03 05:23:09 +08:00
|
|
|
|
2008-06-09 08:46:53 +08:00
|
|
|
"init the shell commands that will be used to copy nodes, and remove dir trees
|
2007-11-03 05:23:09 +08:00
|
|
|
"Note: the space after the command is important
|
2013-01-05 09:08:06 +08:00
|
|
|
if nerdtree#runningWindows()
|
2020-10-15 06:08:18 +08:00
|
|
|
let g:NERDTreeRemoveDirCmd = get(g:, 'NERDTreeRemoveDirCmd', 'rmdir /s /q ')
|
|
|
|
let g:NERDTreeCopyDirCmd = get(g:, 'NERDTreeCopyDirCmd', 'xcopy /s /e /i /y /q ')
|
|
|
|
let g:NERDTreeCopyFileCmd = get(g:, 'NERDTreeCopyFileCmd', 'copy /y ')
|
2007-11-03 05:23:09 +08:00
|
|
|
else
|
2020-10-15 06:08:18 +08:00
|
|
|
let g:NERDTreeRemoveDirCmd = get(g:, 'NERDTreeRemoveDirCmd', 'rm -rf ')
|
|
|
|
let g:NERDTreeCopyCmd = get(g:, 'NERDTreeCopyCmd', 'cp -r ')
|
2007-11-03 05:23:09 +08:00
|
|
|
endif
|
|
|
|
|
2008-06-09 08:46:53 +08:00
|
|
|
"SECTION: Init variable calls for key mappings {{{2
|
2020-10-15 06:08:18 +08:00
|
|
|
let g:NERDTreeMapCustomOpen = get(g:, 'NERDTreeMapCustomOpen', '<CR>')
|
|
|
|
let g:NERDTreeMapActivateNode = get(g:, 'NERDTreeMapActivateNode', 'o')
|
|
|
|
let g:NERDTreeMapChangeRoot = get(g:, 'NERDTreeMapChangeRoot', 'C')
|
|
|
|
let g:NERDTreeMapChdir = get(g:, 'NERDTreeMapChdir', 'cd')
|
|
|
|
let g:NERDTreeMapCloseChildren = get(g:, 'NERDTreeMapCloseChildren', 'X')
|
|
|
|
let g:NERDTreeMapCloseDir = get(g:, 'NERDTreeMapCloseDir', 'x')
|
|
|
|
let g:NERDTreeMapDeleteBookmark = get(g:, 'NERDTreeMapDeleteBookmark', 'D')
|
|
|
|
let g:NERDTreeMapMenu = get(g:, 'NERDTreeMapMenu', 'm')
|
|
|
|
let g:NERDTreeMapHelp = get(g:, 'NERDTreeMapHelp', '?')
|
|
|
|
let g:NERDTreeMapJumpFirstChild = get(g:, 'NERDTreeMapJumpFirstChild', 'K')
|
|
|
|
let g:NERDTreeMapJumpLastChild = get(g:, 'NERDTreeMapJumpLastChild', 'J')
|
|
|
|
let g:NERDTreeMapJumpNextSibling = get(g:, 'NERDTreeMapJumpNextSibling', '<C-j>')
|
|
|
|
let g:NERDTreeMapJumpParent = get(g:, 'NERDTreeMapJumpParent', 'p')
|
|
|
|
let g:NERDTreeMapJumpPrevSibling = get(g:, 'NERDTreeMapJumpPrevSibling', '<C-k>')
|
|
|
|
let g:NERDTreeMapJumpRoot = get(g:, 'NERDTreeMapJumpRoot', 'P')
|
|
|
|
let g:NERDTreeMapOpenExpl = get(g:, 'NERDTreeMapOpenExpl', 'e')
|
|
|
|
let g:NERDTreeMapOpenInTab = get(g:, 'NERDTreeMapOpenInTab', 't')
|
|
|
|
let g:NERDTreeMapOpenInTabSilent = get(g:, 'NERDTreeMapOpenInTabSilent', 'T')
|
|
|
|
let g:NERDTreeMapOpenRecursively = get(g:, 'NERDTreeMapOpenRecursively', 'O')
|
|
|
|
let g:NERDTreeMapOpenSplit = get(g:, 'NERDTreeMapOpenSplit', 'i')
|
|
|
|
let g:NERDTreeMapOpenVSplit = get(g:, 'NERDTreeMapOpenVSplit', 's')
|
|
|
|
let g:NERDTreeMapPreview = get(g:, 'NERDTreeMapPreview', 'g'.NERDTreeMapActivateNode)
|
|
|
|
let g:NERDTreeMapPreviewSplit = get(g:, 'NERDTreeMapPreviewSplit', 'g'.NERDTreeMapOpenSplit)
|
|
|
|
let g:NERDTreeMapPreviewVSplit = get(g:, 'NERDTreeMapPreviewVSplit', 'g'.NERDTreeMapOpenVSplit)
|
|
|
|
let g:NERDTreeMapQuit = get(g:, 'NERDTreeMapQuit', 'q')
|
|
|
|
let g:NERDTreeMapRefresh = get(g:, 'NERDTreeMapRefresh', 'r')
|
|
|
|
let g:NERDTreeMapRefreshRoot = get(g:, 'NERDTreeMapRefreshRoot', 'R')
|
|
|
|
let g:NERDTreeMapToggleBookmarks = get(g:, 'NERDTreeMapToggleBookmarks', 'B')
|
|
|
|
let g:NERDTreeMapToggleFiles = get(g:, 'NERDTreeMapToggleFiles', 'F')
|
|
|
|
let g:NERDTreeMapToggleFilters = get(g:, 'NERDTreeMapToggleFilters', 'f')
|
|
|
|
let g:NERDTreeMapToggleHidden = get(g:, 'NERDTreeMapToggleHidden', 'I')
|
|
|
|
let g:NERDTreeMapToggleZoom = get(g:, 'NERDTreeMapToggleZoom', 'A')
|
|
|
|
let g:NERDTreeMapUpdir = get(g:, 'NERDTreeMapUpdir', 'u')
|
|
|
|
let g:NERDTreeMapUpdirKeepOpen = get(g:, 'NERDTreeMapUpdirKeepOpen', 'U')
|
|
|
|
let g:NERDTreeMapCWD = get(g:, 'NERDTreeMapCWD', 'CD')
|
|
|
|
let g:NERDTreeMenuDown = get(g:, 'NERDTreeMenuDown', 'j')
|
|
|
|
let g:NERDTreeMenuUp = get(g:, 'NERDTreeMenuUp', 'k')
|
2007-11-03 05:23:09 +08:00
|
|
|
|
2013-01-05 09:08:06 +08:00
|
|
|
"SECTION: Load class files{{{2
|
2013-04-14 03:32:25 +08:00
|
|
|
call nerdtree#loadClassFiles()
|
2008-12-23 19:57:01 +08:00
|
|
|
|
2007-11-03 05:23:09 +08:00
|
|
|
" SECTION: Commands {{{1
|
|
|
|
"============================================================
|
2014-07-08 03:12:05 +08:00
|
|
|
call nerdtree#ui_glue#setupCommands()
|
|
|
|
|
2007-11-03 05:23:09 +08:00
|
|
|
" SECTION: Auto commands {{{1
|
|
|
|
"============================================================
|
2008-12-17 15:24:08 +08:00
|
|
|
augroup NERDTree
|
|
|
|
"Save the cursor position whenever we close the nerd tree
|
2019-12-31 13:50:25 +08:00
|
|
|
exec 'autocmd BufLeave,WinLeave '. g:NERDTreeCreator.BufNamePrefix() .'* if g:NERDTree.IsOpen() | call b:NERDTree.ui.saveScreenState() | endif'
|
2011-08-05 22:42:41 +08:00
|
|
|
|
2011-08-30 19:03:49 +08:00
|
|
|
"disallow insert mode in the NERDTree
|
2019-12-31 13:50:25 +08:00
|
|
|
exec 'autocmd BufEnter,WinEnter '. g:NERDTreeCreator.BufNamePrefix() .'* stopinsert'
|
2008-12-17 15:24:08 +08:00
|
|
|
augroup END
|
2007-11-03 05:23:09 +08:00
|
|
|
|
2008-12-17 15:55:50 +08:00
|
|
|
if g:NERDTreeHijackNetrw
|
|
|
|
augroup NERDTreeHijackNetrw
|
2008-12-17 18:31:59 +08:00
|
|
|
autocmd VimEnter * silent! autocmd! FileExplorer
|
2019-12-31 13:50:25 +08:00
|
|
|
au BufEnter,VimEnter * call nerdtree#checkForBrowse(expand('<amatch>'))
|
2008-12-17 15:55:50 +08:00
|
|
|
augroup END
|
|
|
|
endif
|
2008-12-13 14:32:35 +08:00
|
|
|
|
2019-12-31 14:29:58 +08:00
|
|
|
if g:NERDTreeChDirMode ==# 3
|
2019-10-17 01:26:20 +08:00
|
|
|
augroup NERDTreeChDirOnTabSwitch
|
|
|
|
autocmd TabEnter * if g:NERDTree.ExistsForTab()|call g:NERDTree.ForCurrentTab().getRoot().path.changeToDir()|endif
|
|
|
|
augroup END
|
|
|
|
endif
|
|
|
|
|
2013-01-05 09:08:06 +08:00
|
|
|
" SECTION: Public API {{{1
|
2008-06-28 20:23:02 +08:00
|
|
|
"============================================================
|
2013-01-05 09:08:06 +08:00
|
|
|
function! NERDTreeAddMenuItem(options)
|
|
|
|
call g:NERDTreeMenuItem.Create(a:options)
|
2008-07-13 12:38:52 +08:00
|
|
|
endfunction
|
2008-06-28 20:33:25 +08:00
|
|
|
|
2013-01-05 09:08:06 +08:00
|
|
|
function! NERDTreeAddMenuSeparator(...)
|
2012-01-09 01:24:30 +08:00
|
|
|
let opts = a:0 ? a:1 : {}
|
2013-01-05 09:08:06 +08:00
|
|
|
call g:NERDTreeMenuItem.CreateSeparator(opts)
|
2009-08-21 21:25:18 +08:00
|
|
|
endfunction
|
|
|
|
|
2013-01-05 09:08:06 +08:00
|
|
|
function! NERDTreeAddSubmenu(options)
|
|
|
|
return g:NERDTreeMenuItem.Create(a:options)
|
2009-08-18 22:05:02 +08:00
|
|
|
endfunction
|
|
|
|
|
2013-01-05 09:08:06 +08:00
|
|
|
function! NERDTreeAddKeyMap(options)
|
|
|
|
call g:NERDTreeKeyMap.Create(a:options)
|
2009-07-17 21:04:40 +08:00
|
|
|
endfunction
|
2008-06-28 20:23:02 +08:00
|
|
|
|
2013-01-05 09:08:06 +08:00
|
|
|
function! NERDTreeRender()
|
|
|
|
call nerdtree#renderView()
|
2007-11-03 05:23:09 +08:00
|
|
|
endfunction
|
|
|
|
|
2013-01-05 09:08:06 +08:00
|
|
|
function! NERDTreeFocus()
|
2015-05-02 21:44:32 +08:00
|
|
|
if g:NERDTree.IsOpen()
|
2020-05-04 19:59:25 +08:00
|
|
|
call g:NERDTree.CursorToTreeWin(0)
|
2011-07-09 03:10:13 +08:00
|
|
|
else
|
2019-12-31 13:50:25 +08:00
|
|
|
call g:NERDTreeCreator.ToggleTabTree('')
|
2009-01-06 08:31:17 +08:00
|
|
|
endif
|
|
|
|
endfunction
|
|
|
|
|
2013-01-05 09:08:06 +08:00
|
|
|
function! NERDTreeCWD()
|
2018-09-10 20:46:42 +08:00
|
|
|
|
2018-09-10 21:00:05 +08:00
|
|
|
if empty(getcwd())
|
|
|
|
call nerdtree#echoWarning('current directory does not exist')
|
|
|
|
return
|
|
|
|
endif
|
|
|
|
|
2018-09-10 20:46:42 +08:00
|
|
|
try
|
|
|
|
let l:cwdPath = g:NERDTreePath.New(getcwd())
|
|
|
|
catch /^NERDTree.InvalidArgumentsError/
|
|
|
|
call nerdtree#echoWarning('current directory does not exist')
|
|
|
|
return
|
|
|
|
endtry
|
|
|
|
|
2013-01-05 09:08:06 +08:00
|
|
|
call NERDTreeFocus()
|
2018-09-10 18:57:39 +08:00
|
|
|
|
|
|
|
if b:NERDTree.root.path.equals(l:cwdPath)
|
|
|
|
return
|
2018-08-23 05:01:08 +08:00
|
|
|
endif
|
2018-09-10 18:57:39 +08:00
|
|
|
|
|
|
|
let l:newRoot = g:NERDTreeFileNode.New(l:cwdPath, b:NERDTree)
|
|
|
|
call b:NERDTree.changeRoot(l:newRoot)
|
2018-09-10 20:52:43 +08:00
|
|
|
normal! ^
|
2007-11-03 05:23:09 +08:00
|
|
|
endfunction
|
2015-05-03 05:20:59 +08:00
|
|
|
|
|
|
|
function! NERDTreeAddPathFilter(callback)
|
|
|
|
call g:NERDTree.AddPathFilter(a:callback)
|
|
|
|
endfunction
|
|
|
|
|
2012-01-06 23:05:47 +08:00
|
|
|
" SECTION: Post Source Actions {{{1
|
2013-01-05 09:08:06 +08:00
|
|
|
call nerdtree#postSourceActions()
|
2008-10-01 17:32:03 +08:00
|
|
|
|
2019-12-31 14:40:39 +08:00
|
|
|
"reset &cpoptions back to users setting
|
|
|
|
let &cpoptions = s:old_cpo
|
2008-10-01 17:32:03 +08:00
|
|
|
|
2008-06-08 13:34:22 +08:00
|
|
|
" vim: set sw=4 sts=4 et fdm=marker:
|