2012-05-22 26 views
70

Vim/Vi中是否有任何命令在選定的搜索段內移動?Vim/Vi中是否有命令將光標移動到搜索高亮區的末尾?

例如,如果我搜索一個詞,是否有任何命令將光標移動到高亮段的末尾?假設我有一個詞「FishTaco」,我想搜索「Fish」的所有實例並在其後插入一些內容。我知道我可以進行全局替換,但是如果我只想在幾個非順序實例中進行更改,該怎麼辦?

我可以看到能夠將光標移動到當前突出顯示的段的末尾以執行操作的位置。

+0

這不是一個問題的答案,但要實現你用'FishTaco'替換所有'Fish'的終極目標,你可以做':%s/Fish \(Taco \)\ @!/&Taco /',它會找到每個'Fish'後面都沒有後面跟着'Taco',並用'FishTaco'代替它。將負向預覽搜索與包含匹配詞語後跟「Taco」的替換組合在一起。 –

回答

105

你可以用這個做到這一點:

/Fish/e

/e末在搜索區域(而不是默認的第一個字符結束土地光標

+22

請注意,您可以在結束前後添加* + n *或* -n *來放置光標* n *字符。 –

+10

+1自從我12歲以來一直使用vim 20年,但仍然不知道這個... – Benj

+7

值得注意的是,在您完成'/ Fish'搜索之後,您可以用// //跳到末尾'從Vim 7.4開始,你可以使用'gn'來直觀地突出顯示找到的結果。 – smathy

68

如果你。只是想將光標放在魚的最後一個字符後,那麼你可以使用

/Fish/e+1 

,這將使你的光標在h。 (沒有+1光標將結束在最後一個字符的左側)

如果您特別有興趣將光標放在Fish後面,但只有當它出現在「FishTaco」中時,纔可以嘗試其中一個下列選項:

您可以使用

/FishTaco/s+4 

,你的光標會落得魚和塔之間。 /s+4將光標置於搜索詞開始之後的4個位置。

你同樣可以使用

/FishTaco/e-3 

,這將使你的光標3個名額還剩下最後(結束)字符的左側。

您還可以使用

/FishTaco/b+4 

因爲/b+4/s+4處理。

+10

很好的解釋,但現在我只是餓了。 – kenny

11

一旦您進行了可視化選擇,則可以使用o在所選塊的開始和結束之間切換光標位置。當選擇是線性的時,這將切換線的位置,這意味着光標移動到選擇的開始和結束行,但不移動到開始或結束字符。當選擇是字符方式時,那麼運動也是字符方式。

您還可以使用`<`>在可視化塊的開始和結束之間切換光標,但這會影響選擇本身,因此用於重置或調整選擇範圍。

編輯:啊,但對於搜索亮點,這將無法正常工作,因爲o將啓動行插入。我猜搜索突出顯示是不一樣的視覺選擇,對不起:)

+0

我也不知道。這非常適合在不重新開始的情況下修改選擇的開始。 (例如,您開始選擇一個詞太早或太遲) –

7

您的問題的「光標在匹配結束」部分已被回答。你可以做:%s/Fish/FishTaco/c。這使您有機會確認或拒絕每個替代品,並跳過整個「比賽結束時的光標」業務。

+0

真棒小費。如果我輸入'y',它只會在第一個位置執行替換。我如何確認每一個? –

+1

它進入下一場比賽並等待輸入'y'或'n'等等,直到沒有剩下的比賽。要接受所有進一步的替換,請鍵入'a',拒絕它們,輸入'q'。 – romainl

+0

其實,我在最後一個'/'後面錯過'g',所以它沒有在我的行中繼續。謝謝你的提示。 –

24

如果已經搜索/Fish,可以迅速改變搜索通過//e,其中重複上一次的搜索,但追加e修改器已經解釋去比賽結束。

+1

// e +號碼正是我所期待的!真棒。 – arkod

8

/ long-regexp1 \zs long-regexp2 /..光標將在\停止ZS,請參閱:幫助\ ZS

相關問題