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
排版目前行。如帶計數排版對應多行。
相關文章:
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!