1
0
Fork 0
mirror of synced 2024-12-25 00:03:20 -05:00

Update ctrlp.vim

This commit is contained in:
Kurtis Moxley 2022-05-19 20:31:06 +08:00
parent 25b4603328
commit 0eff17749f
5 changed files with 91 additions and 57 deletions

View file

@ -0,0 +1,13 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: ctrlpvim # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

View file

@ -95,7 +95,7 @@ let [s:pref, s:bpref, s:opts, s:new_opts, s:lc_opts] =
\ 'brief_prompt': ['s:brfprt', 0],
\ 'match_current_file': ['s:matchcrfile', 0],
\ 'match_natural_name': ['s:matchnatural', 0],
\ 'compare_lim': ['s:compare_lim', 3000],
\ 'compare_lim': ['s:compare_lim', 0],
\ 'bufname_mod': ['s:bufname_mod', ':t'],
\ 'bufpath_mod': ['s:bufpath_mod', ':~:.:h'],
\ 'formatline_func': ['s:flfunc', 's:formatline(v:val)'],
@ -330,7 +330,7 @@ fu! s:Open()
endf
fu! s:Close()
cal s:async_glob_abort()
cal s:async_glob_abort(0)
cal s:buffunc(0)
if winnr('$') == 1
bw!
@ -396,7 +396,7 @@ fu! ctrlp#files()
en
" Remove base directory
cal ctrlp#rmbasedir(g:ctrlp_allfiles)
if len(g:ctrlp_allfiles) <= s:compare_lim
if !s:compare_lim || len(g:ctrlp_allfiles) <= s:compare_lim
cal sort(g:ctrlp_allfiles, 'ctrlp#complen')
en
cal s:writecache(cafile)
@ -425,13 +425,17 @@ fu! s:CloseCustomFuncs()
en
endf
if has('patch-8.2-0995')
if has('patch-8.2-0995') && get(g:, 'ctrlp_use_readdir', 1)
fu! s:GlobPath(dirs, depth)
let entries = []
for e in split(a:dirs, ',')
sil let files = readdir(e, '1', {'sort': 'none'})
let dirs = substitute(a:dirs, '\\\([%# ]\)', '\1', 'g')
for e in split(dirs, ',')
try
let files = readdir(e, '1', {'sort': 'none'})
if !s:showhidden | cal filter(files, 'v:val[0] != "."') | en
let entries += map(files, 'e.s:lash.v:val')
cat
endt
endfo
let [dnf, depth] = [ctrlp#dirnfile(entries), a:depth + 1]
if &wig != '' | cal filter(dnf[1], 'glob(v:val) != ""') | en
@ -487,10 +491,12 @@ fu! s:async_glob_on_exit(...)
en
endf
fu! s:async_glob_abort()
fu! s:async_glob_abort(upd)
cal s:stop_job_if_exists()
cal s:stop_timer_if_exists()
if a:upd
cal s:ForceUpdate()
en
endf
fu! s:stop_timer_if_exists()
@ -750,6 +756,9 @@ fu! s:Render(lines, pat)
en
if s:mw_order == 'btt' | cal reverse(lines) | en
let s:lines = copy(lines)
if s:nolim == 0 && len(lines) > height
let lines = lines[:height-1]
en
if has('patch-8.1-0') && s:flfunc ==# 's:formatline(v:val)'
cal map(lines, function('s:formatline2', [s:curtype()]))
el
@ -1094,7 +1103,7 @@ fu! s:MapSpecs()
if !( exists('s:smapped') && s:smapped == s:bufnr )
" Correct arrow keys in terminal
if ( has('termresponse') && v:termresponse =~ "\<ESC>" )
\ || &term =~? '\vxterm|<k?vt|gnome|screen|linux|ansi|tmux|st(-[-a-z0-9]*)?(\:tc)?$'
\ || &term =~? '\vxterm|<k?vt|gnome|screen|linux|ansi|tmux|alacritty|st(-[-a-z0-9]*)?(\:tc)?$'
for each in ['\A <up>','\B <down>','\C <right>','\D <left>']
exe s:lcmap.' <esc>['.each
endfo
@ -1151,7 +1160,7 @@ fu! s:ToggleByFname()
endf
fu! s:ToggleType(dir)
cal s:async_glob_abort()
cal s:async_glob_abort(1)
let max = len(g:ctrlp_ext_vars) + len(s:coretypes) - 1
let next = s:walker(max, s:itemtype, a:dir)
cal ctrlp#setlines(next)
@ -1761,16 +1770,22 @@ fu! s:formatline2(ct, key, str)
let str .= printf(' %s', parts[3])
en
en
retu s:lineprefix.str
en
let cond = a:ct != 'buf' &&s:ispath && ( s:winw - 4 ) < s:strwidth(str)
let cond = s:ispath && ( s:winw - 4 ) < strchars(str)
retu s:lineprefix.( cond ? s:pathshorten(str) : str )
endf
if exists('*strchars') && exists('*strcharpart')
fu! s:pathshorten(str)
retu strcharpart(a:str, 0, 9).'...'.strcharpart(a:str, strchars(a:str) - s:winw + 16)
endf
el
fu! s:pathshorten(str)
retu matchstr(a:str, '^.\{9}').'...'
\ .matchstr(a:str, '.\{'.( s:winw - 16 ).'}$')
endf
en
fu! s:offset(lines, height)
let s:offset = s:mw_order == 'btt' ? ( a:height - s:res_count ) : 0
@ -2713,6 +2728,15 @@ fu! ctrlp#nosy()
retu !( has('syntax') && exists('g:syntax_on') )
endf
fu! s:hiupdate()
for [ke, va] in items(s:hlgrps)
let ke = 'CtrlP' . ke
if hlexists(ke)
exe 'hi link' ke va
en
endfo
endf
fu! ctrlp#hicheck(grp, defgrp)
if !hlexists(a:grp)
exe 'hi link' a:grp a:defgrp
@ -2846,6 +2870,7 @@ if has('autocmd')
au BufEnter ControlP cal s:checkbuf()
au BufLeave ControlP noa cal s:Close()
au VimLeavePre * cal s:leavepre()
au ColorScheme * cal s:hiupdate()
aug END
en

View file

@ -203,10 +203,14 @@ endf
fu! s:parseline(line)
let vals = matchlist(a:line,
\ '\v^([^\t]+)\t(.+)\t[?/]\^?(.{-1,})\$?[?/]\;\"\t(.+)\tline(no)?\:(\d+)')
\ '\v^([^\t]+)\t(.+)\t[?/]\^?(.{-1,})\$?[?/]\;\"\t(.+)\tline(no)?\:(\d+)\t?([^\t]*)')
if vals == [] | retu '' | en
let [bufnr, bufname] = [bufnr('^'.vals[2].'$'), fnamemodify(vals[2], ':p:t')]
if len(vals) > 7 && vals[7] != ''
retu vals[1].' '.vals[4].'|'.bufnr.':'.bufname.'|'.vals[6].'|'.vals[7].'| '.vals[3]
else
retu vals[1].' '.vals[4].'|'.bufnr.':'.bufname.'|'.vals[6].'| '.vals[3]
en
endf
fu! s:syntax()
@ -249,7 +253,7 @@ endf
fu! ctrlp#buffertag#accept(mode, str)
let vals = matchlist(a:str,
\ '\v^[^\t]+\t+[^\t|]+\|(\d+)\:[^\t|]+\|(\d+)\|\s(.+)$')
\ '\v^[^\t]+\t+[^\t|]+\|(\d+)\:[^\t|]+\|(\d+)%(\|[^\t|]+)?\|\s(.+)$')
let bufnr = str2nr(get(vals, 1))
if bufnr
cal ctrlp#acceptfile(a:mode, bufnr)

