Usr_04

Nvim :help 頁面,使用 tree-sitter-vimdoc 解析器,從 來源 產生


VIM 使用者手冊 - 作者:Bram Moolenaar
進行小修改
本章將示範幾種修正和移動文字的方式。它將教你三種基本的文字修改方式:運算符-移動、可視模式和文字物件。
04.1 運算符與移動 04.2 修改文字 04.3 重複修改 04.4 可視模式 04.5 移動文字 04.6 複製文字 04.7 使用剪貼簿 04.8 文字物件 04.9 取代模式 04.10 結論
下一章:usr_05.txt 設定你的設定 上一章:usr_03.txt 四處移動 目錄:usr_toc.txt

運算符與移動

在第 2 章中,你學到使用 "x" 命令刪除單個字元。以及使用計數:"4x" 會刪除四個字元。"dw" 命令會刪除一個單字。你可能會認出 "w" 命令是移動單字的命令。事實上,"d" 命令後面可以接任何移動命令,它會從目前位置刪除到游標移動到的位置。"4w" 命令,例如,會將游標移動四個單字。"d4w" 命令會刪除四個單字。
犯錯是人性。而要真正搞砸,你需要一台電腦。
------------------> d4w
犯錯是人性。你需要一台電腦。
Vim 只會刪除到移動命令將游標移動到的位置。那是因為 Vim 知道你可能不想刪除單字的第一個字元。如果你使用 "e" 命令移動到單字結尾,Vim 會猜測你想要包含最後一個字元。
犯錯是人性。你需要一台電腦。
--------> d2e
犯錯是人性。一台電腦。
游標下的字元是否包含在內,取決於你用來移動到該字元的命令。參考手冊稱其為「不包含」,當字元未被包含時;而「包含」則表示字元被包含在內。
"$" 命令會移動到行尾。"d$" 命令會從游標位置刪除到行尾。這是一個包含移動,因此該行的最後一個字元會被包含在刪除操作中。
犯錯是人性。一台電腦。
------------> d$
犯錯是人性
這裡有一個模式:運算符-移動。你先輸入一個運算符命令。例如,"d" 是刪除運算符。然後你輸入一個移動命令,例如 "4l" 或 "w"。這樣一來,你就可以對任何你可以移動到的文字進行操作。

04.2 修改文字

另一個運算符是 "c",變更。它的作用和 "d" 運算符一樣,只是它會讓你進入插入模式。例如,"cw" 會變更一個單字。或者更具體地說,它會刪除一個單字,然後讓你進入插入模式。
犯錯是人性
-------> c2wbe<Esc>
成為人
這個 "c2wbe<Esc>" 包含了這些部分
c 變更運算符 2w 移動兩個單字 (它們被刪除,並且開始進入插入模式) be 插入此文字 <Esc> 回到一般模式
你會注意到一些奇怪的事情: "human" 前面的空格沒有被刪除。俗話說,每個問題都有一個簡單、明確且錯誤的答案。這裡 "cw" 命令使用的範例就是這樣的情況。c 運算符的作用和 d 運算符一樣,但有一個例外: "cw"。它的實際作用就像 "ce",變更到單字結尾。因此,單字後面的空格不包含在內。這是一個可以追溯到舊版 Vi 的例外。由於許多人現在已經習慣了,所以這種不一致之處仍然保留在 Vim 中。

更多變更

就像 "dd" 刪除整行一樣,"cc" 會變更整行。不過,它會保留現有的縮排(前導空白)。
就像 "d$" 刪除到行尾一樣,"c$" 會變更到行尾。這就像使用 "d$" 刪除文字,然後使用 "a" 開始插入模式並附加新文字。

快捷方式

有些運算符-移動命令使用頻率非常高,因此它們被賦予了單字母命令
x 代表 dl(刪除游標下的字元) X 代表 dh(刪除游標左邊的字元) D 代表 d$(刪除到行尾) C 代表 c$(變更到行尾) s 代表 cl(變更一個字元) S 代表 cc(變更整行)

計數放在哪裡

"3dw" 和 "d3w" 命令都會刪除三個單字。如果你想斤斤計較,第一個命令 "3dw" 會刪除一個單字三次;命令 "d3w" 會一次刪除三個單字。這是一個沒有區別的區別。不過,你實際上可以輸入兩個計數。例如,"3d2w" 會刪除兩個單字,重複三次,總共刪除六個單字。

