簡體   English   中英

vi/vim 中的 s、c 和 r 命令有什么區別?

[英]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 運動(例如wjb等)。 它刪除從當前光標位置到移動結束的字符。 請注意,這意味着s等價於cl (vim 文檔本身聲稱這些是同義詞)。

r ( r eplace) 根本不進入插入模式。 相反,它需要另一個字符,然后它將用於替換當前光標下的字符。

例子

獲取示例文本,將光標置於單詞“ can ”(第 3 行)的開頭。

在 vi/vim 中輸入spl<Esc>

在這里,我們有s對於s ubstitute。 pl是要插入的文本, <Esc>將退出插入模式。 放在一起,它將改變canplan是這樣的:

With a
screen editor,
you plan
scroll the page, move the cursor.

在 vi/vim 中輸入cwcould<Esc>

c表示c hange, w通過下一個單詞can告訴c刪除。 接下來我們輸入插入模式的文本, could 最后,我們需要再次輸入<Esc>退出插入模式。 該命令將改變cancould是這樣的:

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 獨有的,我不確定。

最大限度地發揮像cyd這樣的動作命令的效用需要很好地掌握文本對象(在 vim 中鍵入help text-objects 。這些不在 vi 中。)

因為r接受一個字符而不是進入插入模式,所以您可以輸入原本難以添加的字符。鍵入r<CR> (即r ,然后是 ctrl- r )會將當前字符替換為 ctrl-r 字符。 這可能令人驚訝,因為在插入模式下按 ctrl-r 會等待另一個鍵,即要粘貼的寄存器。

所有這三個命令都可以用. 命令,用給定的文本替換、更改或替換相對於光標的相同區域。

在命令前鍵入數字nsc刪除n項目( s字符,或c移動),然后插入一次文本。 但是,在r之前使用數字n會將接下來的n字符替換為所選字符的多個副本。 例如, 4r0可以4r01234替換為0000

您可以在可視塊模式下嘗試這些命令(按<Cv>進入),它們的作用略有不同。

當您選擇一個字符塊然后鍵入s ,它將立即刪除該塊並進入插入模式,您接下來輸入的任何內容都將插入到受視覺塊選擇影響的每一行的相同位置。

命令c基本上做同樣的事情。

什么有趣的是命令r當你鍵入ra選擇了塊之后,會在該塊的每個字符替換到a ,而不是只留下一列a 我認為這在某些時候可能非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM