Vim 刪除和修改文本篇
分類
說明
本篇主要分享刪除和修改文字的命令。
刪除文本
["x]x
刪除 [count] 個遊標之下和之後的字元 [到暫存器 x 裡]。和 dl 相同。
["x]X
刪除 [count] 個遊標之前的字元 [到暫存器 x 裡]。和 dh 相同。
["x]d{motion}
刪除 {motion} 動作跨越的文字 [到暫存器 x 裡]。
["x]dd
刪除 [count] 行 [到暫存器 x 裡]。
["x]D
刪除遊標所在的字元到行尾及其後的 [count]-1 行 [到暫存器 x 裡]。
和 d$ 同義。
:[range]d[elete] [x]
刪除 [range] 範圍的行 (預設: 目前行) [到暫存器 x 裡]。
範例
:1,3d
刪除1到3行。
:/foo/,/bar/-1d
刪除從搜尋到「foo」到搜尋到「bar」的上一行。
:/foo/+d
刪除搜尋到「foo」的下一行。
:.,$d x
從當前行刪除到最後一行到暫存器 x。
:[range]d[elete] [x] {count}
從 [range] 指定的範圍開始,刪除 {count} 行 (預設: 目前行) [到暫存器 x 裡]。
J
連接 [count] 行,但至少包含兩行。
刪除縮進,插入不多於兩個的空格。
在緩衝區末行此操作會失敗。
[count] 如果過多,會自行縮減至餘下可用的行。
{Visual}J
連接高亮行,但至少包含兩行。刪除縮進,插入不多於兩個的空格。
gJ
連接 [count] 行,但至少包含兩行。不插入或刪除任何空格。
{Visual}gJ
連接高亮行,但至少包含兩行。不插入或刪除任何空格。
[range]j[oin][!] [flags]
連接 [range] 範圍的行。和 J 相同,但如有 [!] 時,連接不會插入或刪除任何空格。
如果 [range] 包括相同的開始和結束行,則該指令不做任何事。
預設行為是連接當前行與下一行。
:[range]j[oin][!] {count} [flags]
連接 [range] 開始的 {count} 行 (預設: 目前行)。和 J 相同,但如有 [!] 時,連接不會插入或刪除任何空格。
範例
:1,10j!
合併1至10行,並保留空格。
刪除並插入
R
進入替換模式: 每個輸入的字元替代一個現有的字元,從遊標所在的位置開始。重複替換輸入的文字 [count] - 1 次。
["x]c{motion}
將 {motion} 跨過的文字刪除 [到暫存器 x 裡] 並開始插入。
["x]cc
刪除 [count] 行 [到暫存器 x 裡] 並開始插入。
["x]C
從目前遊標位置刪除到行尾,再刪除 [count]-1 行 [到暫存器 x 裡],並開始插入。和 c$ 等價。
["x]s
刪除 [count] 個字元 [到暫存器 x 裡],並開始插入。
["x]S
刪除 [count] 行 [到暫存器 x 裡] 並開始插入。和 cc 等價。
備註
- 你可以用
<Esc>退出插入和替換模式。 {motion}可以參考 Vim 移動篇。
簡單修改
r{char}
把遊標下的字元換成 {char}。
~
切換遊標下字元的大小寫,並把遊標向右移。如果給出 [count],應用在那麼多數目的字元上。
g~{motion}
切換 {motion} 跨越的文字的大小寫。
g~g~
g~~
切換目前行的大小寫。
gU{motion}
使 {motion} 跨越的文字成為大寫。
gUgU
gUU
使得當前行成為大寫。
gu{motion}
使 {motion} 跨越的文字成為小寫。
gugu
guu
使得當前行成為小寫。
複雜修改
!{motion}{filter}
用外部程序 {filter} 過濾 {motion} 跨越的多行。
!!{filter}
用外部程序 {filter} 過濾 [count] 行。
{Visual}!{filter}
用外部程序 {filter} 過濾高亮行。
:{range}![!]{filter} [!][arg]
用外部程序 {filter} 過濾 {range} 指定的多行。
Vim 把可選的驚嘆號替換成最後一次使用的命令,並附加上可選的參數 [arg]。
={motion}
以 equalprg 選項指定的外部程序過濾 {motion} 跨越的多行。如果 equalprg 選項為空 (預設),使用內部的排版機制 C-indenting 和 lisp,除非 indentexpr 非空,此時使用 indent-expression 機制來代替。反之,如果 Vim 編譯時沒有包含內部排版機制,最後手段是使用外部的 indent 程序。
==
和 ={motion} 類似,過濾 [count] 行。
{Visual}=
和 ={motion} 類似,過濾高亮行。
遞增與遞減
CTRL-A
把目前遊標之上或之後的數值或字母加上 [count]。
CTRL-X
把目前遊標之上或之後的數值或字母減去 [count]。
將文本左移或右移
<{motion}
將 {motion} 跨越的多行左移 shiftwidth 列。
範例
<%
將跨越對應的括號左移 shiftwidth 列。
<<
將 [count] 行左移 shiftwidth 列。
{Visual}[count]<
將高亮行左移 [count] 個 shiftwidth 列。
>{motion}
將 {motion} 跨越的多行右移 shiftwidth 列。
範例
>}
將跨越到段落結尾右移 shiftwidth 列。
>>
將 [count] 行右移 shiftwidth 列。
{Visual}[count]>
將高亮行右移 [count] 個 shiftwidth 列。
:[range]<
將 [range] 指定的多行左移 shiftwidth 列。多個 < 左移多個 shiftwidth 列。
:[range]< {count}
左移 [range] 開始的 {count} 行 shiftwidth 列 (預設從當前行 cmdline-ranges)。多個 < 左移多個 shiftwidth 列。
:[range]>
將 [range] 指定的多行右移 shiftwidth 列。多個 > 右移多個 shiftwidth 列。
:[range]> {count}
右移 [range] 開始的 {count} 行 shiftwidth 列 (預設從當前行 cmdline-ranges)。多個 > 右移多個 shiftwidth 列。
複製並移動文本
["x]y{motion}
抽出 {motion} 跨越的文本 [到暫存器 x]。
["x]yy
抽出 [count] 行 [到暫存器 x]。
["x]Y
抽出 [count] 行 [到暫存器 x] (同 yy)。
:[range]y[ank] [x]
抽出 [range] 所指定的行 [到暫存器 x]。
範例
:1,5 y a
抽出1-5行到暫存器 a。
:[range]y[ank] [x] {count}
從 [range] 的最後一行開始 (預設: 當前行) 抽出 {count} 行 [到暫存器 x]。
範例
:1,5 y a 3
抽出5-7行到暫存器 a。
["x]p
[從暫存器 x] 放置文字在遊標之後 [count] 次。
["x]P
[從暫存器 x] 放置文字在遊標之前 [count] 次。
["x]gp
如同 p,但遊標停留在新文字之後,類似 pl。
["x]gP
如同 P,但遊標停留在新文字之後,類似 Pl。
:[line]pu[t] [x]
查看幫助文件: :help :put
[從暫存器 x] 放置文本在行號 [line] (預設為目前行) 之後。
如果未指定暫存器,則取決於 clipboard 選項,大概意思是會指向剪貼簿的暫存器,只是剪貼簿儲存在哪個暫存器則要取決於 clipboard 選項,詳細說明可參考幫助文件。
:[line]pu[t]! [x]
[從暫存器 x] 放置文本在行號 [line] (預設為目前行) 之前。
["x]]p
["x]]<MiddleMouse>
類似 p,但調整目前行的縮排。
["x][P
["x]]P
["x][p
["x][<MiddleMouse>
類似 P,但調整目前行的縮排。
:[range]co[py] {address}
把 [range] 指定的行複製到 {address} 給出的行之下。
範例
:1,10 co 20
把1至10行複製到第20行之下。
:1,3co4
複製1到3行到第4行之下。
:t
和 :copy 等價。
範例
%t$
複製整份文件到文件末端。
:[range]m[ove] {address}
把 [range] 指定的行移到 {address} 給出的行之下。
範例
:1,3m4
將1到3行移動到第4行之下。
備註
- 抽出類似於複製,放置類似於貼上。
文本排版
:[range]ce[nter] [width]
在 [range] 指定範圍的行和 [width] 限定的列 (預設為 textwidth,如其為 0,則取 80) 範圍內的文本居中對齊。
:[range]ri[ght] [width]
在 [range] 指定範圍的行和 [width] 限定的列 (預設為 textwidth,如其為 0,則取 80) 範圍內的文本靠右對齊。
:[range]le[ft] [indent]
在 [range] 指定範圍的行的文本靠左對齊。其縮排的距離可由 [indent] 設定 (預設為 0)。
gq{motion}
對 {motion} 動作跨越的行進行排版。
gqgq
gqq
排版目前行。如帶計數排版對應多行。
相關文章:
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!