2010-08-02 81 views
4

首先,我正要寫一個長的 vim中的if/else語句列表,並意識到1)有一個更好的方式去做我想做的事情,2)在這個問題上有所幫助的時候,這樣做會很成熟。所以!我有各種文件傳播有關類似使用vim從多個目錄和多個分機打開頭文件到一個C/C++源文件

foo/src/file01.C 
foo/src/file02.cc 
foo/src/file03.c 
foo/include/file01.hh 
foo/include/file02.h 
foo/include/file03.h 

如果您發現C/H,CC/HH,C/H擴展可能會或可能不會那麼熱衷,我想你,請匹配幫幫我。我已經從Vim wiki中看到了the following vim scripts這樣的東西,用於「在源文件和頭文件之間輕鬆切換」,儘管我只是在沒有成功的情況下向a.vim傾倒了幾個小時,但似乎其他人不會通過文檔工作在該頁面上。那麼任何人都可以幫助解決如何完成這項工作?

我有一個很好的主角是一個快速How to Easily Switch between Header and Source的話題,但仍然無法使其工作。

我想我真正想要的是如何避免多個if語句,並使用真正的匹配來做我想做的事情。我想查看另一個目錄,如果它是一個源C/C++文件,查找與任何熟悉的擴展名相同的頭文件,或者查找任何常規擴展的源文件(如果它是頭文件)。謝謝你的幫助!

更新:我特別想在新選項卡中打開文件。我住在VIM標籤上!

回答

2

我推薦使用FSwitch插件。 https://github.com/derekwyatt/vim-fswitch 這正是你需要的開箱即用。它比a.vim更好一些,重寫a.vim背後的想法。

您發佈的鏈接也將其作爲解決方案。 我剛剛將它安裝到了我的vim配置中,並且它的工作很好。

享受。

0

IMO最好的選擇是採用現有的腳本來使用:tabf而不是:e或任何腳本現在用來打開對應文件。您還可以嘗試使更改可配置並將其提交給腳本作者。 (我很確定很多人會發現這個增強功能很有用。)

這讓我想起了很久以前我用過的一個技巧。我沒有猜測相應的源文件/頭文件在哪裏,而是在文件特殊註釋的頂部使用了包含相對文件的相對路徑。切換非常簡單,只需找到特殊評論,解壓文件名並打開它。問題與您的相似,因爲文件擴展名不可預測。我的合理的解決方案是停止猜測,並在源代碼中明確表示對應。 (這幾天我可能會嘗試將關係表放入具有標準名稱的外部文件中,並使用upward search在VIM中查找它。)

2

只是爲了確保我使用的是最新版本,我downloaded the latest a.vim script (2.18)並將其複製到我的~/.vim/plugin目錄中。

您可以在~/.vimrc文件中定義某些變量,以獲取a.vim以識別替代文件擴展名。

爲了讓文件在你的榜樣,以配合他們的候補添加以下到我的~/.vimrc

let g:alternateExtensions_C = "H,hh" 
let g:alternateExtensions_hh = "C" 

這些都是全局變量,允許您覆蓋什麼已經定義。你必須定義 這兩種關係(它們不能同時工作)。

你可以看到當前的映射是什麼鍵入:

:echo g:alternateExtensionsDict 

如果您需要定義其他映射,遵循相同的模式。下劃線後面是您正在編輯的文件擴展名。雙引號中的內容是用逗號分隔的備用擴展名列表。

let g:alternateExtensions_<ext> = "<list,of,alt,ext>" 

如果你有不同的目錄結構,你可以定義通過覆蓋g:alternateSearchPath變量來搜索什麼路徑。默認情況下已包含../src../include

:echo g:alternateSearchPath 

要在新標籤中打開備用文件:

:AT 

順便說一句,在a.vim腳本是相當有據可查的。你可能想打開它並看看。我發現了一個或兩個我不知道的,我一直在使用它多年; o)

我希望有所幫助。

+0

感謝您的幫助。我會盡快研究它。 – physicsmichael 2010-08-06 19:06:12

0

兩個有用的東西

:he 'path' 
:he tabfind 

所以,你會做

:set path=../,/usr/include/,/home/buildagent/SDKROOT/mysdk/inc 
:tabfind error_codes.h 

從某處異國打開error_codes.h而無需指定。注意通配如何VIM是非常非常靈活,所以您可能不需要mucht

:argadd ./**/*.[h,H] | tab sall 

將打開當前目錄下的所有文件,不管有多少級深。小心在一棵大樹上運行這個命令或在樹外使用符號鏈接

相關問題