diff --git a/GetLatest/GetLatestVimScripts.dat b/GetLatest/GetLatestVimScripts.dat index 110e2bf..a641808 100644 --- a/GetLatest/GetLatestVimScripts.dat +++ b/GetLatest/GetLatestVimScripts.dat @@ -1,7 +1,7 @@ ScriptID SourceID Filename -------------------------- ### plugins -3619 15858 buffergator +3619 15879 buffergator 102 13435 DirDiff.vim 1984 13961 :AutoInstall: FuzzyFinder 311 7645 grep.vim diff --git a/doc/buffergator.txt b/doc/buffergator.txt index 13c97f9..0af3d3e 100644 --- a/doc/buffergator.txt +++ b/doc/buffergator.txt @@ -72,9 +72,9 @@ The following key mappings are available when in the viewer. ------------------------------------------------------------------------------- Catalog Management~ -s Cycle through sort regimes. -i Cycle through display regimes (alternate). -u Update (rebuild/refresh) index. +cs Cycle through sort regimes. +cd Cycle through display regimes (alternate). +r Update (rebuild/refresh) index. d Delete the selected buffer. D Unconditionally delete the selected buffer. x Wipe the selected buffer. @@ -84,63 +84,33 @@ q Quit the index/catalog window. ------------------------------------------------------------------------------- Open Selected Buffer~ - Switch focus to the previous window and go to the current - entry. If "g:buffergator_autodismiss_on_select" is True, - then the catalog viewer is closed; otherwise it is kept - open. +The following keys all open the currently-selected buffer and switch focus to +it. The catalog buffer will be closed if 'g:buffergator_autodismiss_on_select' +evaluates to true; otherwise it will be kept open. + +, o Open the currently-selected buffer in previous window. +s Open the currently-selected buffer in a new vertical + split. +i Open the currently-selected buffer in a new split. +t Open the currently-selected buffer in a new tab page. ------------------------------------------------------------------------------- -Preview Selected Buffer Without Leaving the Catalog Viewer~ +Preview Selected Buffer~ The following keys all open the currently-selected buffer, but retain focus on the catalog viewer. -po, . Preview the currently-selected buffer in the previous - window, keeping focus on the catalog. -ps Preview the currently-selected buffer is a new split, - keeping focus on the catalog. -pv Preview the currently-selected buffer is a new vertical - split, keeping focus on the catalog. -pt Preview the currently-selected buffer is a new tab - page, keeping focus on the catalog. +O, go Preview the currently-selected buffer in the previous + window. +S, gs Preview the currently-selected buffer is a new split. +V, gv Preview the currently-selected buffer is a new vertical + split +T Preview the currently-selected buffer is a new tab + page. , Go to the next buffer entry and preview it in the previous window. , Go to the previous buffer entry and preview it in the previous window. - -------------------------------------------------------------------------------- -Open Selected Buffer Without Closing the Catalog Viewer~ - -The following keys all open the currently-selected buffer and switch focus to -it, but keep the catalog viewer open. - -o Keeping the catalog viewer open, switch focus to the - previous window and go to the currently-selected buffer - (as if "g:buffergator_autodismiss_on_select" is 0). -ws Keeping the catalog viewer open, split the previous window, - switch focus, and go to the currently-selected buffer. -wv Keeping the catalog viewer open, split the previous window - vertically, switch focus, and go to the currently-selected - buffer. -t Keeping the catalog viewer open, open the current selected - in a new tab page. - -------------------------------------------------------------------------------- -Open Selected Buffer and Close the Catalog Viewer~ - -The following keys all open the currently-selected buffer and switch focus to -it, closing the catalog viewer at the same time. - -O Close catalog viewer and go to the currently-selected - buffer (as if "g:buffergator_autodismiss_on_select" - is 1). -wS Close the catalog viewer, split the previous window - and go to the currently-selected buffer. -wV Close the catalog viewer, split the previous window - vertically and go to the currently-selected buffer. -T Close the catalog viewer and open the currently-selected - buffer in a new tab page. - ------------------------------------------------------------------------------- Window Control~ @@ -181,8 +151,10 @@ g:buffergator_sort_regime~ Default: "bufnum" Sets the default sort regime for buffer listing: "bufnum" : sort by buffer number [default] - "basename": sort by buffer file basename + "basename": sort by buffer file basename (followed by directory) "filepath": sort by full buffer filepath + "extension": sort by buffer filename extension (followed by full + filepath) g:buffergator_display_regime~ Default: "basename" diff --git a/plugin/buffergator.vim b/plugin/buffergator.vim index c1c285a..00be22b 100644 --- a/plugin/buffergator.vim +++ b/plugin/buffergator.vim @@ -94,10 +94,11 @@ let s:buffergator_viewport_split_modes = { " Catalog Sort Regimes {{{2 " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -let s:buffergator_catalog_sort_regimes = ['basename', 'filepath', 'bufnum'] +let s:buffergator_catalog_sort_regimes = ['basename', 'filepath', 'extension', 'bufnum'] let s:buffergator_catalog_sort_regime_desc = { - \ 'basename' : ["basename", "by basename"], + \ 'basename' : ["basename", "by basename (followed by directory)"], \ 'filepath' : ["filepath", "by (full) filepath"], + \ 'extension' : ["ext", "by extension (followed by full filepath)"], \ 'bufnum' : ["bufnum", "by buffer number"], \ } let s:buffergator_default_catalog_sort_regime = "bufnum" @@ -107,7 +108,7 @@ let s:buffergator_default_catalog_sort_regime = "bufnum" " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ let s:buffergator_catalog_display_regimes = ['basename', 'filepath', 'bufname'] let s:buffergator_catalog_display_regime_desc = { - \ 'basename' : ["basename", "basename"], + \ 'basename' : ["basename", "basename (followed by directory)"], \ 'filepath' : ["filepath", "full filepath"], \ 'bufname' : ["bufname", "buffer name"], \ } @@ -342,6 +343,17 @@ function! s:_compare_dicts_by_filepath(m1, m2) endif endfunction +" comparison function used for sorting buffers catalog by extension +function! s:_compare_dicts_by_extension(m1, m2) + if a:m1["extension"] < a:m2["extension"] + return -1 + elseif a:m1["extension"] > a:m2["extension"] + return 1 + else + return s:_compare_dicts_by_filepath(a:m1, a:m2) + endif +endfunction + " comparison function used for sorting buffers catalog by basename function! s:_compare_dicts_by_basename(m1, m2) return s:_compare_dicts_by_value(a:m1, a:m2, "basename") @@ -441,6 +453,7 @@ function! s:NewCatalogViewer() let l:info["filepath"] = fnamemodify(l:info["bufname"], ":p") let l:info["basename"] = fnamemodify(l:info["bufname"], ":t") let l:info["parentdir"] = fnamemodify(l:info["bufname"], ":p:h") + let l:info["extension"] = fnamemodify(l:info["bufname"], ":e") call add(self.buffers_catalog, l:info) " let l:buffers_info[l:info[l:key]] = l:info endfor @@ -608,49 +621,88 @@ function! s:NewCatalogViewer() function! l:catalog_viewer.setup_buffer_keymaps() dict """" Disabling of unused modification keys - for key in ["p", "P", "C", "x", "X", "r", "R", "i", "I", "a", "A", "D", "S", "U"] + for key in [".", "p", "P", "C", "x", "X", "r", "R", "i", "I", "a", "A", "D", "S", "U"] try execute "nnoremap " . key . " " catch // endtry endfor - """" Catalog management - noremap s :call b:buffergator_catalog_viewer.cycle_sort_regime() - noremap i :call b:buffergator_catalog_viewer.cycle_display_regime() - noremap u :call b:buffergator_catalog_viewer.rebuild_catalog() - noremap q :call b:buffergator_catalog_viewer.close() - noremap d :call b:buffergator_catalog_viewer.delete_target(0, 0) - noremap D :call b:buffergator_catalog_viewer.delete_target(0, 1) - noremap x :call b:buffergator_catalog_viewer.delete_target(1, 0) - noremap X :call b:buffergator_catalog_viewer.delete_target(1, 1) + if !exists("g:buffergator_use_new_keymap") || !g:buffergator_use_new_keymap - " open target - noremap :call b:buffergator_catalog_viewer.visit_target(!g:buffergator_autodismiss_on_select, 0, "") + """" Catalog management + noremap cs :call b:buffergator_catalog_viewer.cycle_sort_regime() + noremap cd :call b:buffergator_catalog_viewer.cycle_display_regime() + noremap r :call b:buffergator_catalog_viewer.rebuild_catalog() + noremap q :call b:buffergator_catalog_viewer.close() + noremap d :call b:buffergator_catalog_viewer.delete_target(0, 0) + noremap D :call b:buffergator_catalog_viewer.delete_target(0, 1) + noremap x :call b:buffergator_catalog_viewer.delete_target(1, 0) + noremap X :call b:buffergator_catalog_viewer.delete_target(1, 1) - " show target line in other window, keeping catalog open and in focus - noremap . :call b:buffergator_catalog_viewer.visit_target(1, 1, "") - noremap po :call b:buffergator_catalog_viewer.visit_target(1, 1, "") - noremap ps :call b:buffergator_catalog_viewer.visit_target(1, 1, "sb") - noremap pv :call b:buffergator_catalog_viewer.visit_target(1, 1, "vert sb") - noremap pt :call b:buffergator_catalog_viewer.visit_target(1, 1, "tab sb") - noremap :call b:buffergator_catalog_viewer.goto_index_entry("n", 1, 1) - noremap :call b:buffergator_catalog_viewer.goto_index_entry("p", 1, 1) - noremap :call b:buffergator_catalog_viewer.goto_index_entry("p", 1, 1) - noremap :call b:buffergator_catalog_viewer.goto_index_entry("n", 1, 1) - noremap :call b:buffergator_catalog_viewer.goto_index_entry("p", 1, 1) + """"" Selection: show target and switch focus + noremap :call b:buffergator_catalog_viewer.visit_target(!g:buffergator_autodismiss_on_select, 0, "") + noremap o :call b:buffergator_catalog_viewer.visit_target(!g:buffergator_autodismiss_on_select, 0, "") + " gryf: let's keep it stright: s should h split, v should vertical + " split + noremap s :call b:buffergator_catalog_viewer.visit_target(!g:buffergator_autodismiss_on_select, 0, "sb") + noremap v :call b:buffergator_catalog_viewer.visit_target(!g:buffergator_autodismiss_on_select, 0, "vert sb") + noremap t :call b:buffergator_catalog_viewer.visit_target(!g:buffergator_autodismiss_on_select, 0, "tab sb") - " go to target line in other window, keeping catalog open - noremap o :call b:buffergator_catalog_viewer.visit_target(1, 0, "") - noremap ws :call b:buffergator_catalog_viewer.visit_target(1, 0, "sb") - noremap wv :call b:buffergator_catalog_viewer.visit_target(1, 0, "vert sb") - noremap t :call b:buffergator_catalog_viewer.visit_target(1, 0, "tab sb") + """"" Preview: show target , keeping focus on catalog + noremap O :call b:buffergator_catalog_viewer.visit_target(1, 1, "") + noremap go :call b:buffergator_catalog_viewer.visit_target(1, 1, "") + noremap S :call b:buffergator_catalog_viewer.visit_target(1, 1, "sb") + noremap gs :call b:buffergator_catalog_viewer.visit_target(1, 1, "sb") + noremap V :call b:buffergator_catalog_viewer.visit_target(1, 1, "vert sb") + noremap gv :call b:buffergator_catalog_viewer.visit_target(1, 1, "vert sb") + noremap T :call b:buffergator_catalog_viewer.visit_target(1, 1, "tab sb") + noremap :call b:buffergator_catalog_viewer.goto_index_entry("n", 1, 1) + noremap :call b:buffergator_catalog_viewer.goto_index_entry("p", 1, 1) + noremap :call b:buffergator_catalog_viewer.goto_index_entry("p", 1, 1) + noremap :call b:buffergator_catalog_viewer.goto_index_entry("n", 1, 1) + noremap :call b:buffergator_catalog_viewer.goto_index_entry("p", 1, 1) - " open target line in other window, closing catalog - noremap O :call b:buffergator_catalog_viewer.visit_target(0, 0, "") - noremap wS :call b:buffergator_catalog_viewer.visit_target(0, 0, "sb") - noremap wV :call b:buffergator_catalog_viewer.visit_target(0, 0, "vert sb") - noremap T :call b:buffergator_catalog_viewer.visit_target(0, 0, "tab sb") + else + + """" Catalog management + noremap s :call b:buffergator_catalog_viewer.cycle_sort_regime() + noremap i :call b:buffergator_catalog_viewer.cycle_display_regime() + noremap u :call b:buffergator_catalog_viewer.rebuild_catalog() + noremap q :call b:buffergator_catalog_viewer.close() + noremap d :call b:buffergator_catalog_viewer.delete_target(0, 0) + noremap D :call b:buffergator_catalog_viewer.delete_target(0, 1) + noremap x :call b:buffergator_catalog_viewer.delete_target(1, 0) + noremap X :call b:buffergator_catalog_viewer.delete_target(1, 1) + + " open target + noremap :call b:buffergator_catalog_viewer.visit_target(!g:buffergator_autodismiss_on_select, 0, "") + + " show target line in other window, keeping catalog open and in focus + noremap . :call b:buffergator_catalog_viewer.visit_target(1, 1, "") + noremap po :call b:buffergator_catalog_viewer.visit_target(1, 1, "") + noremap ps :call b:buffergator_catalog_viewer.visit_target(1, 1, "sb") + noremap pv :call b:buffergator_catalog_viewer.visit_target(1, 1, "vert sb") + noremap pt :call b:buffergator_catalog_viewer.visit_target(1, 1, "tab sb") + noremap :call b:buffergator_catalog_viewer.goto_index_entry("n", 1, 1) + noremap :call b:buffergator_catalog_viewer.goto_index_entry("p", 1, 1) + noremap :call b:buffergator_catalog_viewer.goto_index_entry("p", 1, 1) + noremap :call b:buffergator_catalog_viewer.goto_index_entry("n", 1, 1) + noremap :call b:buffergator_catalog_viewer.goto_index_entry("p", 1, 1) + + " go to target line in other window, keeping catalog open + noremap o :call b:buffergator_catalog_viewer.visit_target(1, 0, "") + noremap ws :call b:buffergator_catalog_viewer.visit_target(1, 0, "sb") + noremap wv :call b:buffergator_catalog_viewer.visit_target(1, 0, "vert sb") + noremap t :call b:buffergator_catalog_viewer.visit_target(1, 0, "tab sb") + + " open target line in other window, closing catalog + noremap O :call b:buffergator_catalog_viewer.visit_target(0, 0, "") + noremap wS :call b:buffergator_catalog_viewer.visit_target(0, 0, "sb") + noremap wV :call b:buffergator_catalog_viewer.visit_target(0, 0, "vert sb") + noremap T :call b:buffergator_catalog_viewer.visit_target(0, 0, "tab sb") + + endif " other noremap A :call b:buffergator_catalog_viewer.toggle_zoom()