在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux下Vim編輯器的使用技巧

馬哥Linux運(yùn)維 ? 來(lái)源:博客園 ? 2025-04-01 17:36 ? 次閱讀

【Vim】常用總結(jié)?

簡(jiǎn)介?

24beea82-0d60-11f0-9310-92fbcf53809c.pngimage

什么是vim??

Linux下兩大編輯神器之一 vim

? Linux/Unix下使用最多的編輯器

? vi的改進(jìn)版

? 可能是最難上手的編輯器之一

為什么要學(xué)習(xí)vim??

都21世紀(jì)了,為什么還需要學(xué)習(xí)vim?

? 只要你用服務(wù)器,vim就是個(gè)必備技能

? 后端和運(yùn)維工程師必須掌握的編輯器,不然服務(wù)器上操作很尷尬

? 可以純鍵盤編輯,提升編輯效率

初識(shí)vim?

據(jù)說(shuō)Stackoverflow幫助過(guò)上百萬(wàn)開發(fā)者退出過(guò)vim!

1. 輸入vim命令進(jìn)入vim

2. 進(jìn)去之后似乎沒法輸入東西,起始默認(rèn)進(jìn)去是normal模式

3. 使用:q可以退出vim

開始編輯?

進(jìn)入編輯模式就可以像其他編輯器一樣編輯了

? 使用i(insert)進(jìn)入編輯模式,開始輸入文字

?i表示(insert),a(append),o(open a line below)

? 使用Esc可以退出編輯模式,又回到normal模式。

? 使用:wq保存退出

w(write),q(quit)

insert -> normal:使用Esc

normal -> insert:(小寫是操作字符,大寫是操作

?i:(insert)表示進(jìn)入insert編輯模式后,在當(dāng)前字符的前面插入

insert

?a:(append)表示進(jìn)入insert編輯模式后,在當(dāng)前字符后附加插入

append

?o:(open a line below)表示進(jìn)入insert編輯模式后,在當(dāng)前行下新啟一行插入

open a line below

?I:(insert before line)表示在當(dāng)前行的最前面插入

insert before line

?A:(append after line)表示在當(dāng)前行的最后附加插入

append after line

?O:(open a line above)表示在當(dāng)前行上新啟一行插入

append a line above

保存:

?:w:(write)寫入,保存

write

?:q:(quit)退出

quit

?:wq:(write and quit)保存并退出

write and quit

vim,為什么你有這么多模式?

怪異的vim模式?

vim和其他很多編輯器的區(qū)別在于多種模式

? 進(jìn)入vim默認(rèn)是normal(普通)模式?為什么不是編輯模式呢?

? 使用a(append)、i(insert)等進(jìn)入編輯模式

? 還有cmd命令模式和v(visual)可視化模式

為什么進(jìn)入vim不能插入-normal模式?

奇怪的是,為什么vim進(jìn)入之后不像其他編輯器一樣直接插入?

? 進(jìn)入Vim默認(rèn)是normal(普通)模式。使用Esc從插入回到普通模式

? 普通模式下可以進(jìn)行各種命令操作和移動(dòng)

? 大部分情況下你是在瀏覽而不是編輯,所以Vim默認(rèn)是normal

Insert(插入)模式?

插入模式下Vim可以直接編輯,和其他編輯器一樣

? 使用i(insert) 、a(append) 、o(open a line below)進(jìn)入插入模式

? 使用Esc退出插入模式到normal模式

Command(命令)模式?

Normal模式下輸入:之后執(zhí)行命令,比如保存退出:wq一氣呵成

? 顧名思義,執(zhí)行Vim命令,比如保存:w,退出:q

? 比如分屏::vs(vertical split),:sp(split)

? 比如使用::% s/foo/bar/g全局替換

%:表示本文件全部文本
g:表示全局替換

Visual(可視)模式?

Visual模式一般用來(lái)塊狀選擇文本(類比使用Alt+鼠標(biāo)拖動(dòng))

? Normal模式下使用v進(jìn)入visual選擇

? 使用V選擇行

? 使用ctrl+v進(jìn)行方塊選擇

vim編輯小技巧?

如何快速糾錯(cuò)(insert模式下)?

代碼就像人生,總是經(jīng)常出錯(cuò),需要我們快速修正

? 進(jìn)入Vim之后首先使用a/i/o之一進(jìn)入插入模式

?ctrl+h刪除上一個(gè)字符,ctrl+w刪除上一個(gè)單詞,ctrl+u刪除當(dāng)前行

快速切換insert和normal模式?

很多鍵盤的鍵位設(shè)置,Esc按起來(lái)不方便,不方便切換到normal

? 使用Ctrl+c代替Esc(但是可能會(huì)中斷某些插件)或者ctrl+[

?gi快速跳轉(zhuǎn)到你最后一次編輯的地方并進(jìn)入插入模式

? 在配置章節(jié)我們會(huì)講解如何映射方便的快捷鍵來(lái)替代Esc

vim快速移動(dòng)大法?

↓CloseCode↓

h          # 光標(biāo)左移,同  方向鍵
j          # 光標(biāo)下移,同  方向鍵
k          # 光標(biāo)上移,同  方向鍵
l          # 光標(biāo)右移,同  方向鍵
Ctrl+e       # 向上滾動(dòng)一行
Ctrl+y       # 向下滾動(dòng)一行
Ctrl+u       # 向上滾動(dòng)半屏 --> Move up 1/2 a screen
Ctrl+d       # 向下滾動(dòng)半屏 --> Move down 1/2 a screen
Ctrl+f       # 向下滾動(dòng)一屏 --> Move forward one full screen
Ctrl+b       # 向上滾動(dòng)一屏 --> Move back one full screen
0          # 跳到行首,數(shù)字 0,效用等同于  鍵
^          # 跳到從行首開始第一個(gè)非空白字符
$          # 跳到行尾,效用等同于  鍵
gg         # 跳到第一行,效用等同于 Ctrl+
G          # 跳到最后一行,效用等同于 Ctrl+
NG         # 跳到第 N 行,比如 10G 是移動(dòng)到第 10 行
:N         # 跳到第 N 行,比如 :10 是移動(dòng)到第 10 行
10%         # 移動(dòng)到文件 10% 處
N|         # 移動(dòng)到當(dāng)前行的 N 列
w          # 跳到下一個(gè)單詞開頭(word:標(biāo)點(diǎn)或空格分隔的單詞)
W          # 跳到下一個(gè)單詞開頭(Word:空格分隔的單詞)
e          # 跳到下一個(gè)單詞尾部(word:標(biāo)點(diǎn)或空格分隔的單詞)
E          # 跳到下一個(gè)單詞尾部(Word:空格分隔的單詞)
b          # 跳到上一個(gè)單詞開頭(word:標(biāo)點(diǎn)或空格分隔的單詞)
B          # 跳到上一個(gè)單詞開頭(Word:空格分隔的單詞)
ge         # 跳到前一個(gè)單詞結(jié)尾
)          # 向前移動(dòng)一個(gè)句子(句號(hào)分隔)
(          # 向后移動(dòng)一個(gè)句子(句號(hào)分隔)
}          # 向前移動(dòng)一個(gè)段落(空行分隔)
{          # 向后移動(dòng)一個(gè)段落(空行分隔)
       # 移動(dòng)到下一行首個(gè)非空字符
N      # 光標(biāo)向下移動(dòng) N 行
+          # 移動(dòng)到下一行首個(gè)非空字符(同回車鍵)
-          # 移動(dòng)到上一行首個(gè)非空字符
H          # 移動(dòng)到屏幕上部(H: High)
M          # 移動(dòng)到屏幕中部(M: Middle)
L          # 移動(dòng)到屏幕下部(L: Low)
      # 按住 Shift 按左鍵,向左移動(dòng)一個(gè)單詞
      # 按住 Shift 按右鍵,向右移動(dòng)一個(gè)單詞
       # 按住 Shift 按上鍵,向上翻頁(yè)
      # 按住 Shift 按下鍵,向下翻頁(yè)
gm         # 移動(dòng)到的行中間
gj         # 光標(biāo)向下移動(dòng)一個(gè)屏幕行(忽略自動(dòng)換行)
gk         # 光標(biāo)向上移動(dòng)一個(gè)屏幕行(忽略自動(dòng)換行)
zz         # 調(diào)整光標(biāo)所在行到屏幕中央
zt         # 調(diào)整光標(biāo)所在行到屏幕上部
zb         # 調(diào)整光標(biāo)所在行到屏幕下部

反人類的hjkl?

眾所周知,vim normal模式使用了反人類的hjkl來(lái)移動(dòng)

? 據(jù)說(shuō)編輯器作者在編寫vim的時(shí)候鍵盤還沒流行上下左右按鍵

?h(左) ,j(下) ,k(上) ,l(右) ,移動(dòng)也不會(huì)讓手指脫離主鍵盤區(qū)

? 相信我,逼著自己使用hjkl一段時(shí)間之后,你會(huì)體會(huì)到它非常有效率

使用hjkl?

只需要幾天的適應(yīng),你就可以熟練使用hjkl來(lái)移動(dòng)
24e3b75e-0d60-11f0-9310-92fbcf53809c.png

在單詞之間“飛舞”(normal模式下)?

在單詞之間移動(dòng)是我們?yōu)g覽操作中最常使用的命令

?w/W移到下一個(gè)word/WORD開頭。e/E下一個(gè)word/WORD尾

?b/B回到上一個(gè)word/WORD開頭,可以理解為backword

? word指的是以非空白符分割的單詞, WORD以空白符分割的單詞

行間搜索移動(dòng)?

同一行快速移動(dòng)的方式其實(shí)是搜索一個(gè)字符并且移動(dòng)到該字符

? 使用f{char}可以移動(dòng)到char字符上,t{char}移動(dòng)到char的前一個(gè)字符

f:(find)
t:(until)

[引用]

? 如果第一次沒搜到,可以用分號(hào)(;)/逗號(hào)(,)繼續(xù)搜該行下一個(gè)/上一個(gè)

? 大寫的F{char}表示反過(guò)來(lái)搜前面的字符

vim水平移動(dòng)?

如何快速移動(dòng)到一行的行首或者行尾呢?

?0移動(dòng)到行首第一個(gè)字符,^移動(dòng)到第一個(gè)非空白字符

^:在正則表達(dá)式中,表示行的開頭

?$移動(dòng)到行尾,g_移動(dòng)到行尾非空白字符

$:在正則表達(dá)式中,表示行的結(jié)尾

? 記住常用的0和$就可以滿足日常需求了

Vim垂直移動(dòng)?

我們還可以在句子(sentence)和段落(paragraph)間移動(dòng)(不常用)

? 使用括號(hào)()在句子間移動(dòng),你可以用:help (來(lái)查看幫助

? 使用{}在段落之間移動(dòng)

? 插件章節(jié)我們會(huì)講如何用easy-motion插件移動(dòng),這些命令就都不用記憶啦

Vim頁(yè)面移動(dòng)?

翻頁(yè)命令太多, 2/8定律,記住常見的就能滿足需求

?gg/G移動(dòng)到文件開頭和結(jié)尾,你可以使用ctrl+o快速返回

?nG移動(dòng)到文件第n行,可以配合命令使用,如dnG表示刪除到第n行

?H/M/L跳轉(zhuǎn)到屏幕的開頭(Head),中間(Middle)和結(jié)尾(Lower)

?Ctrl+u,ctrl+f上下翻頁(yè)(upword/forward)。zz把屏幕置為中間

什么是vim的text object?

↓CloseCode↓

0          # 到行首,數(shù)字 0
^          # 到行首非空字符,可以使用 0w 代替 ^,按鍵更方便
$          # 到行尾
iw         # 整個(gè)單詞 Word(不包括分隔符)
aw         # 整個(gè)單詞 Word(包括分隔符)
iW         # 整個(gè) Word(不包括分隔符)
aW         # 整個(gè) Word(包括分隔符)
is         # 整個(gè)句子 (s: sentence)(不包括分隔符)
ib         # 小括號(hào)內(nèi)(b: brackets)
ab         # 小括號(hào)內(nèi)(包含小括號(hào)本身)
iB         # 大括號(hào)內(nèi)
aB         # 大括號(hào)內(nèi)(包含大括號(hào)本身)
i)         # 小括號(hào)內(nèi)
a)         # 小括號(hào)內(nèi)(包含小括號(hào)本身)
i]         # 中括號(hào)內(nèi)
a]         # 中括號(hào)內(nèi)(包含中括號(hào)本身)
i}         # 大括號(hào)內(nèi)
a}         # 大括號(hào)內(nèi)(包含大括號(hào)本身)
i'         # 單引號(hào)內(nèi)
a'         # 單引號(hào)內(nèi)(包含單引號(hào)本身)
i"         # 雙引號(hào)內(nèi)
a"         # 雙引號(hào)內(nèi)(包含雙引號(hào)本身)
2i)         # 往外兩層小括號(hào)內(nèi)
2a)         # 往外兩層小括號(hào)內(nèi)(包含小括號(hào)本身)
2f)         # 到第二個(gè)小括號(hào)處
2t)         # 到第二個(gè)小括號(hào)前