用一個字元取代

"r" 命令不是運算符。它會等待你輸入一個字元,並會用它取代游標下的字元。你可以使用 "cl" 或 "s" 命令執行相同的操作,但是使用 "r",你不必按 <Esc> 就能退出插入模式。
這裡有點不對勁
rT rt rw
這裡有點不對勁
使用計數搭配 "r" 會導致許多字元被同一個字元取代。範例
這裡有點不對勁
5rx
這裡有點 xxxxxx 不對勁
若要用換行符號取代字元,請使用 "r<Enter>"。這會刪除一個字元並插入換行符號。在這裡使用計數只會應用於刪除的字元數:"4r<Enter>" 會用一個換行符號取代四個字元。

04.3 重複修改

"." 命令是 Vim 中最簡單但功能最強大的命令之一。它會重複上一次變更。例如,假設你正在編輯 HTML 檔案,並想要刪除所有 <B> 標籤。你將游標定位在第一個 < 上,並使用命令 "df>" 刪除 <B>。然後你前往下一個的 <
/B> 並使用 "." 命令刪除它。 "." 命令會執行上一個變更命令(在本例中為 "df>")。若要刪除另一個標籤,請將游標定位在 < 上,並使用 "." 命令。
產生 <B> 目錄 <B>
f< 尋找第一個 < ---> df> 刪除到 > --> f< 尋找下一個 < ---------> . 重複 df> ---> f< 尋找下一個 < -------------> . 重複 df> -->
"." 命令適用於你進行的所有變更,除了 "u"(還原)、CTRL-R(重做)和以冒號 (:) 開頭的命令。
另一個範例:你想要將單字 "four" 變更為 "five"。它在你的文字中出現了好幾次。你可以使用此命令序列快速執行此操作
/four<Enter> 尋找第一個字串 "four" cwfive<Esc> 將單字變更為 "five" n 尋找下一個 "four" . 重複變更為 "five" n 尋找下一個 "four" . 重複變更,依此類推。

04.4 可視模式

若要刪除簡單的項目,運算符-移動變更效果很好。但是,通常很難決定哪個命令會在你要變更的文字上移動。然後你可以使用可視模式。
你可以按下 "v" 開始可視模式。你將游標移動到你要處理的文字上。當你執行此操作時,文字會被反白顯示。最後輸入運算符命令。例如,從單字中間刪除到另一個的中間
這是一個可視模式的範例
----------> velllld
這是一個可視模式的範例
在執行此操作時,你實際上不必計算必須按下 "l" 多少次才能到達正確的位置。當你按下 "d" 時,你可以立即看到將刪除哪些文字。
如果在任何時候你決定不想處理反白顯示的文字,只需按下 <Esc>,可視模式就會停止,而不會執行任何操作。

選取行

如果你想要處理整行,請使用 "V" 開始可視模式。你會立刻看到整行都被反白顯示,而無需移動。當你左右移動時,不會發生任何變化。當你上下移動時,選取範圍會一次擴展整行。例如,使用 "Vjj" 選取三行
+------------------------+ | 文字 更多文字 | >> | 更多文字 更多文字 | | 選取的行 >> | 文字 文字 文字 | | Vjj >> | 文字 更多 | V | 更多文字 更多 | +------------------------+

選取區塊

如果你想要處理字元的矩形區塊,請使用 CTRL-V 開始可視模式。這在處理表格時非常有用。
姓名 Q1 Q2 Q3 皮耶 123 455 234 約翰 0 90 39 史提夫 392 63 334
若要刪除中間的 "Q2" 欄,請將游標移動到 "Q2" 的 "Q" 上。按下 CTRL-V 開始區塊式可視模式。現在使用 "3j" 將游標向下移動三行,並使用 "w" 移動到下一個單字。你可以看到最後一欄的第一個字元已包含在內。若要排除它,請使用 "h"。現在按下 "d",中間的欄就會消失。

前往另一邊

如果你已在可視模式中選取一些文字,並且發現需要變更選取範圍的另一端,請使用 "o" 命令 (提示:o 代表另一端)。游標會移至另一端,你可以移動游標以變更選取範圍的起始位置。再次按下 "o" 會讓你回到另一端。
使用區塊式選取時,你有四個角。"o" 只會帶你到另一個角,呈對角線。使用 "O" 移動到同一行中的另一個角。
請注意,可視模式中的 "o" 和 "O" 與一般模式中的運作方式非常不同,在一般模式中,它們會在游標下方或上方開啟新行。

