2011-12-01 13 views
0

有關正常!,incsearch和/運營商(搜索)的一些微觀問題。我在這裏沒有解決任何特定的問題,只是想了解提及的關係,所以我可以在我的腦海中進行某種類比。如何:正常!/something <cr>與incsearch和/運算符有關?

如果我有,集incsearch上,而一旦按下/東西正常模式 Vim會跳轉到東西一審甚至在/沒有我按輸入。

Okey,所以正常! /東西應該做同樣的事情。 爲什麼不呢?

同樣,正常!不識別特殊字符。所以,如果我有這樣的文字中有一個文本文件,

something<cr> 

(這不是一個特殊字符在那裏,但在文字文本直接輸入)

`normal! /something<cr>` 

應該讓我打了該文本。 爲什麼不呢?

我喜歡它,但有時Vim的不一致性,說得客氣一點,最有趣的:)

回答

4

:help :normal中的有關內容:

{commands} should be a complete command. If 
{commands} does not finish a command, the last one 
will be aborted as if <Esc> or <C-C> was typed. 

的命令字符串你給normal必須是一個完整的命令,否則它會中止。但是,normal! /something不完整;如果你打字的話,Vim會等你完成。您可以按EscCtrl - C中止。或者您可以通過按輸入來完成。所以命令不完整,它會中止,而不是跳躍。爲了得到它來完成,給它輸入就是了(在命令行):

:normal! /something^M 

您可以通過鍵入Ctrl鍵得到^M - V然後輸入。 (如果在Windows和按Ctrl - V膏,使用按Ctrl - Q。)然後你需要按再次輸入完成整個命令。如果您正在使用execute你可以用做:

:execute "normal! /something\<cr>" 

一定要使用雙引號,因此\<cr>將被正確解釋。

我相信你的第二個問題是一樣的。字面輸入的<cr>不會影響這種情況,您只需提供將完成搜索命令的回車,或者normal即可中止它。

既然你已經用標記了這個問題,我猜你至少有興趣在使用這個腳本。將文字回車轉換爲腳本並使其正確工作是一種痛苦。在這些情況下,我將使用execute,如上所示,因此您可以使用雙引號解釋的字符串方法獲取回車。我們已經看到,它不會產生影響,因爲您無法使用normal進行部分搜索。您只能提交整個搜索。但是,它會更新最近搜索寄存器"/,因此突出顯示仍然會正確更新。

+1

+1 ...現在,如果我只記得當時我在做什麼,以及我需要什麼;) – Rook