Text Object(文本對(duì)象)?

如果你學(xué)過(guò)主流的編程語(yǔ)言,一定知道面向?qū)ο缶幊?/p>

? Vim里文本也有對(duì)象的概念,比如一個(gè)單詞,一段句子,一個(gè)段落

? 很多其他編輯器經(jīng)常只能操作單個(gè)字符來(lái)修改文本,比較低效

? 通過(guò)操作文本對(duì)象來(lái)修改要比只操作單個(gè)字符高效

文本對(duì)象:

? 單詞w(word)

? 句子s(sentence)

? 段落p(paragraph)

? 標(biāo)簽t(tag)

? 小括號(hào)b(bracket)、大括號(hào)B

文本對(duì)象操作方式?

之前我們已經(jīng)使用過(guò)文本對(duì)象了,回憶下dw(刪除一個(gè)單詞)

?[number] [text object]

? 或者 [number] [text object]

? number表示次數(shù),command是命令,d(delete),c(change),y(yank)

? text object是要操作的文本對(duì)象

通過(guò)示例來(lái)學(xué)習(xí)?

?iw表示inner word,如果鍵入viw命令,那么首先v將進(jìn)入選擇模式,然后iw將選中當(dāng)前單詞。

?aw表示around word,它不但會(huì)選中當(dāng)前單詞,還會(huì)包含當(dāng)前單詞之后的空格。

以下實(shí)例中的**[]表示作用范圍**:

?iw
This is a[test]sentence.

?aw
This is a **[test ]**sentence.

?iw
This is a[...test...]sentence.

?aw
This is a **[...test... ]**sentence.

?is
...sentence.[This is a sentence.]This...

?as
...sentence. **[This is a sentence. ]**This...
End of previous paragraph.

?ip
[This is a paragraph. It has two sentences.]
The next.
End of previous paragraph.

?ap
[This is a paragraph. It has two sentences.

]The next.

?ip
[hello world]

?ap
[hello world]

?i(ori)
1*([2+3])

?a(ora)
1*[(2+3)]

?i
The <**[tag]**>

?a
The[]

?i{ori}
some{[code block]}

?a{ora}
some[{code block}]

?i[ori]
some [[code block]]

