Bir projede belirli bir klasörü yok saymak için Vim Ctrlp eklentisini alabilir miyim?


17

Vim Ctrlp eklentisi küresel belli klasör adları göz ardı etmek bir yolu vardır. Örneğin:

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

Ancak, bir projeye özgü yok sayma kuralı var. Daha çok .gitignoredosya gibi bir şey istiyorum .

Genel yapılandırmamı değiştirmeden belirli bir projedeki belirli bir klasörü yok saymanın bir yolu var mı?


Eklentinin sorun izleyicisini denediniz mi?
romainl

Yanıtlar:


20

Özel listeleme komutu kullanma

Ctrlp, klasördeki dosyaların bir listesini almak için hangi komutu kullanacağınızı söylemenizi sağlar. Dolayısıyla beets.txt, adlandırılmış herhangi bir şeyi hariç tutmak istiyorsanız şunları yapabilirsiniz:

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

Bu küreseldir, ancak cevaba işaret etmeye başlar: kendi kabuk komutunuzu verin.

Daha da iyisi, Ctrlp işaretçileri olan birden fazla kabuk komutu sağlamanıza izin verir, yani "bu işaretçiyi kök dizinde görürseniz, bu komutu kullanın."

Bunu buldum :help ctrlpve yazarın bir konu hakkındaki yorumuna dayanarak biraz değiştirdim.

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'
  \ }

Bu şu anlama gelir: " .gitKlasörde görürseniz kullanın git ls-files.... Aksi takdirde, görürseniz .hgkullanın hg --cwd..., aksi takdirde normal kullanın find."

Bu nedenle, bir projedeki belirli bir klasörü yoksaymak için, o klasörü yok sayacak bir komut tasarlayın ve ardından özel komutunuzu burada kullanmak istediğiniz Ctrlp'ye izin vermek için o projeye benzersiz bir işaretleyici yerleştirin .

(Benim durumumda, aslında içinde bulunan dosyaları yoksaymak istedim .gitignore, bu yüzden git ls-filesyukarıdaki komut benim için çalışıyor.)


Bu harika, bu cevap için çok teşekkürler.
Denis

git -C% s ls-dosyaları --cached --exclude-standard - anneler git için çalışmalıdır.
Arunprasad Rajkumar

11

CtrlP için Silver Searcher arka ucunu kullanıyorsanız (ki bu çok daha hızlıdır), .agignoreproje dizininize aşağıdakilerle aynı formatta bir dosya eklemeniz yeterlidir .gitignore:

.git/
.hg/
.svn/

Alternatif olarak, global bir ~/.agignoredosya saklayın .

Silver Searcher'ı bununla arka uç olarak ekleyin. .vimrc

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

1
Bunu gönderdiğiniz için teşekkürler. Başka bir veri noktası eklemek için: Bunu uyarladım if executable("ag") let g:ctrlp_user_command = 'ag %s -l --nocolor --depth 8 -g ""' endif . Derinlik sınırı, ana klasörümdeki bir dosyayı düzenlerken yanlışlıkla ctrl-p tuşlarına basarsam kullanışlıdır. Gizli bayrağın .git /
Eric Hu

6

Bir dosyadaki kasıtlı olarak izlenmeyen dosyaları belirtir

Bunu .gitignore(Nathan grep çözümüne dayalı olarak) gibi bir dosyayla çözmek için , adında bir dosya oluşturdum .ctrlpignoreve yok sayılması gereken desenleri satırlarla ayırarak koydum:

node_modules/
\.log$
...

Ve benim ctrlp yapılandırmam:

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

Belki de .gitignorekendisi ctrlp'deki dosyaları görmezden gelmek için kullanılabilir, neredeyse aynı şeyi yapmak için yeni bir dosya oluşturmaya gerek yoktur.


Bu snippet'i ekledim ama overal ctrlp davranışını kırar, eğer orderscontroller yazarsam sadece _spec dosyaları bulur, gerçek orders_controller.rb dosyası yoktur.
jedi

1

As Wagner Andrade söyledi, ayrı kullanarak .ctrlpignoreiyi bir fikir olacaktır.

Daha sağlam ve kullanışlı bir vim ayarı şöyledir:

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 tarafından kök dizin olarak tanınacak herhangi bir dizine konabilir. İşte bir örnek, her satır./

vim ~/.ctrlpignore

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

Not:

  1. grep -Förneği yorumlayacaktır, ör. './.tmp', './ptmp' öğenizin filtrelenmesini istemiyorsanız sabit bir dize olarak. Hala bazı önemsiz hatalar var: './.tmp' de './.tmp2' filtreliyor. Unut gitsin sevmiyorum\.

  2. g:ctrlp_custom_ignoreg:ctrlp_user_commandayarlanırsa yoksayılır . Bunlar daha karmaşık bir şekilde yapılabilirg:ctrlp_user_command

  3. kara liste yerine beyaz liste de mümkündür. Ayrı bir komut dosyasında uygulanırsa daha uygun

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.