2011-05-10 56 views
21

在vim/gvim中,我希望能夠移動到當前搜索查找的前端和結尾。這可能嗎?移動到搜索查找的開始和結束

例如,此文件:

A dog and a cat 
A hat and a bat 

我想能夠執行搜索,例如/dog\sand,然後能夠從一開始移動「狗和」表達了結束和返回,以便我的光標從第3列開始,位於單詞'dog'的字母'd'下,然後移至第9列下的字母'd'或單詞'and'。

我希望能夠做到這一點的原因是,我可以搜索一個表達式,然後使用更改命令c與移動命令結合替換該特定搜索表達式。我不想在這裏使用替換和替換,我想使用更改命令和移動鍵執行此操作。

回答

16

您可以用c//e<CR>更改爲比賽結束。而//<CR>會帶你到下一場比賽的開始。你或許可以爲那些有意義的人制定某種綁定。比如我剛試過以下,它似乎很好地工作:

:onoremap <silent>m //e<CR> 

所以,你可以說cm變革的比賽。不過,我不確定我會如何映射//<CR>。我試圖將其映射到n,它似乎工作正常。不知道這對你是否會有問題。

:nnoremap <silent>n //<CR> 
+0

這有點粗俗,因爲它會用較少的有用行爲覆蓋默認的Vim行爲;例如,你將無法執行'[count] n'。 – 2013-04-19 17:24:13

+0

同意。在另一個答案中提到的'gn'命令要好得多,但我認爲它不存在於2011年5月。 – 2013-04-24 14:21:56

+2

隨着新解決方案的出現,正確的解決方案可能會改變。 = P – 2013-04-24 15:15:05

12

嘗試的部份:

/pattern<cr> to place the cursor at the start of search pattern 
/pattern/e<cr> to place the cursor at the end of search pattern 
+0

我該如何將它用作移動命令?我看到這是如何讓我搜索到表達式的結尾,但它不是一個移動命令。 – 2011-05-10 20:33:13

+0

對不起,在這裏,「移動」這個詞很混亂。 '/ pattern '將光標置於搜索模式的** start **處。並且'/ pattern/e '將光標置於搜索模式的**結尾**處。 – anubhava 2011-05-10 20:37:57

+0

沒錯,但這怎麼可以作爲一個移動命令?請看我原來的問題。例如,我無法使用更改命令的答案。 – 2011-05-10 20:44:58

-2

既然你知道你有多少字搜索,爲什麼不搬到那裏,然後再使用文字移動命令?即,「2w」結束當前搜索結果,「2b」返回。

+2

我在這個微不足道的例子中,但在更復雜的情況下,並不那麼容易。如果搜索表達式包含標點符號和數字,該怎麼辦? – 2011-05-10 20:44:06

32

您正在尋找ç克ñ。從:help gn

Search forward for the last used search pattern, like 
with `n`, and start Visual mode to select the match. 
If the cursor is on the match, visually selects it. 
If an operator is pending, operates on the match. 
E.g., "dgn" deletes the text of the next match. 
If Visual mode is active, extends the selection 
until the end of the next match. 

這樣做的好處是,你可以做Ç克ñ,然後重複與命令。,是的,它會在下一個搜索模式匹配上執行相同的操作。當您開始使用複雜的正則表達式搜索時,這變得非常有用。

+3

這在Vim 7.3.46中不起作用,但在7.3.736中起作用。 – bentsai 2013-04-30 21:06:40

相關問題