04.5 移動文字

當你使用 "d"、"x" 或其他命令刪除某些內容時,文字會被儲存。你可以使用 "p" 命令將它貼回。(Vim 對此的名稱為「放置」)。看看它是如何運作的。首先,你要刪除整行,方法是將游標放在你要刪除的行上,然後輸入 "dd"。現在,你將游標移動到要放置該行的位置,然後使用 "p"(放置)命令。該行會插入到游標下方的行中。
一行 一行 一行 行 2 dd 行 3 p 行 3 行 3 行 2
因為你刪除了一整行,所以 "p" 命令將文字放在游標下方的行。如果你刪除了一行的一部分(例如,一個單字),則 "p" 命令會將其放在游標之後。
一些更無聊的嘗試文字,以測試命令。
----> dw
一些更無聊的文字,以測試命令。
-------> welp
一些更無聊的文字,以嘗試命令。

更多關於放置

"P" 命令放置文字的方式與 "p" 相同,但是在游標之前。當你使用 "dd" 刪除整行時,"P" 會將其放回游標上方。當你使用 "dw" 刪除一個單字時,"P" 會將其放回游標之前。
你可以根據需要重複放置多次。將使用相同的文字。
您可以使用計數與 "p" 和 "P"。文字將重複指定的次數。因此,"dd" 然後 "3p" 會將相同刪除的行複製三份。

交換兩個字元

當您打字時,經常會發生手指比大腦快(或相反的情況?)。結果就是打錯字,例如把 "the" 打成 "teh"。Vim 可以輕鬆修正這種問題。只需將游標放在 "teh" 的 e 上,然後執行命令 "xp"。運作方式如下:"x" 刪除字元 e 並將其放入暫存器。"p" 將文字放在游標之後,也就是 h 之後。
teh th the
x p

04.6 複製文字

若要將文字從一個地方複製到另一個地方,您可以刪除它,使用 "u" 還原刪除,然後使用 "p" 將其放在其他地方。還有一種更簡單的方法:複製(yanking)。"y" 運算子將文字複製到暫存器。然後可以使用 "p" 命令將其貼上。複製只是 Vim 中複製的名稱。"c" 字母已用於變更運算子,而 "y" 仍然可用。將此運算子稱為「複製」使其更容易記住使用 "y" 鍵。
由於 "y" 是一個運算子,您可以使用 "yw" 來複製一個單字。計數如常可以使用。要複製兩個單字,請使用 "y2w"。範例
let sqr = LongVariable *
--------------> y2w
let sqr = LongVariable *
p
let sqr = LongVariable * LongVariable
請注意,"yw" 包含單字之後的空白字元。如果您不想要這樣,請使用 "ye"。
"yy" 命令會複製整行,就像 "dd" 刪除整行一樣。
a text line yy a text line a text line line 2 line 2 p line 2 last line last line a text line last line
"Y" 最初等同於「複製整行」,而不是 "D",後者是「刪除到行尾」。"Y" 因此被重新映射為「複製到行尾」,使其與 "D" 的行為一致。映射將在後續章節中介紹。

04.7 使用剪貼簿

如果您使用的是 Vim 的圖形介面版本(gvim),您可以在「編輯」選單中找到「複製」項目。首先使用視覺模式選取一些文字,然後使用「編輯/複製」選單項目。選取的文字現在已複製到剪貼簿。您可以將文字貼上到其他程式中。在 Vim 本身也可以。
如果您已將文字複製到另一個應用程式的剪貼簿中,您可以使用「編輯/貼上」選單項目將其貼上到 Vim 中。這在一般模式和插入模式下都有效。在視覺模式下,選取的文字會被貼上的文字取代。
「剪下」選單項目會刪除文字,然後將其放入剪貼簿。「複製」、「剪下」和「貼上」項目在快顯選單中也可用(當然,僅在有快顯選單時)。如果您的 Vim 有工具列,您也可以在那裡找到這些項目。
如果您沒有使用圖形介面,或者不喜歡使用選單,您必須使用其他方法。您使用一般的 "y"(複製)和 "p"(貼上)命令,但在其前面加上 "* (雙引號星號)。若要將一行複製到剪貼簿
"*yy
若要將文字從剪貼簿放回文字中
"*p
這僅適用於包含剪貼簿支援的 Vim 版本。有關剪貼簿的更多資訊,請參閱 09.3 節以及此處:剪貼簿

