2012-09-17 54 views
0

我每天都在使用python,並且需要我的本地項目和在我的虛擬環境中找到的每個python模塊/ egg的索引如何使用2個不同的位置爲vim生成一個.ctags文件?

以下是我希望看到的改進版的一半。目前我可以在重繪命令之前做一個或另一個。使用這種方法,我最終將在每個項目的根目錄中創建一個.ctags文件,vim可以快速輕鬆地通過類名稱/方法名/ etc進行查找。

有沒有辦法將這2個exe行組合成一行,仍然只產生一個索引文件?

預先感謝您

set tags=./.ctags,.ctags; 

" re-index the ctags file 
map <leader>ri :call RenewTagsFile()<cr> 

" search through the indexed ctags file for any class/method/etc 
map <leader>fs :FufTag<CR> 

function! RenewTagsFile() 
    exe 'silent !ctags -Rf .ctags ' . system('python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"')'' 
    exe 'silent !ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null' 
    exe 'redraw!' 
endfunction 

UPDATE

任何人誰可能在將來我能夠使用-a標誌(所以更新標記文件的功能附加在這個問題絆倒會看起來像這樣)

function! RenewTagsFile() 
    exe 'silent !ctags -Rf .ctags ' . system('python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"')'' 
    exe 'silent !ctags -a -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null' 
    exe 'redraw!' 
endfunction 

回答

3

你不需要。 Vim能夠處理多個標籤文件,只需選擇一個位置即可放置virtualenv標籤文件,並將其完整路徑包含到「標籤」選項中。

雖然還有另一種可能性:請閱讀man ctags。通過添加一個開關,可以使ctags爲現有文件添加標籤。您仍然不需要將這些命令組合成一個命令。


注:有在你的代碼中的一些奇怪的事情:

  1. set tags=./.ctags,.ctags; 
    

    你真的需要包括.ctags;文件用分號?猜猜這是一個錯字。

  2. map … 
    

    nnoremap …。首先,這裏沒有什麼東西需要重新映射,因此nore。其次,命令不是從可視化模式寫入工作的,我懷疑你需要它們處於操作等待模式,因此nnore

  3. exe 'silent !ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null' 
    exe 'redraw!' 
    

    你不需要:exe的一切都在這裏,只是

    silent !ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null 
    redraw! 
    

    。不過,你完全可以通過使用system()避免:redraw!

    call system('ctags -Rf .ctags ' . system('python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"')) 
    call system('ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null') 
    
+0

難道這些意見Linux和OSX友好嗎?如上所示,我發現呼叫系統建議在Ubuntu 12.04上不起作用。我在Ubuntu上使用我的vimfiles,並在夜間使用OSX,所以我更喜歡兩種都適用的東西。此外,我仍然看到「項目最後一個贏」行爲發生在項目底部的ctags附近,但我的virtualenv索引死亡(第一個被調用)。 –

+0

看起來像在第二個ctags中添加-a標誌將允許我將這兩個索引保存在單個ctags文件中。 'ctags -a -Rf .ctags .....' –

+0

@ToranBillups我不知道任何情況,當'!'工作和等效的'調用system()'調用不。第一行可以在我的系統上運行(Gentoo linux)。注意:'system()'不會擴展''''''''和''''。根本沒有交易:0。我在這裏看不到特別的角色。 1.你不能可靠地使用這些特殊字符(包含特殊字符的名字會在使用'%'擴展時破壞調用,但在顯式使用'shellescape()'時不會)。 – ZyX

相關問題