2010-09-17 131 views
2

說我在我的項目中有foo.js和bar.css文件。在vim中有一個「:find」命令,它查找匹配字符串的文件。但是,這個命令,唉,有一些限制。例如,如果我以這種方式啓動 - 「vim」,或甚至以這種方式 - 「vim」。 - 在js子目錄中找不到任何東西。但是,如果我以這種方式啓動vim - 「vim js/any_file_other_than_foo.js」,那麼調用「:find foo.js」工作得很好。由於它不直觀(我在同一個目錄中工作,「pwd」返回相同的路徑),我的第一個問題是 - 任何人都可以解釋如何繞過這個問題嗎?而且,甚至更廣泛的是,是否有任何方法來輸入類似find foo的東西 - 並打開第一個文件,該文件的名稱與pattern foo匹配。如何馴服vim的「:find」命令

在此先感謝。

回答

2

一個很好的插件,實現類似的效果是Command-T

命令-T插件提供了一個最小的數 按鍵打開文件的 非常快速,直觀的機制 。它命名爲 「Command-T」,因爲它的靈感來源於 「去文件」窗口綁定到 命令-T在TextMate中。

文件被通過輸入出現在它們的路徑, 並且通過該 知道出現在 某些位置的字符(例如, 後立即路徑分隔) 應給予的算法是有序 字符選擇更重。應該給予更多的分量。

這裏是命令T的screencast在行動。

+0

很遺憾,這樣一個真棒插件要求使用ruby – shabunc 2010-09-18 09:53:07

+1

@shabunc編譯vim,那麼你可以試試[lookupfile](http://www.vim.org/scripts/script)。 php?script_id = 1581)它的唯一依賴是另一個vimscript。 (儘管它與Cmd-T不一樣) – idbrii 2011-06-12 16:39:59

7

你可以嘗試

:e[dit] **/*foo*,然後按「選項卡」移動到第一場比賽。

**是目錄匹配模式,而*是字符匹配。

如果你是這樣的傾向,你可以寫一個簡單的模糊查找器的命令,以獲取更多信息,您可以檢查出VIM提示維基:http://vim.wikia.com/wiki/Find_files_in_subdirectories

+0

好吧,實際上,並不那麼簡單。調用:通配符將打開所有匹配項。 – shabunc 2010-09-17 20:12:51

+0

我應該已經更清楚了,按'tab'可以讓你只打開第一場比賽。 – 2010-09-17 20:27:48

+0

你可能想要使用'set wildmenu',這樣你就可以看到你正在滾動的匹配。另見':help wildmode' – idbrii 2011-06-12 16:43:08

4

Vim的:find通過搜索path變量中的每個目錄(並忽略pwd)來工作。默認情況下,它以而不是遞歸搜索。這就是爲什麼當你打開一個js文件時find只能爲你工作。 '。'在路徑中指的是當前文件的目錄 - 而不是pwd。

你可以改變路徑,包括您想要的目錄:

set path+=$PROJECT/js 

:help path

一個魔術位使用的是**添加到路徑遞歸搜索這條道路:

" search recursively in my project 
set path+=$PROJECT/** 
" search recursively from the current file's directory 
set path+=./** 

更多的魔法見:help file-searching