View file

@ -241,22 +241,8 @@ OPTIONS *ctrlp-options*
<
注意: 当命令使用 |g:ctrlp_user_command| 定义时该选项无效。
*'ctrlp-wildignore'*
你可以使用Vim的 |'wildignore'| 来从结果集中排序文件或目录。
例子: >
" 排除版本控制文件
set wildignore+=*/.git/*,*/.hg/*,*/.svn/* " Linux/MacOSX
set wildignore+=*\\.git\\*,*\\.hg\\*,*\\.svn\\* " Windows ('noshellslash')
<
注意 #1: 每个目录设置前的字符 `*/` 是必须的。
注意 #2: |wildignore| 影响 |expand()| |globpath()| 和 |glob()| 的结果,这些函数被很
多插件用来在系统中执行查找。(例如和版本控制系统有关的插件在查找.git/、.hg/等,
一些其他插件用来在Windows上查找外部的*.exe工具所以要修改 |wildignore| 时请先
考虑清楚。
*'g:ctrlp_custom_ignore'*
作为对 |'wildignore'| 和 |g:ctrlp_show_hidden| 的补充,用来设置你只是想在CtrlP中隐藏的文件和目录。使用正
除了 |g:ctrlp_show_hidden|你可以用这个选项设置你想在CtrlP中隐藏的文件和目录。使用正
则表达式来指定匹配模式: >
let g:ctrlp_custom_ignore = ''
<
@ -274,9 +260,7 @@ OPTIONS *ctrlp-options*
\ 'func': 'some#custom#match_function'
\ }
<
注意 #1: 默认情况下, |wildignore| 和 |g:ctrlp_custom_ignore| 只在 |globpath()| 被用
来扫描文件的情况下使用,这样这些选项在那些使用 |g:ctrlp_user_command| 定义的命
令中不会生效。
注意 #1: |g:ctrlp_custom_ignore| 在已经使用 |g:ctrlp_user_command| 的时候不会生效。
注意 #2: 当改变选项的变量类型时,记得先 |:unlet| 或者重启Vim来避免这个错误
"E706: Variable type mismatch" 。
@ -285,6 +269,9 @@ OPTIONS *ctrlp-options*
自动加载的函数。函数必须接受两个参数,要匹配的条目和接受的类型,类型可以是目
录、文件和链接。如果条目被忽略函数需要返回1反之返回0。
注意 #4: 如果设置 |g:ctrlp_use_readdir| 为0你可以使用 Vim 的 |'wildignore'|
来将文件和目录排除出搜索结果。
*'g:ctrlp_max_files'*
扫描文件的最大数量设置为0时不进行限制: >
let g:ctrlp_max_files = 10000

View file

@ -240,23 +240,8 @@ Set this to 1 if you want CtrlP to scan for dotfiles and dotdirs: >
Note: does not apply when a command defined with |g:ctrlp_user_command| is
being used.
*'ctrlp-wildignore'*
You can use Vim's |'wildignore'| to exclude files and directories from the
results.
Examples: >
" Excluding version control directories
set wildignore+=*/.git/*,*/.hg/*,*/.svn/* " Linux/MacOSX
set wildignore+=*\\.git\\*,*\\.hg\\*,*\\.svn\\* " Windows ('noshellslash')
<
Note #1: the `*/` in front of each directory glob is required.
Note #2: |wildignore| influences the result of |expand()|, |globpath()| and
|glob()| which many plugins use to find stuff on the system (e.g. VCS related
plugins look for .git/, .hg/,... some other plugins look for external *.exe
tools on Windows). So be a little mindful of what you put in your |wildignore|.
*'g:ctrlp_custom_ignore'*
In addition to |'wildignore'| and |g:ctrlp_show_hidden|, use this for files
In addition to |g:ctrlp_show_hidden|, use this for files
and directories you want only CtrlP to not show. Use regexp to specify the
patterns: >
let g:ctrlp_custom_ignore = ''
@ -275,8 +260,7 @@ Examples: >
\ 'func': 'some#custom#match_function'
\ }
<
Note #1: by default, |wildignore| and |g:ctrlp_custom_ignore| only apply when
|globpath()| is used to scan for files, thus these options do not apply when a
Note #1: |g:ctrlp_custom_ignore| does not apply when a
command defined with |g:ctrlp_user_command| is being used.
Note #2: when changing the option's variable type, remember to |:unlet| it
@ -288,6 +272,9 @@ recommended here. The function must take 2 parameters, the item to match and
its type. The type will be "dir", "file", or "link". The function must return
1 if the item should be ignored, 0 otherwise.
Note #4: when |g:ctrlp_use_readdir| is set to 0, you can also use Vim's |'wildignore'|
to exclude files and directories.
*'g:ctrlp_max_files'*
The maximum number of files to scan, set to 0 for no limit: >
let g:ctrlp_max_files = 10000
@ -846,6 +833,13 @@ Example: >
*'g:ctrlp_brief_prompt'*
When this is set to 1, the <bs> on empty prompt exit CtrlP.
*'g:ctrlp_use_readdir'*
Unlike kien/ctrlp.vim, ctrlpvim/ctrlp.vim uses readdir() instead of globpath()
for speed. Set this option to 0 if you want to revert to the original
behavior.
Example: >
let g:ctrlp_use_readdir = 0
<
*ctrlp-default-value*
Otherwise, you can use below to change default value.
Example: >
@ -853,6 +847,17 @@ Example: >
This is possible to change no-limit mode for match type "path".
*ctrlp_compare_lim*
If your search directory has more number of files than this limit, no sorting
will be performed for the first readout. You can improve CtrlP performance by
setting this to a proper value, but no sorting on the first readout can reduce
the quality of fuzzy finding results.
Example:
let g:ctrlp_compare_lim = 100
Set the value to 0 for unlimited sorting. Default is 0.
===============================================================================
COMMANDS *ctrlp-commands*