2012-01-14 60 views
-2

我需要一個宏/函數來搜索當前文檔,從頂部開始搜索特定模式。停在沒有註釋掉的第一行。Vim,在文檔頭中搜索

例如,在此VIM腳本:

,將停止在若行,如果找到這個模式,否則爲false返回true。

所有幫助表示感謝!

+0

只是爲了澄清一下:你的意思是「停在第一場沒有被註釋掉的比賽」?或者你只想搜索第一個未註釋的行? – 2012-01-14 15:00:58

+0

@PrinceGoulash:他意味着在頭文件中搜索,這是文件頂部的註釋區域,直到(並且自然排除)第一個非註釋行。 – 2012-01-14 15:07:55

+2

順便說一句,@Filip,你得到低報酬的原因是因爲你要求一個沒有任何跡象表明有任何跡象的函數。堆棧溢出不是爲了向您提供代碼,而是爲了幫助您解決代碼問題。 – 2012-01-14 15:08:42

回答

1

假設你的模式是字母'e'。

要搜索沒有被註釋掉一條線,而是包含一個E:

/^\%(\s*"\)\@!.*e 

它使用負先行(\@!),以確認該線(^)開始後面沒有通過評論的開頭(空格,然後雙引號\s*"),但後面跟着'e'(.*e)。 \%(\)使封閉模式成爲其他操作員(如負向預覽)可以作爲一個單元操作的原子。

要在匹配行運行命令,使用:g

:g/^\%(\s*"\)\@!.*e/echo "found one" 

要查看當前行相匹配,使用match()

:echo match(getline(line('.')), '^\%(\s*"\)\@!.*e') >= 0 ? 'true' : 'false' 

正則表達式是幾乎總是一樣的,問題是你想用匹配線做什麼?