2009-07-12 84 views
1

我想獲得一個與 - 運算符下面的Vim命令Sed/Vim中的邏輯與是什麼?

:command! -nargs=1 GrepSource :! grep <args> `sed -n 's/^source \(.*\)/\1/p' %` 

,這樣我可以使用命令找貨源在

# source <path> 
# . <path> 
source <path> 
. <path> 

我不知道是否有可能或不要讓SED或Vim和運營商。

如何添加AND操作符到SED命令?

回答

1

你可以只用Vim的正則表達式查找<path>名稱,而不是使用sed

:command! -nargs=1 GrepSource :exe printf("!grep '<args>' '%s'", matchstr(getline('.'), '^#\=\s*\%(source\|\.\)\s*\zs\f\+')) 

我認爲,命令應該做你想做的。您可以使用一個命令來測試所發生的事情(「exe文件」改爲「回聲」):

:command! -nargs=1 GrepSourceTest :echo printf("!grep '<args>' '%s'", matchstr(getline('.'), '^#\=\s*\%(source\|\.\)\s*\zs\f\+')) 

的命令必須在一行中的下列形式之一使用:

# source <somefile> 
# . <somefile> 
source <somefile> 
. <somefile> 
+0

我無法讓你的命令工作。請說,如果你的命令在你的機器上工作。 ---我使用Vim 7.2,OS X Leopard。 – 2009-07-13 00:25:32

+1

我也在OS X 10.5上使用7.2。你使用第二個命令(GrepSourceTest)得到了什麼輸出?確保您的光標處於某個行上,如「來源」或「。 '或'#。 ' – 2009-07-13 00:45:15

2

我不清楚你試圖達到/搜索什麼。也許如果你詳細說明你究竟想要做什麼以及AND應該做什麼,我們可以提供更多幫助。

該解決方案從Vim命令執行:

grep PATTERN /some/path/* 

如果您正在尋找目錄中的文件可以使用:

ls /some/path | grep PATTERN 

您可以更新命令的相關作品。

反正...

從你的腳本中,我假設你有一個行指定給您要到grep的東西的目錄,例如路徑你要搜索的PATTERN路徑,定位光標與路徑線,那麼你要提取的路徑和grep它與你的命令的模式,例如行文件:

source /some/path 

這個命令應該做的你期望:

:command! -nargs=1 GrepSource :exe printf("!grep '<args>' '%s'/*", substitute(
getline('.'), "\\%(source\\s*\\)\\(.*\\)$", "\\1","")) 

隨着光標與路徑開頭的行字源,你可以執行上面的命令:

:GrepSource PATTERN 

這將在「/所以搜索文件我/路徑/'字PATTERN。

我想在你的文件路徑不斜槓「/」結束,我想,你希望在文件中搜索,所以我追加「/ *」在路徑的末尾進行搜索,以命令結束:

grep PATTER /some/path/* 

我用substitute命令替換

source /some/path 

/some/path 

然後在printf中使用它來創建實際的命令。