diff --git a/autoload/startify.vim b/autoload/startify.vim index 4f36cff..bc1b0ee 100644 --- a/autoload/startify.vim +++ b/autoload/startify.vim @@ -381,7 +381,8 @@ endfunction " Function: s:display_by_path {{{1 function! s:display_by_path(path_prefix, path_format) abort - let oldfiles = s:filter_oldfiles(a:path_prefix, a:path_format) + let oldfiles = call(get(g:, 'startify_enable_unsafe') ? 's:filter_oldfiles_unsafe' : 's:filter_oldfiles', + \ [a:path_prefix, a:path_format]) if !empty(oldfiles) if exists('s:last_message') @@ -418,10 +419,36 @@ function! s:filter_oldfiles(path_prefix, path_format) abort \ || !filereadable(absolute_path) \ || s:is_in_skiplist(absolute_path) \ || (exists('g:startify_bookmarks') && s:is_bookmark(absolute_path)) + \ || match(absolute_path, path_prefix) continue endif - if match(absolute_path, path_prefix) + let entry_path = fnamemodify(absolute_path, a:path_format) + let entries[absolute_path] = 1 + let counter -= 1 + let oldfiles += [[absolute_path, entry_path]] + endfor + + return oldfiles +endfun + +" Function: s:filter_oldfiles_unsafe {{{1 +function! s:filter_oldfiles_unsafe(path_prefix, path_format) abort + let path_prefix = '\V'. escape(a:path_prefix, '\') + let counter = s:numfiles + let entries = {} + let oldfiles = [] + + for fname in v:oldfiles + if counter <= 0 + break + endif + + let absolute_path = glob(fnameescape(fnamemodify(fname, ":p"))) + if empty(absolute_path) + \ || has_key(entries, absolute_path) + \ || s:is_in_skiplist(absolute_path) + \ || match(absolute_path, path_prefix) continue endif diff --git a/doc/startify.txt b/doc/startify.txt index 1547513..b954e0c 100644 --- a/doc/startify.txt +++ b/doc/startify.txt @@ -95,6 +95,7 @@ default values. |g:startify_custom_indices| |g:startify_disable_at_vimenter| |g:startify_enable_special| + |g:startify_enable_unsafe| |g:startify_files_number| |g:startify_list_order| |g:startify_relative_path| @@ -278,6 +279,27 @@ Example: let g:startify_enable_special = 1 < Show and . +------------------------------------------------------------------------------ + *g:startify_enable_unsafe* +> + let g:startify_enable_unsafe = 0 +< +Enable the option only in case you think Vim starts too slowly (because of +:Startify) or if you often edit files on remote filesystems. + +It's called unsafe because it improves the time :Startify needs to execute by +reducing the amount of syscalls to the underlying operating system, but +sacrifices the precision of shown entries. + +This could lead to inconsistences in the shown :Startify entries (e.g. the +same file could be shown twice, because one time file was opened via absolute +path and another time via symlink). + +Currently this option does this: + + - don't resolves symlinks (readlink(2)) + - don't check every file if it's readable (stat(2)) + - don't filter through the bookmark list ------------------------------------------------------------------------------ *g:startify_session_savevars*