2017-03-11 7 views
7

내가 ctrlpag 사용gt repo 외부의 ag와 올바르게 작동하도록 ctrlp를 구성하는 방법은 무엇입니까? <a href="https://github.com/kimlai/dotfiles/blob/master/vimrc" rel="noreferrer">here</a>을 제안

if executable('ag') 
    set grepprg=ag\ --nogroup\ --nocolor 
    let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""' 
    let g:ctrlp_use_caching = 0 
else 
    let g:ctrlp_custom_ignore = '\.git$\|\.hg$\|\.svn$' 
    let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files . --cached --exclude-standard --others'] 
endif 

나는 그것을 내부 .git 폴더와 프로젝트 폴더에서 정력을 실행 해요 경우는 잘 작동합니다. 그러나 git 프로젝트의 루트가 아닌 디렉토리에서 Vim을 실행할 때마다 빈 파일 목록 (결과 없음)이 표시됩니다. 다음 폴더 계층 구조와, 명확히하기 위해 : 나는 같은 디렉토리에서 명령 줄을 실행할 때

Proj1/ # ctrlp works; finds foo.js and bar.js (unless they are .gitignored) 
    .git/ 
    bin/ 
    foo.js 
    bar.js 

Proj2/ # ctrlp doesn't work; has empty file list 
    bin/ 
    foo.py 
    bar.py 

실제 ag 명령, ag %s -l --nocolor -g ""이 잘 작동 (그것은 모든 파일을 찾습니다).

map <c-p> :CtrlP<cr> 
map <c-t> :CtrlPTag<cr> 
let g:ctrlp_dotfiles   = 1 
let g:ctrlp_show_hidden   = 1 
let g:ctrlp_cmd     = 'CtrlPMixed'  " search anything (in files, buffers and MRU files at the same time.) 
let g:ctrlp_cmd     = 'CtrlP' 
let g:ctrlp_working_path_mode = 'ra'    " search for nearest ancestor like .git, .hg, and the directory of the current file 
let g:ctrlp_match_window  = 'top,order:ttb' 
let g:ctrlp_max_height   = 12     " maxiumum height of match window 
let g:ctrlp_switch_buffer  = 'et'    " jump to a file if it's open already 
let g:ctrlp_use_caching   = 1     " enable caching 
let g:ctrlp_clear_cache_on_exit = 0     " speed up by not removing clearing cache evertime 
let g:ctrlp_mruf_max   = 250    " number of recently opened files 

if exists('g:ctrlp_user_command') 
    unlet g:ctrlp_user_command 
end 

if exists('g:ctrlp_custom_ignore') 
    unlet g:ctrlp_custom_ignore 
end 

if executable('ag') 
    set grepprg=ag\ --nogroup\ --nocolor 
    let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'" 
    let g:ctrlp_use_caching = 0 
else 
    let g:ctrlp_custom_ignore = '\.git$\|\.hg$\|\.svn$' 
    let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files . --cached --exclude-standard --others'] 
endif 

let g:ctrlp_prompt_mappings = { 
    \ 'AcceptSelection("e")': ['<c-t>'], 
    \ 'AcceptSelection("t")': ['<cr>', '<2-LeftMouse>'], 
    \ 'ToggleType(1)':  ['<c-u>', '<c-up>'], 
    \ 'ToggleType(-1)':  ['<c-y>', '<c-down>'], 
    \ 'PrtExit()':   ['<c-l>', '<esc>', '<c-c>', '<c-g>'], 
    \ 'PrtSelectMove("j")': ['<c-n>', '<down>'], 
    \ 'PrtSelectMove("k")': ['<c-p>', '<up>'], 
    \ 'PrtHistory(-1)':  ['<c-j>'], 
    \ 'PrtHistory(1)':  ['<c-k>'], 
    \ } 

let g:ctrlp_buftag_types = { 
    \ 'coffee'  : '--language-force=coffee --coffee-types=cmfvf' 
\ } 

가 어떻게 ctrlp/ag는 자식의 repo의 외부에서 제대로 작동하려면 얻을 수 있습니다 :

은 여기 내 ctrlp 설정의 전체입니까?

+0

질문의 첫 번째 줄에 올바른 링크를 제공 했습니까? 나는 그것과 관련된 어떤 것도 볼 수 없다. – yolenoyer

+0

죄송합니다 - 링크가 업데이트되었습니다. 약간 다른 'ag' 명령어를 사용하는 [비슷한 또 다른 vimrc] (https://github.com/skwp/dotfiles/blob/master/vim/settings/ctrlp.vim) 작동하지 않습니다). – Sasgorilla

+0

': echo executable ('ag')'로'1'을 얻습니까? – Tacahiroy

답변

3

PEBCAK. CtrlPAg은 모두 그들이하는 일을합니다. 나는 내 홈 디렉토리에 .git 폴더를 가지고 있는데, 여기에는 도트 파일과 몇 가지 다른 확률과 끝이있다. .gitignore은 다른 것들 중에서도 ~/Documents/을 무시하도록 설정됩니다. 따라서 ~/Documents/의 하위 폴더에서 CtrlP을 실행할 때마다 파일을 찾지 못합니다 (홈 디렉토리 git repo 내부에 있기 때문에 모든 파일이 무시됩니다). 이것이 CtrlP이 비어있는 이유입니다. ~/Documents/ 외부에서 실행하면 예상대로 작동합니다.

그러나 홈 디렉토리의 .git repo가 ​​ag의 하위 폴더에있는 명령 줄에서 ~/Documents/ 인 이유는 아직 확실하지 않습니다. Vim에서 CtrlP으로 만 발생합니다. (다시 말하자면, CtrlPag %s -l --no-color -g "" 명령을 사용하고 있음을 확인했습니다.) 그 어떤 생각도 환영합니다. 또한 내 홈 디렉토리에서 git repo를 제거하는 것 이외에는 문제를 해결할 방법이 확실하지 않습니다. 아마도 ~의 dotfiles를 git-protected dotfiles 디렉토리에 하드 링크해야합니다.

0

게시자가 게시 한 설정으로 Git 저장소 외부에있는 경우 ctrlp에서 파일을 찾지 못합니다.

다음 설정을 사용하면 ctrlp가 git ls-files을 사용하여 Git 저장소에있는 경우 파일 목록을 검색합니다. 그렇지 않으면 ctrlp는 ag을 사용합니다.

let g:ctrlp_user_command = { 
    \ 'types': { 
     \ 1: ['.git', 'cd %s && git ls-files'] 
     \ }, 
    \ 'fallback': 'ag %s -l --nocolor -g ""' 
    \ } 

자세한 내용은 :h g:ctrlp_user_command을 참조하십시오.

+0

나는 나의 초기 질문이 혼란 스러울 수도 있다고 생각한다. CtrlP는 작업 디렉토리가 실제'.git /'폴더 내부에서가 아니라'.git /'폴더 안에있는 프로젝트 폴더 일 때 올바르게 작동합니다. 즉, 내 프로젝트가 자식을 사용하는 경우 CtrlP가 작동합니다. 그렇지 않은 경우, 그렇지 않습니다.희망을 갖고이를 명확히하기 위해 질문을 편집했습니다. – Sasgorilla

+0

': echo g : ctrlp_user_command'는 무슨 뜻입니까? 나는 'ag % s ...'라고 생각하지만, – Tacahiroy

+0

': echo g : ctrlp_user_command'는 예상되는 결과를 출력합니다 :'ag % s -l --no-color -g ""'(작동하고 깨진 경우 모두). – Sasgorilla