?a[ora]
some[[code block]]

?i"
The "[best]"

?a"
The["best"]

?i'
The '[best]'

?a'
The['best']

vim快速增刪改查命令?

數(shù)字+命令+對(duì)象表示多次執(zhí)行命令,如2dw

或者命令+數(shù)字+對(duì)象,如d2w

Vim增加字符?

增加字符就是進(jìn)入插入模式,開始敲鍵盤吧

? 進(jìn)入插入模式編輯文本

? 使用a/i/o進(jìn)入插入模式

? 還記得A/I/O是什么作用么?

↓CloseCode↓

i          # 在光標(biāo)處進(jìn)入插入模式
I          # 在行首進(jìn)入插入模式
a          # 在光標(biāo)后進(jìn)入插入模式
A          # 在行尾進(jìn)入插入模式
o          # 在下一行插入新行并進(jìn)入插入模式
O          # 在上一行插入新行并進(jìn)入插入模式
gi         # 進(jìn)入到上一次插入模式的位置
        # 退出插入模式
Ctrl+[       # 退出插入模式,等價(jià)于 Esc 鍵

Vim快速刪除?

如何快速刪除一個(gè)字符或者單詞呢 ?

? Vim在normal模式下使用x快速刪除一個(gè)字符

? 使用d(delete)配合文本對(duì)象快速刪除一個(gè)單詞daw(delete around word)

dw:默認(rèn)為daw

?d和x都可以搭配數(shù)字來(lái)執(zhí)行多次

Vim快速修改?

相比刪除,更常用修改,一般是刪除之后改成我們期望的文本

? normal 模式下,常用有三個(gè),r(replace),c(change),s(substitute)

? 使用r可以替換一個(gè)字符。

? 使用s替換并進(jìn)入插入模式

? 使用c配合文本對(duì)象,我們可以快速進(jìn)行修改整個(gè)文本對(duì)象。如ci"、ciw

↓CloseCode↓

r          # 替換當(dāng)前字符
R          # 進(jìn)入替換模式,直至 Esc 離開
s          # 替換字符(刪除光標(biāo)處字符,并進(jìn)入插入模式,前可接數(shù)量)
S          # 替換行(刪除當(dāng)前行,并進(jìn)入插入模式,前可接數(shù)量)
cc         # 改寫當(dāng)前行(刪除當(dāng)前行并進(jìn)入插入模式),同 S
cw         # 改寫光標(biāo)開始處的當(dāng)前單詞
ciw         # 改寫光標(biāo)所處的單詞
caw         # 改寫光標(biāo)所處的單詞,并且包括前后空格(如果有的話)
c0         # 改寫到行首
c^         # 改寫到行首(第一個(gè)非零字符)
c$         # 改寫到行末
C          # 改寫到行尾(同 c$)
ci"         # 改寫雙引號(hào)中的內(nèi)容
ci'         # 改寫單引號(hào)中的內(nèi)容
cib         # 改寫小括號(hào)中的內(nèi)容
cab         # 改寫小括號(hào)中的內(nèi)容(包含小括號(hào)本身)
ci)         # 改寫小括號(hào)中的內(nèi)容
ci]         # 改寫中括號(hào)中內(nèi)容
ciB         # 改寫大括號(hào)中內(nèi)容
caB         # 改寫大括號(hào)中的內(nèi)容(包含大括號(hào)本身)
ci}         # 改寫大括號(hào)中內(nèi)容
cit         # 改寫 XML tag 中的內(nèi)容
cis         # 改寫當(dāng)前句子
c2w         # 改寫下兩個(gè)單詞
ct(         # 改寫到小括號(hào)前
x          # 刪除當(dāng)前字符,前面可以接數(shù)字,3x 代表刪除三個(gè)字符
X          # 向前刪除字符
dd         # 刪除(剪切)當(dāng)前行,并把刪除的行存到剪貼板里 --> Delete (cut) a line
d0         # 刪除(剪切)到行首
d^         # 刪除(剪切)到行首(第一個(gè)非零字符)
d$         # 刪除(剪切)到行末
D          # 刪除(剪切)到行末(同 d$)
dw         # 刪除(剪切)當(dāng)前單詞
diw         # 刪除(剪切)光標(biāo)所處的單詞
daw         # 刪除(剪切)光標(biāo)所處的單詞,并包含前后空格(如果有的話)
di"         # 刪除雙引號(hào)中的內(nèi)容
di'         # 刪除單引號(hào)中的內(nèi)容
dib         # 刪除小括號(hào)中的內(nèi)容
di)         # 刪除小括號(hào)中的內(nèi)容
dab         # 刪除小括號(hào)內(nèi)的內(nèi)容(包含小括號(hào)本身)
di]         # 刪除中括號(hào)中內(nèi)容
diB         # 刪除大括號(hào)中內(nèi)容
di}         # 刪除大括號(hào)中內(nèi)容
daB         # 刪除大括號(hào)內(nèi)的內(nèi)容(包含大括號(hào)本身)
dit         # 刪除 XML 中 tag 中的內(nèi)容
dis         # 刪除當(dāng)前句子
d2w         # 刪除下兩個(gè)單詞
dt(         # 刪除到小括號(hào)前
dgg         # 刪除到文件頭部
dG         # 刪除到文件尾部
d}         # 刪除下一個(gè)段落
d{         # 刪除上一個(gè)段落
Nd         # 刪除從當(dāng)前行開始的 N 行
:Nd         # 刪除第 N 行
:1,10d       # 刪除 1-10 行
J          # 將多行合并為一行
.          # 重復(fù)上一次操作
~          # 替換大小寫
g~iw        # 替換當(dāng)前單詞的大小寫
gUiw        # 將單詞轉(zhuǎn)成大寫
guiw        # 將當(dāng)前單詞轉(zhuǎn)成小寫
guu         # 全行轉(zhuǎn)為小寫
gUU         # 全行轉(zhuǎn)為大寫
<< ? ? ? ? ? ? ? ? ?# 減少縮進(jìn)
>>         # 增加縮進(jìn)
==         # 自動(dòng)縮進(jìn)。當(dāng)前文件所有行自動(dòng)縮進(jìn)對(duì)齊:gg=G
Ctrl+A       # 增加數(shù)字
Ctrl+X       # 減少數(shù)字

Vim查詢?

查詢單詞也是一個(gè)常用操作

? 使用/或者?進(jìn)行前向或者反向搜索

? 使用n/N跳轉(zhuǎn)到下一個(gè)或者上一個(gè)匹配

next

? 使用*或者#進(jìn)行當(dāng)前單詞的前向和后向匹配

*:在正則表達(dá)式中表示出現(xiàn)0次或多次。

↓CloseCode↓

/pattern      # 從光標(biāo)處向文件尾搜索 pattern
?pattern      # 從光標(biāo)處向文件頭搜索 pattern
n          # 向同一方向執(zhí)行上一次搜索
N          # 向相反方向執(zhí)行上一次搜索
%          # 匹配括號(hào)移動(dòng),包括 (),{},[]。結(jié)合以下兩個(gè)命令對(duì)程序員來(lái)說(shuō)是相當(dāng)強(qiáng)大(前提:需要把光標(biāo)先移到括號(hào)上)
*          # 向下搜索光標(biāo)所在的單詞
#          # 向前搜索光標(biāo)所在的單詞
f       # 向后搜索當(dāng)前行第一個(gè)為  的字符,2fv 可以找到第二個(gè) v 字符
F       # 向前搜索當(dāng)前行第一個(gè)為  的字符
t       # 向后搜索當(dāng)前行第一個(gè)為  的字符前
T       # 向前搜索當(dāng)前行第一個(gè)為  的字符前
;          # 重復(fù)上次的字符查找命令(f/t命令)
,          # 反轉(zhuǎn)方向查找上次的字符查找命令(f/t命令)
tx         # 搜索當(dāng)前行到指定 字符串 之前
fx         # 搜索當(dāng)前行到指定 字符串 之處

重復(fù)命令?

↓CloseCode↓

.          # 小數(shù)點(diǎn),即重復(fù)(Dot)命令,重復(fù)執(zhí)行上一次命令
N     # 重復(fù)某個(gè)命令 N 次,例如:10k,光標(biāo)上移 10 行

命令行模式?

搜索命令(如何搜索替換)?

Vim替換命令?

substitute命令允許我們查找并且替換掉文本,并且支持正則式

:[range]s(substitute)/{pattern}/{string}/[flags]

?range:表示范圍。比如:10,20表示10-20行,%表示本文件中所有的行。

?pattern:是要替換的模式,正則表達(dá)式

?string:是替換后文本

**注意:**此命令不僅能用來(lái)替換,還能用來(lái)刪除!如 刪除所有星號(hào)*,命令為:%s/*//g

替換范圍range?

你可以在命令之前設(shè)置一個(gè)范圍。以下是一些方法:

?m, n:表示范圍為從第 m 行到第 n 行

?1,:表示范圍為從第 1 行到當(dāng)前行

**注意:**第一行的行號(hào)是已知的,行號(hào)為 1;而最后一行的行號(hào)是未知的,所以我們只用給最后一行分配一個(gè)符號(hào)代表即可。

除了數(shù)字之外,還可以使用這些符號(hào)作為范圍:

?.:表示當(dāng)前行,可以省略。如.,3表示當(dāng)前行到第 3 行。

?$:表示文件中的最后一行。如3,$表示第 3 行到最后一行。

?+n:表示當(dāng)前行的后 n 行。3,+1或者3,.+1,.可以用或不用,表示第 3 行到當(dāng)前行后的 1 行。

?%:表示本文件中所有的行。

在 Vim 中,%通常表示整個(gè)文件。

示例:

?:1,5g/console/d匹配第 1 行和第 5 行之間的字符串"console"并刪除它們。

?:,5g/console/d如果逗號(hào)之前沒有地址,則從當(dāng)前行開始。它在當(dāng)前行和行 5 之間尋找字符串"console"并刪除它們。

?:3,g/console/d如果逗號(hào)后沒有地址,則以當(dāng)前行結(jié)束。它尋找第 3 行和當(dāng)前行之間的字符串"console"并刪除它們。

?:3g/console/d如果僅傳遞一個(gè)沒有逗號(hào)的地址,則它只執(zhí)行第 3 行的命令。它查看第 3 行,如果字符串"console",它將刪除它。

替換模式pattern?

請(qǐng)參照正則表達(dá)式

替換標(biāo)志位flag?

Flags有幾個(gè)常用的標(biāo)志

? 默認(rèn)為空,表示僅替換一行上的第一個(gè)匹配項(xiàng)

?g(global) 表示改變一行上的每個(gè)符合條件的匹配項(xiàng),全局范圍內(nèi)執(zhí)行

global

?c(confirm)表示確認(rèn) ,可以確認(rèn)或者拒絕修改

confirm

?n(number)報(bào)告匹配到的次數(shù)而不替換,可以用來(lái)查詢匹配次數(shù)

number::%s/xxx//gn可以查詢匹配次數(shù)

↓CloseCode↓

&  Reuse the flags from the previous substitute command. Must be passed as the first flag.
g  Replace all matches in the line.
c  Ask for substitution confirmation.
e  Prevent error message from displaying when substitution fails.
i  Perform case insensitive substitution
I  Perform case sensitive substitution

There are more flags that I do not list above. To read about all the flags, check out .:h s_flags

全局命令(如何對(duì)匹配行執(zhí)行命令)?

global命令實(shí)際上是分成兩步執(zhí)行:首先掃描[range]指定范圍內(nèi)的所有行,給匹配{pattern}的行打上標(biāo)記;然后依次對(duì)打有標(biāo)記的行執(zhí)行{command}命令,如果被標(biāo)記的行在對(duì)之前匹配行的命令操作中被刪除、移動(dòng)或合并,則其標(biāo)記自動(dòng)消失,而不對(duì)該行執(zhí)行{command}命令。{command}可以是一個(gè)ex命令,也可以是用|分隔的多個(gè)ex命令,這樣我們就可以對(duì)被標(biāo)記行,或從標(biāo)記行尋址到的行進(jìn)行多種不同的操作。

全局命令執(zhí)行步驟:

1. 掃描[range]指定范圍內(nèi)的所有行,給匹配{pattern}的行打上標(biāo)記;

2. 依次對(duì)打有標(biāo)記的行執(zhí)行{command}命令,如果被標(biāo)記的行在對(duì)之前匹配行的命令操作中被刪除、移動(dòng)或合并,則其標(biāo)記自動(dòng)消失,而不對(duì)該行執(zhí)行{command}命令。

全局命令(The Global Command)?

Vim 的全局命令用于同時(shí)在多行上運(yùn)行命令行命令。

特別注意:全局命令是對(duì)匹配的,來(lái)進(jìn)行行操作,操作對(duì)象是整個(gè)行,而不僅僅是匹配的那一部分字符。

全局命令具有以下語(yǔ)法:

?:[range]g(global)/{pattern}/{command}
該模式匹配包含該模式的所有行,類似于 substitute 命令中的模式。該命令可以是任何命令行命令。
全局命令的工作方式是對(duì)匹配pattern的每一行執(zhí)行command命令。

反向全局命令?

要在不匹配的行上運(yùn)行全局命令,可以運(yùn)行:

?:[range]g(global)!/{pattern}/{command}

? 或:v/{pattern}/{command}

通過(guò)示例來(lái)學(xué)習(xí)?

如果你有下列表達(dá)式:

↓CloseCode↓

const one = 1;
console.log("one: ", one);

const two = 2;
console.log("two: ", two);

const three = 3;
console.log("three: ", three);

要?jiǎng)h除所有包含“控制臺(tái)”的行,您可以運(yùn)行::g/console/d

結(jié)果:

↓CloseCode↓

const one = 1;

const two = 2;

const three = 3;

如果使用反向全局命令,則它將刪除所有不包含“console”的行

外部命令?

在Unix系統(tǒng)內(nèi)部,您會(huì)發(fā)現(xiàn)許多小型的,超專業(yè)化命令,每個(gè)命令只做一件事(而且能很好地完成)。您可以將這些命令鏈接在一起以共同解決一個(gè)復(fù)雜的問(wèn)題。如果可以從Vim內(nèi)部使用這些命令,那不是很好嗎?

答案是肯定的!在本章中,您將學(xué)習(xí)如何擴(kuò)展Vim以使其與外部命令無(wú)縫協(xié)作。

!命令?

Vim有一個(gè)!命令,可以執(zhí)行三件事:

1.將外部命令的STDOUT讀入當(dāng)前緩沖區(qū)。
2.將緩沖區(qū)的內(nèi)容作為STDIN寫入外部命令。
3.從Vim內(nèi)部執(zhí)行外部命令。

讓我們一個(gè)個(gè)認(rèn)真看一下。

將外部命令的標(biāo)準(zhǔn)輸出STDOUT讀入Vim?

將外部命令的STDOUT讀入當(dāng)前緩沖區(qū)的語(yǔ)法為:

↓CloseCode↓

:r !{cmd}

:r是Vim的讀命令。如果不帶!使用它,則可以使用它來(lái)獲取文件的內(nèi)容。如果當(dāng)前目錄中有文件file1.txt,運(yùn)行:

↓CloseCode↓

:r file1.txt

Vim會(huì)將file1.txt的內(nèi)容放入當(dāng)前緩沖區(qū)。

如果您運(yùn)行的:r命令后面跟一個(gè)!和外部命令,則該命令的輸出將插入到當(dāng)前緩沖區(qū)中。要獲取ls命令的結(jié)果,請(qǐng)運(yùn)行:

↓CloseCode↓

:r !ls

它返回類似下列的文本:

↓CloseCode↓

file1.txt
file2.txt
file3.txt

您可以從curl命令讀取數(shù)據(jù):

↓CloseCode↓

:r !curl -s 'https://jsonplaceholder.typicode.com/todos/1'

r命令也接受一個(gè)地址:

↓CloseCode↓

:10r !cat file1.txt

現(xiàn)在,將在第10行之后插入來(lái)自運(yùn)行cat file.txt的STDOUT。

將緩沖區(qū)內(nèi)容寫入外部命令?

:w命令除了保存文件,還可以用來(lái)將當(dāng)前緩沖區(qū)中的文本作為作為STDIN傳遞給外部命令。語(yǔ)法為:

↓CloseCode↓

:w !cmd

如果您具有以下表達(dá)式:

↓CloseCode↓

console.log("Hello Vim");
console.log("Vim is awesome");

確保在計(jì)算機(jī)中安裝了node,然后運(yùn)行:

↓CloseCode↓

:w !node

Vim將使用node執(zhí)行Javascript表達(dá)式來(lái)打印"Hello Vim"和"Vim is awesome"。

當(dāng)使用:w命令時(shí),Vim使用當(dāng)前緩沖區(qū)中的所有文本,與global命令類似(大多數(shù)命令行命令,如果不給它傳遞范圍,則僅對(duì)當(dāng)前行執(zhí)行該命令)。如果您通過(guò):w來(lái)指定地址:

↓CloseCode↓

:2w !node

"Vim"只使用第二行中的文本到node解釋器中。

:w !node和:w! node形式上區(qū)別很小,但功能上相隔千里。使用:w !node,您是將當(dāng)前緩沖區(qū)中的文本"寫入"到外部命令node中。用:w! node,則您將強(qiáng)制保存文件并將其命名為"node"。

執(zhí)行外部命令?

您可以使用bang命令從Vim內(nèi)部執(zhí)行外部命令。語(yǔ)法為:

↓CloseCode↓

:!cmd

要以長(zhǎng)格式查看當(dāng)前目錄的內(nèi)容,請(qǐng)運(yùn)行:

↓CloseCode↓

:!ls -ls

要終止在PID 3456上運(yùn)行的進(jìn)程,可以運(yùn)行:

↓CloseCode↓

:!kill -9 3456

您可以在不離開Vim的情況下運(yùn)行任何外部命令,因此您可以專注于自己的任務(wù)。

編解碼?

【Linux】Shell命令相關(guān)英文縮寫含義

? md5

? xxd

? base64

Java的.class字節(jié)碼文件?

**注意:**無(wú)論是字節(jié)碼文件也好,二進(jìn)制文件也罷,都不是給人類看的,編輯器逆向反編譯不出來(lái)是合理的。
可以使用md5來(lái)判斷是否為同一個(gè)文件

使用vim不方便看,可以下載jar下來(lái)丟到vscode里看

配合xxd查看并編輯二進(jìn)制文件?

用vim打開 test.bin,vim 的 -b 選項(xiàng)是告訴 vim 打開的是一個(gè)二進(jìn)制文件,不指定的話,會(huì)在后面加上 0x0a ,即一個(gè)換行符。

↓CloseCode↓

vim -b test.bin

在命令模式下鍵入::%!xxd

? 這里的冒號(hào):是進(jìn)入 Vim 的 command-line mode,跟一般的 Vim 指令相同,例如存檔(:w)等。

? 百分比符號(hào)%是指定 ex command-line ranges,代表整個(gè)文檔,也就是說(shuō)將整個(gè)文檔內(nèi)容都進(jìn)行轉(zhuǎn)換。

? 感嘆號(hào)!是指定 filter commands,filter command 是一個(gè)可從標(biāo)準(zhǔn)輸入讀取資料,經(jīng)過(guò)一些處理之后,輸出至標(biāo)準(zhǔn)輸出的外部指令,而這里我們使用 xxd 這一個(gè)打印 16 進(jìn)制數(shù)據(jù)的命令作為 filter command。

如果 vim 后面沒有加 -b 選項(xiàng)就會(huì)出現(xiàn)可惡的 0x0a:
2538d7de-0d60-11f0-9310-92fbcf53809c.pngimage 如果有 -b 選項(xiàng)就不會(huì)有這種情況:
2545c660-0d60-11f0-9310-92fbcf53809c.pngimage

過(guò)濾文本?

如果給!范圍,則可用于過(guò)濾文本。假設(shè)您有:

↓CloseCode↓

hello vim
hello vim

讓我們使用tr(translate)命令將當(dāng)前行大寫。運(yùn)行:

↓CloseCode↓

:.!tr '[]' '[]'

結(jié)果:

↓CloseCode↓

HELLO VIM
hello vim

命令分解:

?.!在當(dāng)前行執(zhí)行filter命令。

?!tr '[]' '[]'調(diào)用tr外部命令將所有小寫字符替換為大寫字符。

必須傳遞范圍以運(yùn)行外部命令作為過(guò)濾器。如果您嘗試在沒有.的情況下運(yùn)行上述命令(:!tr '[]' '[]'),則會(huì)看到錯(cuò)誤。

假設(shè)您需要使用awk命令刪除兩行的第二列:

↓CloseCode↓

:%!awk "{print $1}"

結(jié)果:

↓CloseCode↓

hello
hello

命令分解:

?:%!在所有行(%)上執(zhí)行filter命令。

?awk "{print $1}"僅打印匹配項(xiàng)的第一列。

您可以使用管道運(yùn)算符(|)鏈接多個(gè)命令,就像在終端中一樣。假設(shè)您有一個(gè)包含這些美味早餐的文件:

↓CloseCode↓

name price
chocolate pancake 10
buttermilk pancake 9
blueberry pancake 12

如果您需要根據(jù)價(jià)格對(duì)它們進(jìn)行排序,并且僅以均勻的間距顯示菜單,則可以運(yùn)行:

↓CloseCode↓

:%!awk 'NR > 1' | sort -nk 3 | column -t

結(jié)果:

↓CloseCode↓

buttermilk pancake 9
chocolate pancake 10
blueberry pancake 12

命令分解:

?:%!將過(guò)濾器應(yīng)用于所有行(%)。

?awk 'NR > 1'僅從第二行開始顯示文本。

?|鏈接下一個(gè)命令。

?sort -nk 3使用列3(k 3)中的值對(duì)數(shù)字進(jìn)行排序(n)。

?column -t以均勻的間距組織文本。

普通模式命令?

在普通模式下,Vim有一個(gè)過(guò)濾運(yùn)算符(!)。如果您有以下問(wèn)候:

↓CloseCode↓

hello vim
hola vim
bonjour vim
salve vim

要大寫當(dāng)前行和下面的行,可以運(yùn)行:

↓CloseCode↓

!jtr '[a-z]' '[A-Z]'

命令分解:

?!j運(yùn)行常規(guī)命令過(guò)濾器運(yùn)算符(!),目標(biāo)是當(dāng)前行及其下方的行。回想一下,因?yàn)樗瞧胀J竭\(yùn)算符,所以適用語(yǔ)法規(guī)則"動(dòng)詞+名詞"。

?tr '[a-z]' '[A-Z]'將小寫字母替換為大寫字母。

filter normal命令僅適用于至少一行以上的motion或至少一行以上的文本對(duì)象。如果您嘗試運(yùn)行!iwtr'[az]''[AZ]'(在內(nèi)部單詞上執(zhí)行tr),您會(huì)發(fā)現(xiàn)它在整個(gè)行上都應(yīng)用了tr命令,而不是光標(biāo)所在的單詞。

vim如何編輯命令(如 粘貼一個(gè)命令)?

問(wèn)題速成解決方式?

怎樣在vim的命令行中拷貝,粘貼?

在vim的普通模式下,輸入:進(jìn)入命令行模式,我們可以在屏幕下方輸入我們想讓vim執(zhí)行的命令。

有時(shí)候,我們需要在命令行中執(zhí)行拷貝粘貼,例如 我們想要查找替換正文中的特殊字符,但我們又不知道怎么在命令行中輸入這個(gè)特殊字符。
查找還好說(shuō),不一定非要在命令行中輸入這個(gè)特殊字符,只要把光標(biāo)放在這個(gè)特殊字符上,按*向下查找,按#向上查找。
但是如果我們要替換這個(gè)特殊字符,就必須在命令行中輸入它了,但是又不知道怎么輸入這個(gè)特殊字符,怎么辦?
答案是拷貝粘貼,先在正文中復(fù)制這個(gè)字符,然后粘貼在命令行中。

可是怎么在命令行中實(shí)現(xiàn)粘貼呢?別急,介紹一個(gè)好東西:命令行窗口。
在正常模式下,輸入q:,就打開了命令行窗口。
命令行窗口中都是我們輸入過(guò)的命令,在這個(gè)窗口中我們可以像編輯正文一樣編輯新的命令,或修改舊的命令。
因?yàn)橄窬庉嬈胀ň彌_區(qū)一樣,自然可以拷貝粘貼了。
編輯完之后,在想要執(zhí)行的命令上按回車,就ok了。
命令執(zhí)行后,命令行窗口也自動(dòng)關(guān)閉了。

命令行窗口?

“歷史記錄”窗口顯示以前使用的命令行命令的列表,但是不能從“歷史記錄”窗口執(zhí)行該命令。若要在瀏覽時(shí)執(zhí)行命令,請(qǐng)使用命令行窗口。有三個(gè)不同的命令行窗口:

↓CloseCode↓

q:  Command-line window
q/  Forward search window
q?  Backward search window

q(quick,快速的):

?q::命令行命令編輯,可以看到所有使用過(guò)的命令的歷史記錄

?q/:向前搜索命令編輯,可以看到所有使用過(guò)的向前搜索命令的歷史記錄

?q?:向后搜索命令編輯,可以看到所有使用過(guò)的向后搜索命令的歷史記錄

運(yùn)行q:以啟動(dòng)命令行命令的命令行窗口。Vim 將在屏幕底部啟動(dòng)一個(gè)新窗口。您可以使用 Up 或 Ctrl-p 鍵向上遍歷,使用 Down 或 Ctrl-n 鍵向下遍歷。如果按下回車,Vim 將執(zhí)行該命令。若要退出命令行窗口,請(qǐng)按 Ctrl-c、 Ctrl-w c 或鍵入: quit。

類似地,要啟動(dòng)用于搜索的命令行窗口,可以運(yùn)行向前搜索的q/和向后搜索的q?。

vim復(fù)制粘貼與寄存器的使用?

Vim Normal模式復(fù)制粘貼?

初學(xué)者會(huì)感覺Vim復(fù)制粘貼比較奇怪,先從normal模式學(xué)習(xí)

? normal模式下復(fù)制粘貼分別使用y(yank)和p(put) ,剪貼d(delete)和p(put)

? 我們可以使用v(visual)命令選中所要復(fù)制的地方,然后使用p粘貼

? 配合文本對(duì)象:比如使用yiw復(fù)制一個(gè)單詞,yy復(fù)制一行
Vim里的剪貼(Cut)復(fù)制(copy)粘貼(paste)
分別是delete/yank/put

↓CloseCode↓

p          # 粘貼到光標(biāo)后
P          # 粘貼到光標(biāo)前
v          # 進(jìn)入可視模式
y          # 復(fù)制標(biāo)記內(nèi)容
V          # 可視模式按行標(biāo)記
Ctrl+V       # 可視模式按列標(biāo)記
y$         # 復(fù)制當(dāng)前位置到本行結(jié)束的內(nèi)容
yy         # 復(fù)制當(dāng)前行 --> Yank (copy) a line
Y          # 復(fù)制當(dāng)前行,同 yy
yiw         # 復(fù)制當(dāng)前單詞
Nyy         # 復(fù)制光標(biāo)下 N 行內(nèi)容
ddp         # 剪切當(dāng)前行并粘貼(先刪除當(dāng)前行復(fù)制到寄存器,并粘貼)
v0         # 選中當(dāng)前位置到行首
v$         # 選中當(dāng)前位置到行末
viw         # 選中當(dāng)前單詞
vib         # 選中小括號(hào)內(nèi)的內(nèi)容
vi)         # 選中小括號(hào)內(nèi)的內(nèi)容
vi]         # 選中中括號(hào)內(nèi)的內(nèi)容
viB         # 選中大括號(hào)內(nèi)的內(nèi)容
vi}         # 選中大括號(hào)內(nèi)的內(nèi)容
vis         # 選中句子中的內(nèi)容
vab         # 選中小括號(hào)內(nèi)的內(nèi)容(包含小括號(hào)本身)
va)         # 選中小括號(hào)內(nèi)的內(nèi)容(包含小括號(hào)本身)
va]         # 選中中括號(hào)內(nèi)的內(nèi)容(包含中括號(hào)本身)
vaB         # 選中大括號(hào)內(nèi)的內(nèi)容(包含大括號(hào)本身)
va}         # 選中大括號(hào)內(nèi)的內(nèi)容(包含大括號(hào)本身)
:set paste     # 允許粘貼模式(避免粘貼時(shí)自動(dòng)縮進(jìn)影響格式)
:set nopaste    # 禁止粘貼模式
"?yy        # 復(fù)制當(dāng)前行到寄存器 ? ,問(wèn)號(hào)代表 0-9 的寄存器名稱
"?d3j        # 刪除光標(biāo)下三行內(nèi)容,并放到寄存器 ? ,問(wèn)號(hào)代表 0-9 的寄存器名稱
"?p         # 將寄存器 ? 的內(nèi)容粘貼到光標(biāo)后
"?P         # 將寄存器 ? 的內(nèi)容粘貼到光標(biāo)前
:registers     # 顯示所有寄存器內(nèi)容
:[range]y      # 復(fù)制范圍,比如 :20,30y 是復(fù)制 20 到 30 行,:10y 是復(fù)制第十行
:[range]d      # 刪除范圍,比如 :20,30d 是刪除 20 到 30 行,:10d 是刪除第十行
"_[command]     # 使用 [command] 刪除內(nèi)容,并且不進(jìn)行復(fù)制(不會(huì)污染寄存器)
"*[command]     # 使用 [command] 復(fù)制內(nèi)容到系統(tǒng)剪貼板(需要 Vim 版本有 clipboard 支持)

Insert模式下的復(fù)制粘貼?

很多人會(huì)使用鼠標(biāo)進(jìn)行選中,然后使用ctrl+v或者cmd+v粘貼

? 這個(gè)和其他的文本編輯器差不多,但是粘貼代碼有個(gè)坑

? 很多人在vimrc中設(shè)置了autoindent ,粘貼Python代碼縮進(jìn)錯(cuò)亂
這個(gè)時(shí)候需要使用:set paste和:set nopaste解決

?Ctrl-r {register}:可以粘貼寄存器{register}中的內(nèi)容。

系統(tǒng)剪貼板寄存器為"+

什么是Vim的寄存器??

你有沒有好奇? Vim在normal模式下復(fù)制/剪貼的內(nèi)容去了哪?

? Vim里操作的是寄存器而不是系統(tǒng)剪貼板,這和其他編輯器不同

? 默認(rèn)我們使用d刪除或者y復(fù)制的內(nèi)容都放到了“無(wú)名寄存器”

? 用x刪除一個(gè)字符放到無(wú)名寄存器,然后p粘貼,可以調(diào)換倆字符

深入寄存器(register)?

Vim不使用單一剪貼板進(jìn)行剪貼、復(fù)制與粘貼,而是多組寄存器

? 通過(guò)"{register}前綴可以指定寄存器,不指定默認(rèn)用無(wú)名寄存器

? 比如使用"ayiw復(fù)制一個(gè)單詞到寄存器a中,"bdd刪除當(dāng)前行到
寄存器b中

? Vim中""表示無(wú)名寄存器,缺省使用。""p其實(shí)就等同p

其他常見寄存器?

除了有名寄存器a-z, Vim中還有一些其他常見寄存器

? 復(fù)制專用寄存器"0:使用y復(fù)制文本同時(shí)會(huì)被拷到復(fù)制寄存器0

? 系統(tǒng)剪貼板"+:可以在復(fù)制前加上"+復(fù)制到系統(tǒng)剪貼板

? 其他一些寄存器比如"%:當(dāng)前文件名,".:上次插入的文本

:set clipboard=unnamed:可以讓你直接復(fù)制粘貼系統(tǒng)剪貼板內(nèi)容

強(qiáng)大的vim宏(macro)?

從需求說(shuō)起?

從一個(gè)需求說(shuō)起,給多行url鏈接加上雙引號(hào),你會(huì)怎么做呢?
25540d4c-0d60-11f0-9310-92fbcf53809c.png

什么是Vim宏(macro)?

很多使用Vim很久的Vimer都沒用過(guò)宏

? 宏可以看成是一系列命令的集合

? 我們可以使用宏「錄制」一系列操作,然后用于「回放」

? 宏可以非常方便地把一系列命令用在多行文本上

如何使用宏?

宏的使用分為錄制和回放,是不是有種拍電影的感覺

? Vim使用q{register}來(lái)錄制,同時(shí)也是q結(jié)束錄制

quick

? 使用q{register}選擇要保存的寄存器,把錄制的命令保存其中

? 使用q結(jié)束錄制

? 使用@{register}回放寄存器中保存的一系列命令

用宏解決剛才的問(wèn)題?

現(xiàn)在你知道宏怎么用了,如何解決剛才的問(wèn)題呢?

? 先給一行加上雙引號(hào),然后再回放到其他所有行

? 我們先使用q{register}開始錄制,給一行加上雙引號(hào),之后使用q退出

? 在剩下的所有行中回放錄制的宏(使用可視模式選中,然后使用宏)

需要使用v可視模式選擇所有url,再使用:normal在命令模式下使用normal模式下的命令。

不使用宏解決剛才的問(wèn)題?

可以通過(guò)可視模式選擇所有url
可以使用:normal,在命令模式使用normal模式的命令
:normal I"
:normal A"

vim補(bǔ)全大法?

什么是補(bǔ)全??

只要手速快,補(bǔ)全什么的都是浮云

? 補(bǔ)全是根據(jù)當(dāng)前環(huán)境上下文由編輯器“猜”你想輸入的東西

? 比如補(bǔ)全一個(gè)單詞、文件名,或者代碼中的函數(shù)名、變量名等

? Vim中提供了多種補(bǔ)全功能,還可以由插件拓展功能實(shí)現(xiàn)代碼補(bǔ)全

vim中常用的補(bǔ)全?

Vim中有很多種補(bǔ)全的方式

命令 補(bǔ)全類型
普通關(guān)鍵字
當(dāng)前緩沖區(qū)關(guān)鍵字
包含文件關(guān)鍵字
標(biāo)簽文件關(guān)鍵字
字典查找
整行補(bǔ)全
文件名補(bǔ)全
全能(Omni)補(bǔ)全

常見的三種補(bǔ)全類型?

記不住不用擔(dān)心,根據(jù)筆者經(jīng)驗(yàn),最常用的就三種

? 使用ctrl+n和ctrl+p補(bǔ)全單詞

? 使用ctrl+x和ctrl+f補(bǔ)全文件名

? 使用ctrl+x和ctrl+o補(bǔ)全代碼,需要開啟文件類型檢查,安裝插件

vim多文件操作?

Buffer Window Tab?

我們先來(lái)介紹幾個(gè)多文件操作相關(guān)的概念

? Buffer是指打開的一個(gè)文件的內(nèi)存緩沖區(qū)

? 窗口是Buffer可視化的分割區(qū)域

? Tab可以組織窗口為一個(gè)工作區(qū)
25726134-0d60-11f0-9310-92fbcf53809c.png

Buffer?

Buffer-什么是緩沖區(qū)??

? Vim 打開一個(gè)文件后會(huì)加載文件內(nèi)容到緩沖區(qū)

? 之后的修改都是針對(duì)內(nèi)存中的緩沖區(qū),并不會(huì)直接保存到文件

? 直到我們執(zhí)行:w(write)的時(shí)候才會(huì)把修改內(nèi)容寫入到文件里

Buffer切換?

那如何在buffer之間切換呢?

? 使用:ls會(huì)列舉當(dāng)前緩沖區(qū),然后使用:b n跳轉(zhuǎn)到第n個(gè)緩沖區(qū)

?:bpre、:bnext、:bfirst、:blast

? 或者用:b buffer_name加上tab補(bǔ)全來(lái)跳轉(zhuǎn)

Window窗口?

窗口是可視化的分割區(qū)域

? 一個(gè)緩沖區(qū)可以分割成多個(gè)窗口,每個(gè)窗口也可以打開不同緩沖區(qū)

?s水平分割,v垂直分割。或者:sp和:vs

? 每個(gè)窗口可以繼續(xù)被無(wú)限分 割(看你屏幕是否夠大)

分割窗口示例?

窗口分割效果
25853174-0d60-11f0-9310-92fbcf53809c.png

如何切換窗口?

切換窗口的命令都是使用Ctrl+w(window)作為前綴

命令 用途
w 在窗口間循環(huán)切換
h 切換到左邊的窗口
j 切換到下邊的窗口
k 切換到上邊的窗口
l 切換到右邊的窗口

如何重排窗口??

重排窗口可以改變窗口的大小:h window-resize查看文檔

命令 用途
= 使所有窗口等寬、等高
_ 最大化活動(dòng)窗口的高度
| 最大化活動(dòng)窗口的寬度
[N]_ 把活動(dòng)窗口的高度設(shè)為[N]行
[N]| 把活動(dòng)窗口的寬度設(shè)為[N]列

Tab(標(biāo)簽頁(yè))將窗口分組?

Tab是可以容納-系列窗口的容器(:h tabpage)

? Vim的Tab和其他編輯器不太一樣,可以想象成Linux的虛擬桌面

? 比如一個(gè)Tab全用來(lái)編輯Python文件, 一個(gè)Tab全是HTML文件

? 相比窗口, Tab一般用的比較少, Tab太多管理起來(lái)也比較麻煩

Tab(標(biāo)簽頁(yè))操作?

Tab使用不多,簡(jiǎn)單了解一下常用操作就好

命令 用途
:tabe[edit] {filename} 在新標(biāo)簽頁(yè)中打開
T 把當(dāng)前窗口移到一個(gè)新標(biāo)簽頁(yè)
:tabc [close] 關(guān)閉當(dāng)前標(biāo)簽頁(yè)及其中的所有窗口
:tabo [only] 只保留活動(dòng)標(biāo)簽頁(yè),關(guān)閉所有其他標(biāo)簽頁(yè)

Tab(標(biāo)簽頁(yè))切換操作?

如何切換不同的標(biāo)簽頁(yè),一般建立兩個(gè)就好,太多不好操作

Ex命令 普通模式命令 用途
:tabn[next] {N} {N}gt 切換到編號(hào)為{N} 的標(biāo)簽頁(yè)
:tabn[next] gt 切換到下一標(biāo)簽頁(yè)
:tabp[previous] gT 切換到上一標(biāo)簽頁(yè)

vim設(shè)置?

設(shè)置文件行號(hào):set nu,取消文件行號(hào):set nonu
設(shè)置高亮:syntax on

常用操作總結(jié)?

u:undo,撤銷上次命令
ctrl + r:redo,恢復(fù)撤銷的命令

https://blog.csdn.net/NickDeCodes/article/details/129170764

vim查看壓縮文件?

↓CloseCode↓

vim javaTest.jar

然后篩選壓縮文件內(nèi)的文件,按下回車,則可進(jìn)入文件

請(qǐng)你務(wù)必,一而再,再而三,三而不竭,千次萬(wàn)次,毫不猶豫地救自己于這世間水火。

鏈接:https://www.cnblogs.com/blknemo/p/14088271.html

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11392

    瀏覽量

    211787
  • VIM
    VIM
    +關(guān)注

    關(guān)注

    0

    文章

    135

    瀏覽量

    15487
  • 編輯器
    +關(guān)注

    關(guān)注

    1

    文章

    811

    瀏覽量

    31497

原文標(biāo)題:Vim 高效編輯技巧總結(jié):提升你的編程效率

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    linux中vi、vim編輯器常用的技巧

    今天浩道跟大家分享硬核干貨,關(guān)于linux中vi、vim編輯器常用的技巧!
    發(fā)表于 09-21 14:04 ?680次閱讀

    常用編輯器Vim編輯器

    Linux我們對(duì)文本進(jìn)行編輯,經(jīng)常用到的編輯器就是Vi/Vim,Vi/Vim命令眾多,功能強(qiáng)
    發(fā)表于 08-22 09:48

    嵌入式學(xué)習(xí)-常用編輯器Vim編輯器

    Linux我們對(duì)文本進(jìn)行編輯,經(jīng)常用到的編輯器就是Vi/Vim,Vi/Vim命令眾多,功能強(qiáng)
    發(fā)表于 08-23 09:12

    Linux怎么使用vim編輯器?

    VimLinux操作系統(tǒng)中最常用一個(gè)編輯器。如配置文件的更改、環(huán)境變量的設(shè)置等等基本上都是在這個(gè)vim編輯器上完成。所以這是
    發(fā)表于 04-03 07:22

    vim Linux文本編輯器

    vimLinux文本編輯器vim——最強(qiáng)大的文本編輯器——擺脫鼠標(biāo)vi—vim—gvim三種模式:①命令模式:yy(復(fù)制)、p(粘貼)、dd(刪除)、u(恢復(fù))②插入模式:i/a(進(jìn)
    發(fā)表于 12-15 06:30

    linux文本編輯器工具下載

    linux文本編輯工具:VIM是優(yōu)秀的開源文本編輯器,是Linux/UNIX用戶非常常用的文本編輯
    發(fā)表于 06-02 22:30 ?31次下載

    VIM編輯器學(xué)習(xí)

     Vim是一個(gè)類似于Vi的文本編輯器,不過(guò)在Vi的基礎(chǔ)上增加了很多新的特性,Vim普遍被推崇為類Vi編輯器中最好的一個(gè),事實(shí)上真正的勁敵來(lái)自Emacs的不同變體?!?
    發(fā)表于 08-11 16:58 ?1080次閱讀

    Linux系統(tǒng)vi(vim編輯器命令使用教程

    vi(vim)是上Linux非常常用的代碼編輯器,很多Linux發(fā)行版都默認(rèn)安裝了vi(vim)。vi(
    的頭像 發(fā)表于 10-12 16:53 ?4629次閱讀

    Vim更現(xiàn)代直觀的Linux文本編輯器

    一些流行的命令行文本編輯器包括 Vi、Vim 和 Nano。這些工具非常流行,它們預(yù)裝在大多數(shù) Linux 發(fā)行版中。但是,某些編輯器(如 Vi 或
    的頭像 發(fā)表于 02-24 10:08 ?1152次閱讀

    vim編輯器操作指令大全

    vim編輯器的完整操作命令 在Linux,可以鍵入vimtutor命令,有一個(gè)包含實(shí)操的vim教程。 1.VI的三種命令模式
    發(fā)表于 04-28 16:25 ?0次下載

    你會(huì)使用 Linux 編輯器 vim 嗎?

    vim:是一款編輯器,只負(fù)責(zé)寫代碼;相當(dāng)于 windows 的記事本;
    的頭像 發(fā)表于 05-10 18:21 ?981次閱讀
    你會(huì)使用 <b class='flag-5'>Linux</b> <b class='flag-5'>編輯器</b> <b class='flag-5'>vim</b> 嗎?

    linux怎么執(zhí)行vim編輯的程序

    Linux中,你可以通過(guò)以下步驟執(zhí)行Vim編輯器中編寫的程序: 打開終端或命令行界面。 使用Vim編輯器打開你的程序文件。假設(shè)你的程序文件
    的頭像 發(fā)表于 11-26 15:45 ?1321次閱讀

    linux使用vim新建并編輯文件

    Linux系統(tǒng),Vim是一款功能強(qiáng)大的文本編輯器。它可以用于新建并編輯文件,具有很多高級(jí)功能和快捷鍵。下面是關(guān)于如何在
    的頭像 發(fā)表于 11-28 15:17 ?3796次閱讀

    vim編輯器如何使用

    Vim編輯器是一個(gè)功能強(qiáng)大的文本編輯器,它基于Vi進(jìn)行改進(jìn),并增加了許多新特性。Vim編輯器的使用主要涉及其不同的工作模式及相應(yīng)操作。以下是
    的頭像 發(fā)表于 08-30 14:58 ?684次閱讀

    vim編輯器命令模式使用方法

    文本。 1. Vim編輯器概述 Vim(Vi IMproved)是一款高度可定制的文本編輯器,起源于Vi編輯器。
    的頭像 發(fā)表于 08-30 15:01 ?754次閱讀
    主站蜘蛛池模板: 欧美xxxx做受欧美88bbw | 黄色免费在线网站 | 51成人网| 5252a我爱haose01亚洲 | 夜夜操天天 | 好男人www社区影视在线 | 亚洲欧洲色 | 久久六月丁香婷婷婷 | 调教双性学霸美人 | 黄色一区二区三区 | 国产在线观看www鲁啊鲁免费 | 1000部啪啪勿入十八免费 | 免费国产在线视频 | 91视频-88av| 狠狠色婷婷狠狠狠亚洲综合 | 91插插视频| 四虎最新地址 | 午夜影院美女 | 综合伊人 | 天天综合网天天做天天受 | 美女bbbb视频| 亚洲色图久久 | 欧美二级黄色片 | 狠狠操夜夜 | 人人射人人干 | 日本一区二区三区不卡在线看 | 天天爽夜夜爽精品视频一 | 32pao强力打造免费高速高清 | 天天天天做夜夜夜夜做 | ts人妖系列在线专区 | 欧美午夜性| 欧美在线成人午夜影视 | 国产精品单位女同事在线 | 美女拍拍拍黄色 | 毛片免费高清免费 | 欧美色图一区 | 久热国产精品视频 | 婷婷久久综合九色综合九七 | 免费人成在观看 | 377p亚洲欧洲日本大胆色噜噜 | 狠狠干狠狠爱 |