[英]What is the difference between s, c and r commands in vi/vim?
我試圖從關於 Vim 的 OReilly 書中澄清這一點,但提供的示例還不夠清楚。 通過示例/用例而不是直接解釋進行澄清將非常有幫助。
示例文本可以是:
With a
screen editor,
you can
scroll the page, move the cursor.
假設文檔中有foo
,並且光標位於f
。
現在,按rb
會將其更改為boo
,您將返回命令模式。 按sb
將完成相同的操作,但您處於插入模式並且可以插入更多字符。 最后, c
需要某種運動; 例如,您可以鍵入cw
以刪除整個單詞並進入插入模式。 另一方面, cl
本質上與s
相同。
:help c
:help s
:help r
簡單。
與其在這本書上浪費時間,不如學習如何使用 Vim 很棒的內部文檔:
:h s
:h :command
:h 'option'
:h function()
:h ctrl-x
:h i_ctrl-x
:h subject
:h foo<Tab>
:helpgrep foo
s
( s替代) 將刪除當前字符並將用戶置於插入模式,光標位於兩個周圍字符之間。 例如, 3s
將刪除接下來的三個字符並將用戶置於插入模式。
c
( c hange) 進行 vi/vim 運動(例如w
、 j
、 b
等)。 它刪除從當前光標位置到移動結束的字符。 請注意,這意味着s
等價於cl
(vim 文檔本身聲稱這些是同義詞)。
r
( r eplace) 根本不進入插入模式。 相反,它需要另一個字符,然后它將用於替換當前光標下的字符。
獲取示例文本,將光標置於單詞“ can
”(第 3 行)的開頭。
在 vi/vim 中輸入spl<Esc>
。
在這里,我們有s
對於s ubstitute。 pl
是要插入的文本, <Esc>
將退出插入模式。 放在一起,它將改變can
到plan
是這樣的:
With a
screen editor,
you plan
scroll the page, move the cursor.
在 vi/vim 中輸入cwcould<Esc>
。
c
表示c hange, w
通過下一個單詞can
告訴c
刪除。 接下來我們輸入插入模式的文本, could
。 最后,我們需要再次輸入<Esc>
退出插入模式。 該命令將改變can
到could
是這樣的:
With a
screen editor,
you could
scroll the page, move the cursor.
在 vi/vim 中輸入rf
。
這里我們輸入r
表示r替換,然后輸入f
作為r
用來替換原始字符的新字符。 這種變化can
像這樣fan
:
With a
screen editor,
you fan
scroll the page, move the cursor.
vi/vim 中的簡單命令有很多隱藏的用途,突出了這些命令之間的更多差異。 由於我幾乎總是使用 vim 而不是 vi,這些功能可能是 vim 獨有的,我不確定。
最大限度地發揮像c
、 y
和d
這樣的動作命令的效用需要很好地掌握文本對象(在 vim 中鍵入help text-objects
。這些不在 vi 中。)
因為r
接受一個字符而不是進入插入模式,所以您可以輸入原本難以添加的字符。鍵入r<CR>
(即r
,然后是 ctrl- r
)會將當前字符替換為 ctrl-r 字符。 這可能令人驚訝,因為在插入模式下按 ctrl-r 會等待另一個鍵,即要粘貼的寄存器。
所有這三個命令都可以用.
命令,用給定的文本替換、更改或替換相對於光標的相同區域。
在命令前鍵入數字n
, s
和c
刪除n
項目( s
字符,或c
移動),然后插入一次文本。 但是,在r
之前使用數字n
會將接下來的n
字符替換為所選字符的多個副本。 例如, 4r0
可以4r0
將1234
替換為0000
。
您可以在可視塊模式下嘗試這些命令(按<Cv>
進入),它們的作用略有不同。
當您選擇一個字符塊然后鍵入s
,它將立即刪除該塊並進入插入模式,您接下來輸入的任何內容都將插入到受視覺塊選擇影響的每一行的相同位置。
命令c
基本上做同樣的事情。
什么有趣的是命令r
當你鍵入ra
選擇了塊之后,會在該塊的每個字符替換到a
,而不是只留下一列a
。 我認為這在某些時候可能非常有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.