2011-02-16 11 views
49

dosyasına görmüyorum. Ben ctags ile birlikte komut satırında dosya oluşturmak:Vim: Zorluk ctags kurma. Altdizinlerde Kaynak I (coşkulu) bugün Vim üzerinde ctags ile kurulum almaya çalışıyorum ve düzgün çalışması için alma zorluğu yaşıyorum etiketleri proje kökü

cd myproj 
ctags -R 

Bu myproj kök etiketleri dosyasını koyar. Ancak, Vim sadece kökünde bulunan kaynak üzerinde çalışırken bu etiket dosyasından okuyormuş gibi görünüyor. Ben <C-]> kullanan bir etiket atlamak için çalışırsanız ben, daha derin dizinlere gezinirken, ben alıyorum:

E433: No tags file 
E426: tag not found: MyClassName 

Ben MyClassName etiketleri dosyasında bir etiket var doğrulandıktan, bu Vim değil sadece var bak. Birisi, Vim'in kök etiketi dosyalarını referans gösterecek şekilde nasıl yapılandırılacağını açıklayabilir mi?

Teşekkürler.

cevap

98
set tags=tags;/ 

Bu, geçerli dosyalar klasör dosyasını kontrol edecek ve bir dizini kök klasöre kadar devam ettirecektir. SO, projenizdeki herhangi bir alt klasörde olabilir ve etiket dosyalarını bulabileceksiniz. Her proje için bir etiket dosyası oluşturmak Eğer farklı makinelerde genelinde .vimrc paylaşımı bunu

+0

Bu, mükemmel çalışır. Teşekkürler. – Thomas

+2

Diğer etiketler dosyanız varsa, 'set tags + = tags; /' –

+25

Burada olursanız, benim gibi, 'tag'lar /', ';/'sonek, vim'i yönlendirir. Bu durumda, durdurma dizinine kadar olan etiketleri içeren dizinden yukarı doğru bir arama. Eğer ev dizini stop-directory olarak kullanmak isterseniz, 'set tags + = tags; ~' veya 'set tags + = tags; $ HOME' kullanın. Ya da proje ağacınızın üst dizinini durma dizini olarak kullanabilirsiniz. (Bkz. “Yarı-kolonun anlaşılması için dosya arama”.) Ayrıca, etiket dosyasının aranmasının autochdir tarafından etkileneceğini unutmayın. .vimrc 'set tags =./Tags,./TAGS, tags; ~, TAGS; ~ –

14

etiket dosyayı aramak için Vim anlatmak için bir seçenek yoktur. yardımından

" search first in current directory then file directory for tag file 
set tags=tags,./tags 

Özü:

aşağıdaki yapılandırmayı kullanmak ''

bir etiket dosya adı "./" ile başlar geçerli dosyayı yolu ile değiştirilir. Bu sayede mevcut dosya (olursa olsun geçerli dizin nedir) 'dir dizinde bir etiket dosyasını kullanmak mümkün kılar. "./" ifadesinin kullanıldığı fikri, önce hangi etiket dosyasının arandığını tanımlayabilmenizdir: geçerli dizininde ("etiketler,./Etiketler") veya geçerli dosyanın ("./tags") dizininde etiketleri ").

Örneğin

: . Set etiketleri =/etiketleri, etiketler,/home/user/

commontags Ve ben tags dosyası oluşturulur üst proje dizininde benim geçerli çalışma dizini tutun.

Etiketlerinizi içeren dizine gitmek için :pwd ve ardından :cd myproj (Vim içinde) öğesini kullanın.

etiketleri yolunda daha fazla bilgi için :help tags-option bakınız.

Sorun şu ki, yanlış dizinde ya da tags seçeneğiniz düzgün ayarlanmamış olabilir.

+0

Bu, bir çok şeyi açıklar. Teşekkür ederim. Diğer yanıtı yalnızca doğru olanı kabul ettim çünkü kurulumumda, geçerli çalışma dizini düzenlediğim her arabelleğe eşleşiyor. Yani kök dizinindeki etiketleri bulmak için dizin yapısına atlamak daha pratiktir. – Thomas

1

, sen bu modeli hoşunuza gidebilir:

let repohome=substitute($REPO_HOME, "\/", "\\\\/", "g")       
let &tags=substitute(expand("%:p:h"), "\\(".repohome."/.\\{-}\/\\).*", "\\1tags", "") 

Daha sonra çevre değişkeni $ REPO_HOME ayarlamak zorunda kalacak senin sonunda boşluk olmadan ana repo dizinine için .bashrc (örn/home/<yourusername>/repos) ve otomatik olarak 1 $ gibi bir derinlikte $ REPO_HOME alt dizininde bir etiket dosyası arar. /home/<yourusername>/repos/myproj/tags.

1
#!/bin/sh 

FREEZE_NAME=/* Give some version number */ 

mkdir $HOME/ctags/$FREEZE_NAME 

V1=/* Software Path */ 

find $V1 -name "*.h" | xargs /usr/local/bin/ctags -a -f $HOME/ctags/$FREEZE_NAME/h.tags 

find $V1 -name "*.c" | xargs /usr/local/bin/ctags -a -f $HOME/ctags/$FREEZE_NAME/c.tags 

cd $HOME/ctags/$FREEZE_NAME/ 

rm -f all.tags 

cat c.tags h.tags >> all.tags 

sort all.tags > temp.tags 

mv temp.tags all.tags 

rm -f c.tags h.tags 

Yukarıdaki kodu bir .sh dosyasına koyun ve çalıştırın ... Bu, etiketlerinizi kesin olarak üretecektir.