04.8 文字物件

如果游標位於單字的中間,而您想要刪除該單字,您需要先移回它的開頭,才能執行 "dw"。還有一種更簡單的方法: "daw"。
this is some example text.
daw
this is some text.
"daw" 中的 "d" 是刪除運算子。"aw" 是一個文字物件。提示:"aw" 代表 "A Word"。因此,"daw" 是 "Delete A Word"。更準確地說,單字之後的空白字元也會被刪除(如果位於行尾,則會刪除單字之前的空白字元)。
使用文字物件是在 Vim 中進行變更的第三種方法。我們已經有運算子-移動和視覺模式。現在我們添加運算子-文字物件。它與運算子-移動非常相似,但文字物件是作為一個整體使用,而不是對移動命令之前和之後游標位置之間的文字進行操作。游標在物件中的哪個位置並不重要。
若要變更整個句子,請使用 "cis"。請看這段文字
Hello there. This
is an example. Just
some text.
移動到第二行的開頭,在 "is an" 上。現在使用 "cis"
Hello there. Just
some text.
游標位於第一行中的空白之間。現在您輸入新的句子 "Another line."
Hello there. Another line. Just
some text.
"cis" 由 "c"(變更)運算子和 "is" 文字物件組成。這代表 "Inner Sentence"(內部句子)。還有 "as" ("A Sentence") 物件。區別在於 "as" 包含句子之後的空白字元,而 "is" 不包含。如果您要刪除一個句子,您希望同時刪除空白字元,因此請使用 "das"。如果您要輸入新文字,則可以保留空白字元,因此您可以使用 "cis"。
您也可以在視覺模式中使用文字物件。它會將文字物件包含在視覺選取範圍中。視覺模式會繼續執行,因此您可以執行多次。例如,使用 "v" 開始視覺模式,並使用 "as" 選取一個句子。現在您可以重複 "as" 以包含更多句子。最後,您可以使用運算子來處理選取的句子。
您可以在這裡找到文字物件的長列表:文字物件

04.9 取代模式

"R" 命令會使 Vim 進入取代模式。在此模式下,您輸入的每個字元都會取代游標下的字元。這會持續到您輸入 <Esc> 為止。在此範例中,您會在 "text" 的第一個 "t" 上開始取代模式
This is text.
Rinteresting.<Esc>
This is interesting.
您可能已經注意到,此命令將行中的 5 個字元取代為其他 12 個字元。"R" 命令會在沒有字元可取代時自動延伸行。它不會繼續到下一行。
您可以使用 <Insert> 鍵在插入模式和取代模式之間切換。
當您使用 <BS>(退格鍵)進行修正時,您會注意到舊文字會被放回去。因此,它的作用就像是先前輸入字元的復原命令。

04.10 結論

運算子、移動命令和文字物件讓您能夠進行許多組合。既然您知道它們如何運作,您就可以使用 N 個運算子和 M 個移動命令來產生 N * M 個命令!
您可以在這裡找到運算子的列表:運算子
例如,還有許多其他方法可以刪除文字片段。以下是一些常見的方法
x 刪除游標下的字元("dl" 的簡寫) X 刪除游標前的字元("dh" 的簡寫) D 從游標刪除到行尾("d$" 的簡寫) dw 從游標刪除到下一個單字的開頭 db 從游標刪除到上一個單字的開頭 diw 刪除游標下的單字(不包括空白字元) daw 刪除游標下的單字(包括空白字元) dG 刪除到檔案結尾 dgg 刪除到檔案開頭
如果您使用 "c" 而不是 "d",它們就會變成變更命令。而使用 "y",您就會複製文字。以此類推。
還有一些常見的變更命令不屬於其他地方
~ 變更游標下字元的大小寫,並將游標移到下一個字元。這不是運算子(除非設定了 'tildeop'),因此您無法將其與移動命令搭配使用。它在視覺模式下有效,其中它會變更所有選取文字的大小寫。
I 在將游標移動到行中的第一個非空白字元之後,開始插入模式。
A 在將游標移動到行尾之後,開始插入模式。
下一章:usr_05.txt 設定您的設定
版權:請參閱 手冊版權 vim:tw=78:ts=8:noet:ft=help:norl
主要
命令索引
快速參考