煙臺網(wǎng)站改版網(wǎng)站快速收錄
文章目錄
- L29 Exercise 08 - Text Objects
- 1 訓(xùn)練目標(biāo)
- 2 操作指令
- 2.1. 打開 textobjectspractice.txt 文件
- 2.2. 單詞對象練習(xí) Word Objects
- 2.3. 區(qū)塊對象 `( )` 練習(xí) Block Object ( )
- 2.4. 引用字符串練習(xí) Quoted Strings
- 2.5. 區(qū)塊對象 `[ ]` 練習(xí) Block Object [ ]
- 2.6. 區(qū)塊對象 `< >` 練習(xí) Block Object < >
- 2.7. 標(biāo)簽對象練習(xí) Tag Objects
- 2.8. 區(qū)塊對象 `{ }` 練習(xí) Block Object { }
- 2.9. 句子對象練習(xí) Sentence Objects
- 2.10. 段落對象練習(xí) Paragraph Objects
- 3 退出 Vim
- S07L30 Exercise 08 - Text Objects - Walkthrough 練習(xí)點評課
寫在前面
本篇為上節(jié)課 Vim 文本對象操作的同步練習(xí),已根據(jù)英文表述進行了全文翻譯,方便今后快速查找、練習(xí)。從文本的增刪改、再到上一章的查找檢索替換、再到本節(jié)的文本對象操作,每一部分要么講解十分詳細(xì),要么加大練習(xí)量,足以看出這些知識點在 Vim 中的核心地位。這就是刻意思考后的刻意練習(xí),望各位著眼長遠(yuǎn),且行且珍惜。
L29 Exercise 08 - Text Objects
1 訓(xùn)練目標(biāo)
熟悉 Vim
中的各類文本對象。1
2 操作指令
2.1. 打開 textobjectspractice.txt 文件
用 Vim
打開源碼包內(nèi)的練習(xí)文件 textobjectspractice.txt
(默認(rèn)解壓到 Downloads
文件夾下):
cd Downloads
cd vimclass
vim textobjectspractice.txt
2.2. 單詞對象練習(xí) Word Objects
將光標(biāo)定位到首行單詞 Time
的任意位置,例如按 FI 定位到最近的 i
字符下。然后按 DAW 刪除該單詞。注意觀察,此時整個單詞都被刪除了,與使用 DW 刪除的結(jié)果不同。
接下來再將單詞 Traveller
改為 tourist
。具體做法:用 CIW 更改內(nèi)部單詞(inner word),然后輸入 tourist
。最后按 Escape 鍵返回常規(guī)模式。
2.3. 區(qū)塊對象 ( )
練習(xí) Block Object ( )
按 W 將光標(biāo)移至左小括號位置,然后將括號內(nèi)的文本改為 as we will call him
。具體做法:按 CI( 或 CI) 變更該區(qū)塊內(nèi)的文字內(nèi)容。注意觀察,此時光標(biāo)剛好位于小括號內(nèi),接著輸入 as we will call him
,再按 Escape 鍵返回常規(guī)模式。
此時文檔第一行如下所示:
The tourist (as we will call him) was expounding.
再定位到如下文本行,并令光標(biāo)處于小括號內(nèi)部、或就在小括號上:
print("The weatherman said, 'This weekend will be warm,' but that was a lie.")
這是其中一種實現(xiàn)方案:按 /( + Enter。接著,試通過三個字符的組合命令刪除這一整塊內(nèi)容(即 "The weatherman said, 'This weekend will be warm,' but that was a lie."
)。該命令為 DA( 或者 DA)。
2.4. 引用字符串練習(xí) Quoted Strings
光標(biāo)移至下一行,并將其定位到雙引號內(nèi)的任意位置(例如使用 /" + Enter)。然后將下列文字:
print("The weatherman said, 'This weekend will be warm,' but that was a lie.")
改為:
print("It was cold!")
具體做法:鍵入 CI",并輸入 It was cold!
,再按 Escape 鍵返回常規(guī)模式。
接著移至下一行,這次需要將單引號內(nèi)的文字由 'This weekend will be warm,'
改為 'It is hot outside,'
。為此,先用 /‘ + Enter 進行正向搜索,然后輸入 CI’,并將原文本改為 It is hot outside,
。最后按 Escape 鍵返回常規(guī)模式。
2.5. 區(qū)塊對象 [ ]
練習(xí) Block Object [ ]
快速刪除下列括號內(nèi)所有文字內(nèi)容。這是刪除前的原始文本:
scripts=[ 'bin/backup','bin/backup-all','bin/backup-db-only','bin/backup-files-only' ]
刪除后將變?yōu)?#xff1a;
scripts=[]
先將光標(biāo)定位到括號內(nèi)的任意位置,例如通過檢索 bin
實現(xiàn):執(zhí)行命令 /bin
+ Enter。然后,按 DI[ 或者 DI] 刪除方括號內(nèi)的所有內(nèi)容。
2.6. 區(qū)塊對象 < >
練習(xí) Block Object < >
按 JJ 將光標(biāo)移至如下這行:
<yank_me>
接著,輸入 "iyi>
或者 "iyi<
,將尖括號內(nèi)的文本復(fù)制到 "i
寄存器中。然后通過命令 :reg i
+ Enter 查看寄存器 "i
中的內(nèi)容是否為 yank_me
。
然后,再連同尖括號本身,將文本 <yank_me>
復(fù)制后存入寄存器 "a
。具體做法:輸入命令 "aya<
或 "aya>
,并通過命令 :reg a
+ Enter 進行確認(rèn),看看寄存器中的內(nèi)容是否為 <yank_me>
。
2.7. 標(biāo)簽對象練習(xí) Tag Objects
試將下列文本行中的 Linux Training Academy
改為 LTA
。改動前的原始文本如下:
<p><a href="https://linuxtrainingacademy.com">Linux Training Academy</a></p>
這是變更后的效果:
<p><a href="https://linuxtrainingacademy.com">LTA</a></p>
注意觀察,目標(biāo)文本位于 HTML 標(biāo)簽 <a>
內(nèi)部。為此,需要先將光標(biāo)定位到 <a>
標(biāo)簽內(nèi),例如通過 /H + Enter 實現(xiàn)。然后按 CIT,即在標(biāo)簽內(nèi)變更內(nèi)容(change inside tag),然后輸入 LTA
+ Escape。
下一段練習(xí)文本是 XML 格式的,改動前如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<CATALOG><CD><TITLE>Jazz At Massey Hall</TITLE><ARTIST>The Quintet</ARTIST></CD><CD><TITLE>Blue Train</TITLE><ARTIST>John Coltrane</ARTIST></CD><CD><TITLE>Saxophone Colossus</TITLE><ARTIST>Sonny Rollins</ARTIST></CD>
</CATALOG>
試將 CATALOG
中標(biāo)題為 Jazz At Massey Hall
的 CD 條目完整刪除,改動后的效果如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<CATALOG><CD><TITLE>Blue Train</TITLE><ARTIST>John Coltrane</ARTIST></CD><CD><TITLE>Saxophone Colossus</TITLE><ARTIST>Sonny Rollins</ARTIST></CD>
</CATALOG>
要刪除 <CD>
標(biāo)簽,需要先將光標(biāo)定位到包含 Jazz At Massey Hall
的條目對應(yīng)的 <CD>
或 </CD>
位置。接著輸入 DAT,表示刪除該標(biāo)簽(delete a tag)。注意:如果光標(biāo)定位到其他地方,可能只會刪除內(nèi)部嵌套的標(biāo)簽 <TITLE>
或者 <ARTIST>
,而不是題目要求的整個 <CD>
標(biāo)簽。
2.8. 區(qū)塊對象 { }
練習(xí) Block Object { }
試對如下這段文字進行相關(guān)文本對象操作:
musicians = {'Charlie Parker': 'alto sax','John Coltrane': 'tenor sax','Sonny Rollins': 'tenor sax'
}
使其最終變?yōu)?#xff1a;
musicians = { }
具體做法:先將光標(biāo)定位到 { }
區(qū)塊的任意位置,例如檢索關(guān)鍵字 alto
,鍵入命令 /ALTO + Enter。然后輸入 DI{ 或 DI} 刪除該區(qū)塊內(nèi)的文本,此處光標(biāo)應(yīng)位于下列內(nèi)容所示的右大括號 }
位置:
musicians = {
}
按 K 令光標(biāo)上移一行,然后按 ShiftJ 合并這兩行即可。
2.9. 句子對象練習(xí) Sentence Objects
復(fù)制下列句子內(nèi)容并存入寄存器 "s
中。將光標(biāo)定位到這句話的任意位置:
Praesent rutrum purus ultricies, dignissim massa id, elementum felis.
注意觀察,這句話并不是真正意義上的句子。切記,Vim
關(guān)注的是文本對象的邊界,而非邊界內(nèi)的文字內(nèi)容。句子是通過是否由標(biāo)點符號 .
、!
或者 ?
結(jié)尾判定的。后面可以緊跟一個行終止符(the end of a line)或者一個空格或制表符。
按 "SYAS 將這句文本復(fù)制到寄存器 "s
中,并通過命令 :reg s
+ Enter 進行確認(rèn)。
2.10. 段落對象練習(xí) Paragraph Objects
按 DAP 刪除整個段落。
3 退出 Vim
若要放棄文件變更以便下次重新練習(xí),使用退出命令 :q!
+ Enter。
S07L30 Exercise 08 - Text Objects - Walkthrough 練習(xí)點評課
無增補知識點,多思多練即可。
本節(jié)練習(xí)另附精美排版 PDF 格式,閱讀體驗更佳,詳見:
vimclass/Exercise-08-TextObjects.pdf
??