Vim Ctrlp 플러그인을 사용하여 한 프로젝트에서 특정 폴더를 무시할 수 있습니까?


17

빔 Ctrlp 플러그인은 특정 폴더 이름을 무시 전역하는 방법이있다. 예 :

let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$'

그러나 하나의 프로젝트에만 적용되는 무시 규칙이 있습니다. .gitignore파일 과 같은 것을 원합니다 .

전역 구성을 수정하지 않고 특정 프로젝트에서 특정 폴더를 무시하는 방법이 있습니까?


플러그인의 이슈 트래커를 사용해 보셨습니까?
romainl

답변:


20

사용자 정의 리스팅 명령 사용

Ctrlp를 사용하면 폴더의 파일 목록을 가져 오는 데 사용할 명령을 지정할 수 있습니다. 따라서 이름이 지정된 것을 제외 beets.txt하려면 다음을 수행하십시오.

let g:ctrlp_user_command = 'find %s -type f | grep -v "beets.txt"'

그것은 전 세계적이지만 대답을 향한 시작 : 자신의 쉘 명령을 제공하십시오.

또한 Ctrlp를 사용하면 마커가있는 여러 쉘 명령을 제공 할 수 있습니다. "루트 디렉토리에이 마커가 있으면이 명령을 사용하십시오"라는 의미입니다.

에서이 내용을 발견 :help ctrlp했으며 문제에 대한 저자의 의견에 따라 약간 수정되었습니다.

let g:ctrlp_user_command = {
  \ 'types': {
    \ 1: ['.git', 'cd %s && git ls-files --cached --exclude-standard --others'],
    \ 2: ['.hg', 'hg --cwd %s locate -I .'],
    \ },
  \ 'fallback': 'find %s -type f'
  \ }

" .git폴더 git ls-files...에 있으면을 .hg사용 hg --cwd...하고 그렇지 않으면을 사용하고 그렇지 않으면 일반을 사용하십시오 find."라는 의미입니다.

따라서 한 프로젝트에서 특정 폴더를 무시하려면 해당 폴더를 무시하는 명령을 고안 한 다음 해당 프로젝트에 고유 마커를 배치하여 Ctrlp가 특수 명령을 사용하도록하십시오 .

(제 경우에는 실제로에있는 파일을 무시하고 싶으 .gitignore므로 git ls-files위 의 명령이 저에게 효과적입니다.)


이 답변에 감사드립니다.
Denis

git -C % s ls-files --cached --exclude-standard-기타는 git에서 작동합니다.
Arunprasad Rajkumar

10

CtrlP에 Silver Searcher 백엔드를 사용하는 경우 (훨씬 빠름) .agignore파일을 프로젝트 디렉토리에 다음과 같은 형식으로 추가하십시오 .gitignore.

.git/
.hg/
.svn/

또는 전역 ~/.agignore파일을 유지 하십시오.

이것에 실버 검색기를 백엔드로 추가하십시오. .vimrc

let g:ctrlp_user_command = 'ag %s -l --nocolor --hidden -g ""'

1
이것을 게시 해 주셔서 감사합니다. 다른 데이터 포인트를 추가하려면 다음과 같이하십시오 if executable("ag") let g:ctrlp_user_command = 'ag %s -l --nocolor --depth 8 -g ""' endif . 깊이 제한은 홈 폴더에서 파일을 편집하는 동안 실수로 ctrl-p를 눌렀을 때 유용합니다. 숨겨진 플래그는 .git /의 파일을 포함한다는 것을 알았습니다.
Eric Hu

6

파일에서 의도적으로 추적되지 않은 파일을 지정합니다

.gitignore(Nathan grep 솔루션 기반) 과 같은 파일 로이 문제를 해결하기 위해 이름이 지정된 파일을 만들고 .ctrlpignore무시 해야하는 패턴을 줄로 구분하여 넣었습니다.

node_modules/
\.log$
...

그리고 내 ctrlp 구성 :

let g:ctrlp_user_command = 'find %s -type f | grep -v "`cat .ctrlpignore`"'

아마도 그 .gitignore자체는 ctrlp의 파일을 무시하는 데 사용될 수 있으며 거의 ​​동일한 작업을 수행하기 위해 새 파일을 만들 필요가 없습니다.


이 코드 조각을 추가했지만 전체 ctrlp 동작을 중단합니다. orderscontroller를 입력하면 실제 orders_controller.rb 파일이 아닌 _spec 파일 만 찾습니다.
jedi

1

으로 바그너 엔드 레데가 말했다, 별도의를 사용하는 것은 .ctrlpignore좋은 생각이 될 것입니다.

보다 강력하고 편리한 vim 설정은 다음과 같습니다.

let g:ctrlp_user_command = 'cd %s;
  \ commonfilter="\.(jpg|bmp|png|jar|7z|zip|tar|gz|tgz|bz)$";
  \ if [ ! -r ".ctrlpignore" ]; then
  \   find . -type f | grep -Evi "$commonfilter";
  \ else
  \   find . -type f | grep -vF "$(cat .ctrlpignore)" | grep -Evi "$commonfilter";
  \ fi'

.ctrlpignorectrlp에 의해 루트 디렉토리로 인식되는 모든 디렉토리에 넣을 수 있습니다. 다음은 예입니다. 모든 줄은./

vim ~/.ctrlpignore

./Desktop
./R
./.vim
./.local/lib
.....

노트 :

  1. grep -F예를 들어 패턴을 해석합니다. './ptmp'를 필터링하지 않으려는 경우 고정 문자열 인 './.tmp'. './.tmp'도 './.tmp2'를 필터링합니다. 잊어 버려 난 싫어\.

  2. g:ctrlp_custom_ignoreg:ctrlp_user_command설정되어 있으면 무시됩니다 . 더 복잡한 작업을 수행 할 수 있습니다.g:ctrlp_user_command

  3. 블랙리스트 대신 화이트리스트도 가능합니다. 별도의 스크립트로 구현하면 더욱 편리

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.