mirror of https://github.com/akelge/zsh
Minimal Changes to Python mode
Added hack for paste in iTerm.app
This commit is contained in:
parent
4fdce6be97
commit
2233758541
|
@ -1,869 +0,0 @@
|
||||||
"=============================================================================
|
|
||||||
" Copyright: Copyright (C) 2001-2008 Jeff Lanzarotta
|
|
||||||
" Permission is hereby granted to use and distribute this code,
|
|
||||||
" with or without modifications, provided that this copyright
|
|
||||||
" notice is copied with it. Like anything else that's free,
|
|
||||||
" bufexplorer.vim is provided *as is* and comes with no
|
|
||||||
" warranty of any kind, either expressed or implied. In no
|
|
||||||
" event will the copyright holder be liable for any damages
|
|
||||||
" resulting from the use of this software.
|
|
||||||
" Name Of File: bufexplorer.vim
|
|
||||||
" Description: Buffer Explorer Vim Plugin
|
|
||||||
" Maintainer: Jeff Lanzarotta (delux256-vim at yahoo dot com)
|
|
||||||
" Last Changed: Wednesday, 19 Nov 2008
|
|
||||||
" Version: See g:bufexplorer_version for version number.
|
|
||||||
" Usage: This file should reside in the plugin directory and be
|
|
||||||
" automatically sourced.
|
|
||||||
"
|
|
||||||
" You may use the default keymappings of
|
|
||||||
"
|
|
||||||
" <Leader>be - Opens BufExplorer
|
|
||||||
" <Leader>bs - Opens horizontally split window BufExplorer
|
|
||||||
" <Leader>bv - Opens vertically split window BufExplorer
|
|
||||||
"
|
|
||||||
" Or you can use
|
|
||||||
"
|
|
||||||
" ":BufExplorer" - Opens BufExplorer
|
|
||||||
" ":HSBufExplorer" - Opens horizontally window BufExplorer
|
|
||||||
" ":VSBufExplorer" - Opens vertically split window BufExplorer
|
|
||||||
"
|
|
||||||
" For more help see supplied documentation.
|
|
||||||
" History: See supplied documentation.
|
|
||||||
"=============================================================================
|
|
||||||
|
|
||||||
" Exit quickly if already running or when 'compatible' is set. {{{1
|
|
||||||
if exists("g:bufexplorer_version") || &cp
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
"1}}}
|
|
||||||
|
|
||||||
" Version number
|
|
||||||
let g:bufexplorer_version = "7.2.2"
|
|
||||||
|
|
||||||
" Check for Vim version 700 or greater {{{1
|
|
||||||
if v:version < 700
|
|
||||||
echo "Sorry, bufexplorer ".g:bufexplorer_version."\nONLY runs with Vim 7.0 and greater."
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Public Interface {{{1
|
|
||||||
nmap <silent> <unique> <Leader>be :BufExplorer<CR>
|
|
||||||
nmap <silent> <unique> <Leader>bs :HSBufExplorer<CR>
|
|
||||||
nmap <silent> <unique> <Leader>bv :VSBufExplorer<CR>
|
|
||||||
|
|
||||||
" Create commands {{{1
|
|
||||||
command BufExplorer :call StartBufExplorer(has ("gui") ? "drop" : "hide edit")
|
|
||||||
command HSBufExplorer :call HorizontalSplitBufExplorer()
|
|
||||||
command VSBufExplorer :call VerticalSplitBufExplorer()
|
|
||||||
|
|
||||||
" Set {{{1
|
|
||||||
function s:Set(var, default)
|
|
||||||
if !exists(a:var)
|
|
||||||
if type(a:default)
|
|
||||||
exec "let" a:var "=" string(a:default)
|
|
||||||
else
|
|
||||||
exec "let" a:var "=" a:default
|
|
||||||
endif
|
|
||||||
|
|
||||||
return 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
return 0
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Default values {{{1
|
|
||||||
call s:Set("g:bufExplorerDefaultHelp", 1) " Show default help?
|
|
||||||
call s:Set("g:bufExplorerDetailedHelp", 0) " Show detailed help?
|
|
||||||
call s:Set("g:bufExplorerFindActive", 1) " When selecting an active buffer, take you to the window where it is active?
|
|
||||||
call s:Set("g:bufExplorerReverseSort", 0) " sort reverse?
|
|
||||||
call s:Set("g:bufExplorerShowDirectories", 1) " (Dir's are added by commands like ':e .')
|
|
||||||
call s:Set("g:bufExplorerShowRelativePath", 0) " Show listings with relative or absolute paths?
|
|
||||||
call s:Set("g:bufExplorerShowUnlisted", 0) " Show unlisted buffers?
|
|
||||||
call s:Set("g:bufExplorerSortBy", "mru") " Sorting methods are in s:sort_by:
|
|
||||||
call s:Set("g:bufExplorerSplitOutPathName", 1) " Split out path and file name?
|
|
||||||
call s:Set("g:bufExplorerSplitRight", &splitright) " Should vertical splits be on the right or left of current window?
|
|
||||||
call s:Set("g:bufExplorerSplitBelow", &splitbelow) " Should horizontal splits be below or above current window?
|
|
||||||
|
|
||||||
" Global variables {{{1
|
|
||||||
let s:MRUList = []
|
|
||||||
let s:running = 0
|
|
||||||
let s:sort_by = ["number", "name", "fullpath", "mru", "extension"]
|
|
||||||
let s:tabSpace = []
|
|
||||||
let s:types = {"fullname": ':p', "path": ':p:h', "relativename": ':~:.', "relativepath": ':~:.:h', "shortname": ':t'}
|
|
||||||
let s:originBuffer = 0
|
|
||||||
let s:splitMode = "sp"
|
|
||||||
|
|
||||||
" Setup the autocommands that handle the MRUList and other stuff. {{{1
|
|
||||||
autocmd VimEnter * call s:Setup()
|
|
||||||
|
|
||||||
" Setup {{{1
|
|
||||||
function s:Setup()
|
|
||||||
" Build initial MRUList.
|
|
||||||
let s:MRUList = range(1, bufnr('$'))
|
|
||||||
let s:tabSpace = []
|
|
||||||
" Now that the MRUList is created, add the other autocmds.
|
|
||||||
autocmd BufEnter,BufNew * call s:ActivateBuffer()
|
|
||||||
autocmd BufWipeOut * call s:DeactivateBuffer(1)
|
|
||||||
autocmd BufDelete * call s:DeactivateBuffer(0)
|
|
||||||
|
|
||||||
autocmd BufWinEnter \[BufExplorer\] call s:Initialize()
|
|
||||||
autocmd BufWinLeave \[BufExplorer\] call s:Cleanup()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" ActivateBuffer {{{1
|
|
||||||
function s:ActivateBuffer()
|
|
||||||
let b = bufnr("%")
|
|
||||||
let l = get(s:tabSpace, tabpagenr(), [])
|
|
||||||
|
|
||||||
if empty(l) || index(l, b) == -1
|
|
||||||
call add(l, b)
|
|
||||||
let s:tabSpace[tabpagenr()] = l
|
|
||||||
endif
|
|
||||||
|
|
||||||
call s:MRUPush(b)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" DeactivateBuffer {{{1
|
|
||||||
function s:DeactivateBuffer(remove)
|
|
||||||
"echom "afile:" expand("<afile>")
|
|
||||||
"echom "bufnr, afile:" bufnr(expand("<afile>"))
|
|
||||||
"echom "buffers:" string(tabpagebuflist())
|
|
||||||
"echom "MRU before:" string(s:MRUList)
|
|
||||||
|
|
||||||
let _bufnr = bufnr(expand("<afile>"))
|
|
||||||
let _buftype = getbufvar(_bufnr, "&buftype")
|
|
||||||
|
|
||||||
if empty(_buftype) || _buftype == "nofile" || !buflisted(_bufnr) || empty(bufname(_bufnr)) || fnamemodify(bufname(_bufnr), ":t") == "[BufExplorer]"
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if a:remove
|
|
||||||
call s:MRUPop(bufnr(expand("<afile>")))
|
|
||||||
end
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" MRUPop {{{1
|
|
||||||
function s:MRUPop(buf)
|
|
||||||
call filter(s:MRUList, 'v:val != '.a:buf)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" MRUPush {{{1
|
|
||||||
function s:MRUPush(buf)
|
|
||||||
" Skip temporary buffer with buftype set. Don't add the BufExplorer window to the
|
|
||||||
" list.
|
|
||||||
if !empty(getbufvar(a:buf, "&buftype")) ||
|
|
||||||
\ !buflisted(a:buf) || empty(bufname(a:buf)) ||
|
|
||||||
\ fnamemodify(bufname(a:buf), ":t") == "[BufExplorer]"
|
|
||||||
return
|
|
||||||
end
|
|
||||||
" Remove the buffer number from the list if it already exists.
|
|
||||||
call s:MRUPop(a:buf)
|
|
||||||
" Add the buffer number to the head of the list.
|
|
||||||
call insert(s:MRUList,a:buf)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Initialize {{{1
|
|
||||||
function s:Initialize()
|
|
||||||
let s:_insertmode = &insertmode
|
|
||||||
set noinsertmode
|
|
||||||
|
|
||||||
let s:_showcmd = &showcmd
|
|
||||||
set noshowcmd
|
|
||||||
|
|
||||||
let s:_cpo = &cpo
|
|
||||||
set cpo&vim
|
|
||||||
|
|
||||||
let s:_report = &report
|
|
||||||
let &report = 10000
|
|
||||||
|
|
||||||
let s:_list = &list
|
|
||||||
set nolist
|
|
||||||
|
|
||||||
setlocal nonumber
|
|
||||||
setlocal foldcolumn=0
|
|
||||||
setlocal nofoldenable
|
|
||||||
setlocal cursorline
|
|
||||||
setlocal nospell
|
|
||||||
|
|
||||||
set nobuflisted
|
|
||||||
|
|
||||||
let s:running = 1
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Cleanup {{{1
|
|
||||||
function s:Cleanup()
|
|
||||||
let &insertmode = s:_insertmode
|
|
||||||
let &showcmd = s:_showcmd
|
|
||||||
let &cpo = s:_cpo
|
|
||||||
let &report = s:_report
|
|
||||||
let &list = s:_list
|
|
||||||
let s:running = 0
|
|
||||||
let s:splitMode = ""
|
|
||||||
|
|
||||||
delmarks!
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" HorizontalSplitBufExplorer {{{1
|
|
||||||
function HorizontalSplitBufExplorer()
|
|
||||||
let s:splitMode = "sp"
|
|
||||||
exec "BufExplorer"
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" VerticalSplitBufExplorer {{{1
|
|
||||||
function VerticalSplitBufExplorer()
|
|
||||||
let s:splitMode = "vsp"
|
|
||||||
exec "BufExplorer"
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" StartBufExplorer {{{1
|
|
||||||
function StartBufExplorer(open)
|
|
||||||
let name = '[BufExplorer]'
|
|
||||||
|
|
||||||
if !has("win32")
|
|
||||||
" On non-Windows boxes, escape the name so that is shows up correctly.
|
|
||||||
let name = escape(name, "[]")
|
|
||||||
endif
|
|
||||||
" Make sure there is only one explorer open at a time.
|
|
||||||
if s:running == 1
|
|
||||||
" Go to the open buffer.
|
|
||||||
if has("gui")
|
|
||||||
exec "drop" name
|
|
||||||
endif
|
|
||||||
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
let s:originBuffer = bufnr("%")
|
|
||||||
silent let s:raw_buffer_listing = s:GetBufferInfo()
|
|
||||||
|
|
||||||
let copy = copy(s:raw_buffer_listing)
|
|
||||||
|
|
||||||
if (g:bufExplorerShowUnlisted == 0)
|
|
||||||
call filter(copy, 'v:val.attributes !~ "u"')
|
|
||||||
endif
|
|
||||||
|
|
||||||
if (!empty(copy))
|
|
||||||
call filter(copy, 'v:val.shortname !~ "\\\[No Name\\\]"')
|
|
||||||
endif
|
|
||||||
|
|
||||||
if len(copy) <= 1
|
|
||||||
echo "\r"
|
|
||||||
call s:Warning("Sorry, there are no more buffers to explore")
|
|
||||||
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
" We may have to split the current window.
|
|
||||||
if (s:splitMode != "")
|
|
||||||
" Save off the original settings.
|
|
||||||
let [_splitbelow, _splitright] = [&splitbelow, &splitright]
|
|
||||||
" Set the setting to ours.
|
|
||||||
let [&splitbelow, &splitright] = [g:bufExplorerSplitBelow, g:bufExplorerSplitRight]
|
|
||||||
" Do it.
|
|
||||||
exe s:splitMode
|
|
||||||
" Restore the original settings.
|
|
||||||
let [&splitbelow, &splitright] = [_splitbelow, _splitright]
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("b:displayMode") || b:displayMode != "winmanager"
|
|
||||||
" Do not use keepalt when opening bufexplorer to allow the buffer that we are
|
|
||||||
" leaving to become the new alternate buffer
|
|
||||||
exec "silent keepjumps ".a:open." ".name
|
|
||||||
endif
|
|
||||||
|
|
||||||
call s:DisplayBufferList()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" DisplayBufferList {{{1
|
|
||||||
function s:DisplayBufferList()
|
|
||||||
setlocal bufhidden=delete
|
|
||||||
setlocal buftype=nofile
|
|
||||||
setlocal modifiable
|
|
||||||
setlocal noswapfile
|
|
||||||
setlocal nowrap
|
|
||||||
|
|
||||||
call s:SetupSyntax()
|
|
||||||
call s:MapKeys()
|
|
||||||
call setline(1, s:CreateHelp())
|
|
||||||
call s:BuildBufferList()
|
|
||||||
call cursor(s:firstBufferLine, 1)
|
|
||||||
|
|
||||||
if !g:bufExplorerResize
|
|
||||||
normal! zz
|
|
||||||
endif
|
|
||||||
|
|
||||||
setlocal nomodifiable
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" MapKeys {{{1
|
|
||||||
function s:MapKeys()
|
|
||||||
if exists("b:displayMode") && b:displayMode == "winmanager"
|
|
||||||
nnoremap <buffer> <silent> <tab> :call <SID>SelectBuffer("tab")<cr>
|
|
||||||
endif
|
|
||||||
|
|
||||||
nnoremap <buffer> <silent> <F1> :call <SID>ToggleHelp()<cr>
|
|
||||||
nnoremap <buffer> <silent> <2-leftmouse> :call <SID>SelectBuffer()<cr>
|
|
||||||
nnoremap <buffer> <silent> <cr> :call <SID>SelectBuffer()<cr>
|
|
||||||
nnoremap <buffer> <silent> t :call <SID>SelectBuffer("tab")<cr>
|
|
||||||
nnoremap <buffer> <silent> <s-cr> :call <SID>SelectBuffer("tab")<cr>
|
|
||||||
nnoremap <buffer> <silent> d :call <SID>RemoveBuffer("wipe")<cr>
|
|
||||||
nnoremap <buffer> <silent> D :call <SID>RemoveBuffer("delete")<cr>
|
|
||||||
nnoremap <buffer> <silent> m :call <SID>MRUListShow()<cr>
|
|
||||||
nnoremap <buffer> <silent> p :call <SID>ToggleSplitOutPathName()<cr>
|
|
||||||
nnoremap <buffer> <silent> q :call <SID>Close()<cr>
|
|
||||||
nnoremap <buffer> <silent> r :call <SID>SortReverse()<cr>
|
|
||||||
nnoremap <buffer> <silent> R :call <SID>ToggleShowRelativePath()<cr>
|
|
||||||
nnoremap <buffer> <silent> s :call <SID>SortSelect()<cr>
|
|
||||||
nnoremap <buffer> <silent> u :call <SID>ToggleShowUnlisted()<cr>
|
|
||||||
nnoremap <buffer> <silent> f :call <SID>ToggleFindActive()<cr>
|
|
||||||
|
|
||||||
for k in ["G", "n", "N", "L", "M", "H"]
|
|
||||||
exec "nnoremap <buffer> <silent>" k ":keepjumps normal!" k."<cr>"
|
|
||||||
endfor
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" SetupSyntax {{{1
|
|
||||||
function s:SetupSyntax()
|
|
||||||
if has("syntax")
|
|
||||||
syn match bufExplorerHelp "^\".*" contains=bufExplorerSortBy,bufExplorerMapping,bufExplorerTitle,bufExplorerSortType,bufExplorerToggleSplit,bufExplorerToggleOpen
|
|
||||||
syn match bufExplorerOpenIn "Open in \w\+ window" contained
|
|
||||||
syn match bufExplorerSplit "\w\+ split" contained
|
|
||||||
syn match bufExplorerSortBy "Sorted by .*" contained contains=bufExplorerOpenIn,bufExplorerSplit
|
|
||||||
syn match bufExplorerMapping "\" \zs.\+\ze :" contained
|
|
||||||
syn match bufExplorerTitle "Buffer Explorer.*" contained
|
|
||||||
syn match bufExplorerSortType "'\w\{-}'" contained
|
|
||||||
syn match bufExplorerBufNbr /^\s*\d\+/
|
|
||||||
syn match bufExplorerToggleSplit "toggle split type" contained
|
|
||||||
syn match bufExplorerToggleOpen "toggle open mode" contained
|
|
||||||
|
|
||||||
syn match bufExplorerModBuf /^\s*\d\+.\{4}+.*/
|
|
||||||
syn match bufExplorerLockedBuf /^\s*\d\+.\{3}[\-=].*/
|
|
||||||
syn match bufExplorerHidBuf /^\s*\d\+.\{2}h.*/
|
|
||||||
syn match bufExplorerActBuf /^\s*\d\+.\{2}a.*/
|
|
||||||
syn match bufExplorerCurBuf /^\s*\d\+.%.*/
|
|
||||||
syn match bufExplorerAltBuf /^\s*\d\+.#.*/
|
|
||||||
syn match bufExplorerUnlBuf /^\s*\d\+u.*/
|
|
||||||
|
|
||||||
hi def link bufExplorerBufNbr Number
|
|
||||||
hi def link bufExplorerMapping NonText
|
|
||||||
hi def link bufExplorerHelp Special
|
|
||||||
hi def link bufExplorerOpenIn Identifier
|
|
||||||
hi def link bufExplorerSortBy String
|
|
||||||
hi def link bufExplorerSplit NonText
|
|
||||||
hi def link bufExplorerTitle NonText
|
|
||||||
hi def link bufExplorerSortType bufExplorerSortBy
|
|
||||||
hi def link bufExplorerToggleSplit bufExplorerSplit
|
|
||||||
hi def link bufExplorerToggleOpen bufExplorerOpenIn
|
|
||||||
|
|
||||||
hi def link bufExplorerActBuf Identifier
|
|
||||||
hi def link bufExplorerAltBuf String
|
|
||||||
hi def link bufExplorerCurBuf Type
|
|
||||||
hi def link bufExplorerHidBuf Constant
|
|
||||||
hi def link bufExplorerLockedBuf Special
|
|
||||||
hi def link bufExplorerModBuf Exception
|
|
||||||
hi def link bufExplorerUnlBuf Comment
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" ToggleHelp {{{1
|
|
||||||
function s:ToggleHelp()
|
|
||||||
let g:bufExplorerDetailedHelp = !g:bufExplorerDetailedHelp
|
|
||||||
|
|
||||||
setlocal modifiable
|
|
||||||
" Save position.
|
|
||||||
normal! ma
|
|
||||||
" Remove old header.
|
|
||||||
if (s:firstBufferLine > 1)
|
|
||||||
exec "keepjumps 1,".(s:firstBufferLine - 1) "d _"
|
|
||||||
endif
|
|
||||||
|
|
||||||
call append(0, s:CreateHelp())
|
|
||||||
|
|
||||||
silent! normal! g`a
|
|
||||||
delmarks a
|
|
||||||
|
|
||||||
setlocal nomodifiable
|
|
||||||
|
|
||||||
if exists("b:displayMode") && b:displayMode == "winmanager"
|
|
||||||
call WinManagerForceReSize("BufExplorer")
|
|
||||||
end
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" GetHelpStatus {{{1
|
|
||||||
function s:GetHelpStatus()
|
|
||||||
let ret = '" Sorted by '.((g:bufExplorerReverseSort == 1) ? "reverse " : "").g:bufExplorerSortBy
|
|
||||||
let ret .= ' | '.((g:bufExplorerFindActive == 0) ? "Don't " : "")."Locate buffer"
|
|
||||||
let ret .= ((g:bufExplorerShowUnlisted == 0) ? "" : " | Show unlisted")
|
|
||||||
let ret .= ' | '.((g:bufExplorerShowRelativePath == 0) ? "Absolute" : "Relative")
|
|
||||||
let ret .= ' '.((g:bufExplorerSplitOutPathName == 0) ? "Full" : "Split")." path"
|
|
||||||
|
|
||||||
return ret
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" CreateHelp {{{1
|
|
||||||
function s:CreateHelp()
|
|
||||||
if g:bufExplorerDefaultHelp == 0 && g:bufExplorerDetailedHelp == 0
|
|
||||||
let s:firstBufferLine = 1
|
|
||||||
return []
|
|
||||||
endif
|
|
||||||
|
|
||||||
let header = []
|
|
||||||
|
|
||||||
if g:bufExplorerDetailedHelp == 1
|
|
||||||
call add(header, '" Buffer Explorer ('.g:bufexplorer_version.')')
|
|
||||||
call add(header, '" --------------------------')
|
|
||||||
call add(header, '" <F1> : toggle this help')
|
|
||||||
call add(header, '" <enter> or Mouse-Double-Click : open buffer under cursor')
|
|
||||||
call add(header, '" <shift-enter> or t : open buffer in another tab')
|
|
||||||
call add(header, '" d : wipe buffer')
|
|
||||||
call add(header, '" D : delete buffer')
|
|
||||||
call add(header, '" p : toggle spliting of file and path name')
|
|
||||||
call add(header, '" q : quit')
|
|
||||||
call add(header, '" r : reverse sort')
|
|
||||||
call add(header, '" R : toggle showing relative or full paths')
|
|
||||||
call add(header, '" u : toggle showing unlisted buffers')
|
|
||||||
call add(header, '" s : select sort field '.string(s:sort_by).'')
|
|
||||||
call add(header, '" f : toggle find active buffer')
|
|
||||||
else
|
|
||||||
call add(header, '" Press <F1> for Help')
|
|
||||||
endif
|
|
||||||
|
|
||||||
call add(header, s:GetHelpStatus())
|
|
||||||
call add(header, '"=')
|
|
||||||
|
|
||||||
let s:firstBufferLine = len(header) + 1
|
|
||||||
|
|
||||||
return header
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" GetBufferInfo {{{1
|
|
||||||
function s:GetBufferInfo()
|
|
||||||
redir => bufoutput
|
|
||||||
buffers!
|
|
||||||
redir END
|
|
||||||
|
|
||||||
let [all, allwidths, listedwidths] = [[], {}, {}]
|
|
||||||
|
|
||||||
for n in keys(s:types)
|
|
||||||
let allwidths[n] = []
|
|
||||||
let listedwidths[n] = []
|
|
||||||
endfor
|
|
||||||
|
|
||||||
for buf in split(bufoutput, '\n')
|
|
||||||
let bits = split(buf, '"')
|
|
||||||
let b = {"attributes": bits[0], "line": substitute(bits[2], '\s*', '', '')}
|
|
||||||
|
|
||||||
for [key, val] in items(s:types)
|
|
||||||
let b[key] = fnamemodify(bits[1], val)
|
|
||||||
endfor
|
|
||||||
|
|
||||||
if getftype(b.fullname) == "dir" && g:bufExplorerShowDirectories == 1
|
|
||||||
let b.shortname = "<DIRECTORY>"
|
|
||||||
end
|
|
||||||
|
|
||||||
call add(all, b)
|
|
||||||
|
|
||||||
for n in keys(s:types)
|
|
||||||
call add(allwidths[n], len(b[n]))
|
|
||||||
|
|
||||||
if b.attributes !~ "u"
|
|
||||||
call add(listedwidths[n], len(b[n]))
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
endfor
|
|
||||||
|
|
||||||
let [s:allpads, s:listedpads] = [{}, {}]
|
|
||||||
|
|
||||||
for n in keys(s:types)
|
|
||||||
let s:allpads[n] = repeat(' ', max(allwidths[n]))
|
|
||||||
let s:listedpads[n] = repeat(' ', max(listedwidths[n]))
|
|
||||||
endfor
|
|
||||||
|
|
||||||
return all
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" BuildBufferList {{{1
|
|
||||||
function s:BuildBufferList()
|
|
||||||
let lines = []
|
|
||||||
" Loop through every buffer.
|
|
||||||
for buf in s:raw_buffer_listing
|
|
||||||
if (!g:bufExplorerShowUnlisted && buf.attributes =~ "u")
|
|
||||||
" Skip unlisted buffers if we are not to show them.
|
|
||||||
continue
|
|
||||||
endif
|
|
||||||
|
|
||||||
let line = buf.attributes." "
|
|
||||||
|
|
||||||
if g:bufExplorerSplitOutPathName
|
|
||||||
let type = (g:bufExplorerShowRelativePath) ? "relativepath" : "path"
|
|
||||||
let path = buf[type]
|
|
||||||
let pad = (g:bufExplorerShowUnlisted) ? s:allpads.shortname : s:listedpads.shortname
|
|
||||||
let line .= buf.shortname." ".strpart(pad.path, len(buf.shortname))
|
|
||||||
else
|
|
||||||
let type = (g:bufExplorerShowRelativePath) ? "relativename" : "fullname"
|
|
||||||
let path = buf[type]
|
|
||||||
let line .= path
|
|
||||||
endif
|
|
||||||
|
|
||||||
let pads = (g:bufExplorerShowUnlisted) ? s:allpads : s:listedpads
|
|
||||||
|
|
||||||
if !empty(pads[type])
|
|
||||||
let line .= strpart(pads[type], len(path))." "
|
|
||||||
endif
|
|
||||||
|
|
||||||
let line .= buf.line
|
|
||||||
|
|
||||||
call add(lines, line)
|
|
||||||
endfor
|
|
||||||
|
|
||||||
call setline(s:firstBufferLine, lines)
|
|
||||||
|
|
||||||
call s:SortListing()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" SelectBuffer {{{1
|
|
||||||
function s:SelectBuffer(...)
|
|
||||||
" Sometimes messages are not cleared when we get here so it looks like an error has
|
|
||||||
" occurred when it really has not.
|
|
||||||
echo ""
|
|
||||||
" Are we on a line with a file name?
|
|
||||||
if line('.') < s:firstBufferLine
|
|
||||||
exec "normal! \<cr>"
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
let _bufNbr = str2nr(getline('.'))
|
|
||||||
|
|
||||||
if exists("b:displayMode") && b:displayMode == "winmanager"
|
|
||||||
let bufname = expand("#"._bufNbr.":p")
|
|
||||||
|
|
||||||
if (a:0 == 1) && (a:1 == "tab")
|
|
||||||
call WinManagerFileEdit(bufname, 1)
|
|
||||||
else
|
|
||||||
call WinManagerFileEdit(bufname, 0)
|
|
||||||
endif
|
|
||||||
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if bufexists(_bufNbr)
|
|
||||||
if bufnr("#") == _bufNbr
|
|
||||||
return s:Close()
|
|
||||||
endif
|
|
||||||
|
|
||||||
if (a:0 == 1) && (a:1 == "tab")
|
|
||||||
" Restore [BufExplorer] buffer.
|
|
||||||
exec "keepjumps silent buffer!".s:originBuffer
|
|
||||||
|
|
||||||
let tabNbr = s:GetTabNbr(_bufNbr)
|
|
||||||
|
|
||||||
if tabNbr == 0
|
|
||||||
" _bufNbr is not opened in any tabs. Open a new tab with the selected buffer in it.
|
|
||||||
exec "999tab split +buffer" . _bufNbr
|
|
||||||
else
|
|
||||||
" The _bufNbr is already opened in tab(s), go to that tab.
|
|
||||||
exec tabNbr . "tabnext"
|
|
||||||
" Focus window.
|
|
||||||
exec s:GetWinNbr(tabNbr, _bufNbr) . "wincmd w"
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
if bufloaded(_bufNbr) && g:bufExplorerFindActive
|
|
||||||
call s:Close()
|
|
||||||
|
|
||||||
let tabNbr = s:GetTabNbr(_bufNbr)
|
|
||||||
|
|
||||||
if tabNbr != 0
|
|
||||||
" The buffer is located in a tab. Go to that tab number.
|
|
||||||
exec tabNbr . "tabnext"
|
|
||||||
else
|
|
||||||
let bufname = expand("#"._bufNbr.":p")
|
|
||||||
exec bufname ? "drop ".escape(bufname, " ") : "buffer "._bufNbr
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
" Switch to the buffer.
|
|
||||||
exec "keepalt keepjumps silent b!" _bufNbr
|
|
||||||
endif
|
|
||||||
" Make the buffer 'listed' again.
|
|
||||||
call setbufvar(_bufNbr, "&buflisted", "1")
|
|
||||||
else
|
|
||||||
call s:Error("Sorry, that buffer no longer exists, please select another")
|
|
||||||
call s:DeleteBuffer(_bufNbr, "wipe")
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" RemoveBuffer {{{1
|
|
||||||
function s:RemoveBuffer(mode)
|
|
||||||
" Are we on a line with a file name?
|
|
||||||
if line('.') < s:firstBufferLine
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
" Do not allow this buffer to be deleted if it is the last one.
|
|
||||||
if len(s:MRUList) == 1
|
|
||||||
call s:Error("Sorry, you are not allowed to delete the last buffer")
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
" These commands are to temporarily suspend the activity of winmanager.
|
|
||||||
if exists("b:displayMode") && b:displayMode == "winmanager"
|
|
||||||
call WinManagerSuspendAUs()
|
|
||||||
end
|
|
||||||
|
|
||||||
let _bufNbr = str2nr(getline('.'))
|
|
||||||
|
|
||||||
if getbufvar(_bufNbr, '&modified') == 1
|
|
||||||
call s:Error("Sorry, no write since last change for buffer "._bufNbr.", unable to delete")
|
|
||||||
return
|
|
||||||
else
|
|
||||||
" Okay, everything is good, delete or wipe the buffer.
|
|
||||||
call s:DeleteBuffer(_bufNbr, a:mode)
|
|
||||||
endif
|
|
||||||
" Reactivate winmanager autocommand activity.
|
|
||||||
if exists("b:displayMode") && b:displayMode == "winmanager"
|
|
||||||
call WinManagerForceReSize("BufExplorer")
|
|
||||||
call WinManagerResumeAUs()
|
|
||||||
end
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" DeleteBuffer {{{1
|
|
||||||
function s:DeleteBuffer(buf, mode)
|
|
||||||
" This routine assumes that the buffer to be removed is on the current line.
|
|
||||||
try
|
|
||||||
if a:mode == "wipe"
|
|
||||||
exe "silent bw" a:buf
|
|
||||||
else
|
|
||||||
exe "silent bd" a:buf
|
|
||||||
end
|
|
||||||
|
|
||||||
setlocal modifiable
|
|
||||||
normal! "_dd
|
|
||||||
setlocal nomodifiable
|
|
||||||
" Delete the buffer from the raw buffer list.
|
|
||||||
call filter(s:raw_buffer_listing, 'v:val.attributes !~ " '.a:buf.' "')
|
|
||||||
catch
|
|
||||||
call s:Error(v:exception)
|
|
||||||
endtry
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Close {{{1
|
|
||||||
function s:Close()
|
|
||||||
" Get only the listed buffers.
|
|
||||||
let listed = filter(copy(s:MRUList), "buflisted(v:val)")
|
|
||||||
" If we needed to split the main window, close the split one.
|
|
||||||
if (s:splitMode != "")
|
|
||||||
exec "wincmd c"
|
|
||||||
end
|
|
||||||
|
|
||||||
for b in reverse(listed[0:1])
|
|
||||||
exec "keepjumps silent b ".b
|
|
||||||
endfor
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" ToggleSplitOutPathName {{{1
|
|
||||||
function s:ToggleSplitOutPathName()
|
|
||||||
let g:bufExplorerSplitOutPathName = !g:bufExplorerSplitOutPathName
|
|
||||||
call s:RebuildBufferList()
|
|
||||||
call s:UpdateHelpStatus()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" ToggleShowRelativePath {{{1
|
|
||||||
function s:ToggleShowRelativePath()
|
|
||||||
let g:bufExplorerShowRelativePath = !g:bufExplorerShowRelativePath
|
|
||||||
call s:RebuildBufferList()
|
|
||||||
call s:UpdateHelpStatus()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" ToggleShowUnlisted {{{1
|
|
||||||
function s:ToggleShowUnlisted()
|
|
||||||
let g:bufExplorerShowUnlisted = !g:bufExplorerShowUnlisted
|
|
||||||
let num_bufs = s:RebuildBufferList(g:bufExplorerShowUnlisted == 0)
|
|
||||||
call s:UpdateHelpStatus()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" ToggleFindActive {{{1
|
|
||||||
function s:ToggleFindActive()
|
|
||||||
let g:bufExplorerFindActive = !g:bufExplorerFindActive
|
|
||||||
call s:UpdateHelpStatus()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" RebuildBufferList {{{1
|
|
||||||
function s:RebuildBufferList(...)
|
|
||||||
setlocal modifiable
|
|
||||||
|
|
||||||
let curPos = getpos('.')
|
|
||||||
|
|
||||||
if a:0
|
|
||||||
" Clear the list first.
|
|
||||||
exec "keepjumps ".s:firstBufferLine.',$d "_'
|
|
||||||
endif
|
|
||||||
|
|
||||||
let num_bufs = s:BuildBufferList()
|
|
||||||
|
|
||||||
call setpos('.', curPos)
|
|
||||||
|
|
||||||
setlocal nomodifiable
|
|
||||||
|
|
||||||
return num_bufs
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" UpdateHelpStatus {{{1
|
|
||||||
function s:UpdateHelpStatus()
|
|
||||||
setlocal modifiable
|
|
||||||
|
|
||||||
let text = s:GetHelpStatus()
|
|
||||||
call setline(s:firstBufferLine - 2, text)
|
|
||||||
|
|
||||||
setlocal nomodifiable
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" MRUCmp {{{1
|
|
||||||
function s:MRUCmp(line1, line2)
|
|
||||||
return index(s:MRUList, str2nr(a:line1)) - index(s:MRUList, str2nr(a:line2))
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" SortReverse {{{1
|
|
||||||
function s:SortReverse()
|
|
||||||
let g:bufExplorerReverseSort = !g:bufExplorerReverseSort
|
|
||||||
|
|
||||||
call s:ReSortListing()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" SortSelect {{{1
|
|
||||||
function s:SortSelect()
|
|
||||||
let g:bufExplorerSortBy = get(s:sort_by, index(s:sort_by, g:bufExplorerSortBy) + 1, s:sort_by[0])
|
|
||||||
|
|
||||||
call s:ReSortListing()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" ReSortListing {{{1
|
|
||||||
function s:ReSortListing()
|
|
||||||
setlocal modifiable
|
|
||||||
|
|
||||||
let curPos = getpos('.')
|
|
||||||
|
|
||||||
call s:SortListing()
|
|
||||||
call s:UpdateHelpStatus()
|
|
||||||
|
|
||||||
call setpos('.', curPos)
|
|
||||||
|
|
||||||
setlocal nomodifiable
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" SortListing {{{1
|
|
||||||
function s:SortListing()
|
|
||||||
let sort = s:firstBufferLine.",$sort".((g:bufExplorerReverseSort == 1) ? "!": "")
|
|
||||||
|
|
||||||
if g:bufExplorerSortBy == "number"
|
|
||||||
" Easiest case.
|
|
||||||
exec sort 'n'
|
|
||||||
elseif g:bufExplorerSortBy == "name"
|
|
||||||
if g:bufExplorerSplitOutPathName
|
|
||||||
exec sort 'ir /\d.\{7}\zs\f\+\ze/'
|
|
||||||
else
|
|
||||||
exec sort 'ir /\zs[^\/\\]\+\ze\s*line/'
|
|
||||||
endif
|
|
||||||
elseif g:bufExplorerSortBy == "fullpath"
|
|
||||||
if g:bufExplorerSplitOutPathName
|
|
||||||
" Sort twice - first on the file name then on the path.
|
|
||||||
exec sort 'ir /\d.\{7}\zs\f\+\ze/'
|
|
||||||
endif
|
|
||||||
|
|
||||||
exec sort 'ir /\zs\f\+\ze\s\+line/'
|
|
||||||
elseif g:bufExplorerSortBy == "extension"
|
|
||||||
exec sort 'ir /\.\zs\w\+\ze\s/'
|
|
||||||
elseif g:bufExplorerSortBy == "mru"
|
|
||||||
let l = getline(s:firstBufferLine, "$")
|
|
||||||
|
|
||||||
call sort(l, "<SID>MRUCmp")
|
|
||||||
|
|
||||||
if g:bufExplorerReverseSort
|
|
||||||
call reverse(l)
|
|
||||||
endif
|
|
||||||
|
|
||||||
call setline(s:firstBufferLine, l)
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" MRUListShow {{{1
|
|
||||||
function s:MRUListShow()
|
|
||||||
echomsg "MRUList=".string(s:MRUList)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Error {{{1
|
|
||||||
function s:Error(msg)
|
|
||||||
echohl ErrorMsg | echo a:msg | echohl none
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Warning {{{1
|
|
||||||
function s:Warning(msg)
|
|
||||||
echohl WarningMsg | echo a:msg | echohl none
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" GetTabNbr {{{1
|
|
||||||
function s:GetTabNbr(bufNbr)
|
|
||||||
" Searching buffer bufno, in tabs.
|
|
||||||
for i in range(tabpagenr("$"))
|
|
||||||
if index(tabpagebuflist(i + 1), a:bufNbr) != -1
|
|
||||||
return i + 1
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
return 0
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" GetWinNbr" {{{1
|
|
||||||
function s:GetWinNbr(tabNbr, bufNbr)
|
|
||||||
" window number in tabpage.
|
|
||||||
return index(tabpagebuflist(a:tabNbr), a:bufNbr) + 1
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Winmanager Integration {{{1
|
|
||||||
let g:BufExplorer_title = "\[Buf\ List\]"
|
|
||||||
call s:Set("g:bufExplorerResize", 1)
|
|
||||||
call s:Set("g:bufExplorerMaxHeight", 25) " Handles dynamic resizing of the window.
|
|
||||||
|
|
||||||
" Function to start display. Set the mode to 'winmanager' for this buffer.
|
|
||||||
" This is to figure out how this plugin was called. In a standalone fashion
|
|
||||||
" or by winmanager.
|
|
||||||
function BufExplorer_Start()
|
|
||||||
let b:displayMode = "winmanager"
|
|
||||||
call StartBufExplorer("e")
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Returns whether the display is okay or not.
|
|
||||||
function BufExplorer_IsValid()
|
|
||||||
return 0
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Handles dynamic refreshing of the window.
|
|
||||||
function BufExplorer_Refresh()
|
|
||||||
let b:displayMode = "winmanager"
|
|
||||||
call StartBufExplorer("e")
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function BufExplorer_ReSize()
|
|
||||||
if !g:bufExplorerResize
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
let nlines = min([line("$"), g:bufExplorerMaxHeight])
|
|
||||||
|
|
||||||
exe nlines." wincmd _"
|
|
||||||
|
|
||||||
" The following lines restore the layout so that the last file line is also
|
|
||||||
" the last window line. Sometimes, when a line is deleted, although the
|
|
||||||
" window size is exactly equal to the number of lines in the file, some of
|
|
||||||
" the lines are pushed up and we see some lagging '~'s.
|
|
||||||
let pres = getpos(".")
|
|
||||||
|
|
||||||
exe $
|
|
||||||
|
|
||||||
let _scr = &scrolloff
|
|
||||||
let &scrolloff = 0
|
|
||||||
|
|
||||||
normal! z-
|
|
||||||
|
|
||||||
let &scrolloff = _scr
|
|
||||||
|
|
||||||
call setpos(".", pres)
|
|
||||||
endfunction
|
|
||||||
"1}}}
|
|
||||||
|
|
||||||
" vim:ft=vim foldmethod=marker sw=2
|
|
30
vim/vimrc
30
vim/vimrc
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
set nocompatible " Use Vim defaults (much better!)
|
set nocompatible " Use Vim defaults (much better!)
|
||||||
set backspace=indent,eol,start " allow backspacing over everything
|
set backspace=indent,eol,start " allow backspacing over everything
|
||||||
set textwidth=0
|
set textwidth=79
|
||||||
set backup
|
set backup
|
||||||
set viminfo='20,\"50,f10
|
set viminfo='20,\"50,f10
|
||||||
set history=50
|
set history=50
|
||||||
|
@ -117,8 +117,8 @@ let NERDChristmasTree = 1
|
||||||
" """""""""""
|
" """""""""""
|
||||||
" BufExplorer
|
" BufExplorer
|
||||||
" """""""""""
|
" """""""""""
|
||||||
let g:bufExplorerSplitBelow=1
|
" let g:bufExplorerSplitBelow=1
|
||||||
let g:bufExplorerResize=1
|
" let g:bufExplorerResize=1
|
||||||
|
|
||||||
" """"""""""""""
|
" """"""""""""""
|
||||||
" NERD Commenter
|
" NERD Commenter
|
||||||
|
@ -141,7 +141,7 @@ nnoremap <silent> <Leader>x :set paste!<CR>
|
||||||
nnoremap <silent> <Leader>n :NERDTreeToggle<CR>
|
nnoremap <silent> <Leader>n :NERDTreeToggle<CR>
|
||||||
nnoremap <silent> <Leader>T :Tlist<CR>
|
nnoremap <silent> <Leader>T :Tlist<CR>
|
||||||
nnoremap <silent> <Leader>N :set number!<CR>
|
nnoremap <silent> <Leader>N :set number!<CR>
|
||||||
nnoremap <silent> <Leader>b :HSBufExplorer<CR>
|
" nnoremap <silent> <Leader>b :HSBufExplorer<CR>
|
||||||
|
|
||||||
nnoremap <silent> da "_dd
|
nnoremap <silent> da "_dd
|
||||||
|
|
||||||
|
@ -204,6 +204,28 @@ if has("autocmd")
|
||||||
autocmd FileReadPost *.plist call MyBinaryPlistReadPost() | let b:saveAsBinaryPlist = 0
|
autocmd FileReadPost *.plist call MyBinaryPlistReadPost() | let b:saveAsBinaryPlist = 0
|
||||||
autocmd BufWritePre,FileWritePre *.plist call MyBinaryPlistWritePre()
|
autocmd BufWritePre,FileWritePre *.plist call MyBinaryPlistWritePre()
|
||||||
autocmd BufWritePost,FileWritePost *.plist call MyBinaryPlistWritePost()
|
autocmd BufWritePost,FileWritePost *.plist call MyBinaryPlistWritePost()
|
||||||
|
" Plain text
|
||||||
|
autocmd BufNewFile,BufRead *.txt set ft=txt tw=78 pfn=:h10
|
||||||
|
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
""" iTerm 2 Custom cursor shape
|
||||||
|
if $TERM_PROGRAM == 'iTerm.app'
|
||||||
|
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
|
||||||
|
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
|
||||||
|
endif
|
||||||
|
|
||||||
|
if $TERM_PROGRAM == 'iTerm.app'
|
||||||
|
let &t_ti = &t_ti . "\e[?2004h"
|
||||||
|
let &t_te = "\e[?2004l" . &t_te
|
||||||
|
function XTermPasteBegin(ret)
|
||||||
|
set pastetoggle=<Esc>[201~
|
||||||
|
set paste
|
||||||
|
return a:ret
|
||||||
|
endfunction
|
||||||
|
map <expr> <Esc>[200~ XTermPasteBegin("i")
|
||||||
|
imap <expr> <Esc>[200~ XTermPasteBegin("")
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" User customizations are held in file ~/.vim/vimrc.local
|
" User customizations are held in file ~/.vim/vimrc.local
|
||||||
|
|
Loading…
Reference in New Issue