2011-08-29 58 views
46

說我有以下行:改變下N個字符在VIM

|add_test()   (| == cursor position) 

而想要更換用「德爾」「添加」。

del|_test() 

我既可以按X鍵三次,然後按i鍵來插​​入並輸入德爾。 我想要的是像3c或3r的東西來覆蓋只有3個字符。 這兩個都不做我想要的,3c用相同的 字符覆蓋3個字符,3r做了其他幾件事。

有沒有一種簡單的方法來做到這一點,而無需手動邢和插入文本?

回答

78

3s,「替代3個字符」與c3l相同。 3clc3l應該是一樣的,我不知道爲什麼你會看到重複的同一個字符。我也是使用t的粉絲,例如ct_作爲另一張海報提到,那麼我不必數字,只需鍵入「del」。

我在「取代幾個人物」幾天也在掙扎; 'r'非常適合單個字符,R對匹配長度的字符串非常有用,但我希望像OP所要求的那樣。因此,我輸入:help x並閱讀了一段時間,結果發現sS的描述只是從x開始的幾頁。

換句話說,:help是你的朋友。閱讀並學習。

+0

如果輸入「3s」後鍵入3個字符,它會自動回到正常模式。我想知道是否有辦法做這樣的事情(類似於'3r') –

+0

是的,我也經常想要這樣的事情。唉,我不知道它是否存在。 –

5

c3 ('c','3',space),然後鍵入要插入的字符。 (或者你可以使用右箭頭或l而不是空間。)

或者,正如@Mike剛纔說在註釋中, 控制-R R作品很好,如果字符數正好匹配的字符數你正在刪除。

ct_將光標更改爲下一個_字符。

+0

現在我想到它不是它的大寫R而不是CTRL + R? – Mike

+1

@Mike:是的,它是'R'。 –

6

我認爲3cl是你想要的。它改變了3個字符的權利。我會輸入ct_del<esc>,但這不是你要求的

19

使用13 C {運動}命令:

  1. cf_ - 改變到第一 '_'(包括);
  2. ct_ - 更改爲第一個'_'(不含);
  3. cw - 更改第一個單詞;

單詞由iskeyword變量決定。用檢查它:設置iskeyword?並刪除任何'_',如:set iskeyword = @,48-57,192-255。 順便看看:幫助c:幫助議案如果你想要更多。

+0

ct_實際上比我所尋找的要好,但從技術上說,s命令可以回答這個問題;-) – MrB

+0

這是更好的答案。雖然OP在他的例子中改變了3個字符,但是這個答案能夠解決任何改變的N個字符。 – DrStrangepork

3

如果作品的長度相同,則可以使用R命令,該命令將您以前輸入的內容替換爲以前的內容。