自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

vi編輯器使用技巧:十個(gè)令人刮目相看的超酷命令

系統(tǒng) Linux
本文介紹10個(gè)不太為人所知的vi命令,所有真正的vi用戶都應(yīng)該掌握它們。在本文中討論的沒命令可以簡(jiǎn)化您目前采用的操作方法,讓您的工作方式更高效,或者讓您能夠完成原來(lái)不知道可以用 vi 完成的操作。

在使用 vi 編輯器時(shí)—無(wú)論是初次使用的用戶,還是有經(jīng)驗(yàn)的用戶——大多數(shù)人往往只掌握核心命令集,這些命令可以執(zhí)行最常用的功能:導(dǎo)航或保存文件;插入、更新、刪除或搜索數(shù)據(jù);退出但不保存修改。

但是,vi 編輯器極其強(qiáng)大,特性和功能非常豐富。即使在多年使用 vi 之后,您仍然可能會(huì)發(fā)現(xiàn)有不知道的新命令。本文討論的命令就屬于不太為人所知的命令,但是它們可以簡(jiǎn)化您目前采用的操作方法,讓您的工作方式更高效,或者讓您能夠完成原來(lái)不知道可以用 vi 完成的操作。

打開和關(guān)閉行號(hào)

vi 編輯器的許多選項(xiàng)可以控制編輯會(huì)話的外觀和感覺。使用 :set 命令修改 vi 中的會(huì)話設(shè)置。按 Escape 鍵進(jìn)入命令模式之后,可以使用 :set all 命令顯示選項(xiàng)和設(shè)置的列表。

可以設(shè)置的選項(xiàng)之一是 number,它的作用是打開和關(guān)閉行號(hào)(見 清單 1)。

清單 1. 打開行號(hào)之前

#
# Internet host table
#
::1 localhost
127.0.0.1 localhost loghost
192.168.0.6 centos5
192.168.0.10 appserv
192.168.0.11 webserv
192.168.0.12 test
192.168.0.5 solaris10 # Added by DHCP
~
~
~
:set number

這個(gè)命令讓 vi 在當(dāng)前編輯的文件中的每個(gè)記錄上顯示行號(hào)。讓 vi 進(jìn)入命令模式之后,可以輸入 :set number 并按回車來(lái)打開行號(hào)(見 清單 2)。

清單 2. 打開行號(hào)之后

1 #
2 # Internet host table
3 #
4 ::1 localhost
5 127.0.0.1 localhost loghost
6 192.168.0.6 centos5
7 192.168.0.10 appserv
8 192.168.0.11 webserv
9 192.168.0.12 test
10 192.168.0.5 solaris10 # Added by DHCP
~
~
~
:set number

可以使用 :set nonumber 命令關(guān)閉行號(hào)。還可以使用這個(gè)命令和 :set number 命令的簡(jiǎn)寫,即 :set nu 和 :set nonu。

如果需要快速計(jì)算要用 vi 函數(shù)處理的行數(shù),顯示行號(hào)會(huì)非常有幫助。當(dāng)行數(shù)很多,可能跨多個(gè)屏幕時(shí),行號(hào)尤其有用。另外,有時(shí)候您知道要處理的行范圍,但是需要查明要在 vi 命令中使用的初始和結(jié)束行號(hào)。

如果希望每次進(jìn)入 vi 會(huì)話時(shí)都顯示行號(hào),那么在主目錄中的 .exrc 文件中添加 set number 行。

自動(dòng)縮進(jìn)

在用某些編程語(yǔ)言編寫代碼時(shí),縮進(jìn)是樣式的重要部分,可以確保代碼的可讀性更好。如果需要,可以在 vi 編輯器中根據(jù)編程語(yǔ)言的樣式設(shè)置自動(dòng)縮進(jìn)。使用 autoindent 打開或關(guān)閉自動(dòng)縮進(jìn)(見 清單 3)。

清單 3. 打開自動(dòng)縮進(jìn)

#!/bin/ksh
#
#
for file in /etc/*
do
if [[ -f ${file} ]] ; then
echo "${file} is a file"
~
~
~
~
~
:set autoindent

在此之后,如果在一行的開頭輸入空格或制表符,那么后續(xù)的新行將會(huì)縮進(jìn)到相同的位置。在命令模式下,輸入 :set autoindent,然后按回車打開自動(dòng)縮進(jìn)。通過(guò)設(shè)置 shiftwidth 確定縮進(jìn)級(jí)別。例如,:set shiftwidth=4 把每級(jí)縮進(jìn)設(shè)置為四個(gè)空格(見 清單 4)。

清單 4. 設(shè)置縮進(jìn)級(jí)別


#!/bin/ksh
#
#
for file in /etc/*
do
if [[ -f ${file} ]] ; then
echo "${file} is a file"
elif [[ -d ${file} ]] ; then
echo "${file} is a directory"
fi
done
~
~
:set shiftwidth=4

在命令模式下,可以使用 >> 命令讓現(xiàn)有的一行增加一級(jí)縮進(jìn),使用 (命令減少一級(jí)縮進(jìn)。在這些命令前面加上一個(gè)整數(shù),即可讓多行增加或減少一級(jí)縮進(jìn)。例如,把游標(biāo)放在 清單 4 中第 6 行的開頭,進(jìn)入命令模式之后,輸入 5) 就會(huì)讓下面五行增加一級(jí)縮進(jìn)。清單 5 顯示結(jié)果。

清單 5. 縮進(jìn)代碼塊

#!/bin/ksh
#
#
for file in /etc/*
do
if [[ -f ${file} ]] ; then
echo "${file} is a file"
elif [[ -d ${file} ]] ; then
echo "${file} is a directory"
fi
done
~
~

可以使用 :set noautoindent 命令關(guān)閉自動(dòng)縮進(jìn)。還可以使用這個(gè)命令和 autoindent 命令的簡(jiǎn)寫,即 :set ai 和 :set noai。還可以使用 :set ai sw=4 在一個(gè)命令中打開縮進(jìn)并設(shè)置縮進(jìn)級(jí)別。

如果希望每次啟動(dòng) vi 會(huì)話時(shí)都啟用自動(dòng)縮進(jìn)并把縮進(jìn)級(jí)別設(shè)置為四個(gè)空格,那么在主目錄中的 .exrc 文件中添加 set ai sw=4 行。

在搜索時(shí)不區(qū)分大小寫

如您所知,在 UNIX® 中執(zhí)行搜索時(shí),模式匹配是區(qū)分大小寫的。但是,如果希望 vi 不區(qū)分大小寫,那么可以使用 :set ignorecase 命令。使用 :set noignorecase 恢復(fù)區(qū)分大小寫。還可以使用簡(jiǎn)寫(:set ic 和 :set noic)。

如果希望每次進(jìn)入 vi 會(huì)話時(shí)都啟用不區(qū)分大小寫的搜索,那么在主目錄中的 .exrc 文件中添加 set ignorecase 行。

復(fù)合搜索

在 vi 中,可以使用 / 命令搜索字符串,這需要以字面字符串或正則表達(dá)式的形式指定要匹配的模式。例如,要想在文件中搜索單詞 echo,只需進(jìn)入命令模式,輸入 /echo,然后按回車。這個(gè)命令會(huì)找到 清單 6 所示文件的第 3 行的***個(gè)單詞。

清單 6. 復(fù)合搜索

1 #!/bin/ksh
2 #
3 echo "Starting"
4 file=${1}
5
6 echo ${file}
7
8 if [[ ${file} = 1 ]] ; then
9 ((file=${file}+1))
10 echo "Adding one gives " \
11 ${file}
12 fi
13 echo "Ending"
14 exit
~
~

可以使用簡(jiǎn)單的正則表達(dá)式指定尋找包含某一單詞而且后面有另一個(gè)單詞的行。例如,要想尋找包含字符串 echo、后面有零個(gè)或更多字符、之后是字符串 file 的***行,應(yīng)該使用 /echo.*file。在 清單 6 所示的文件中,這個(gè)命令會(huì)找到第 6 行的***個(gè)單詞。

但是,只有這兩個(gè)字符串出現(xiàn)在同一行上,這個(gè)命令才認(rèn)為是匹配的。如果希望搜索出現(xiàn)在另一個(gè)模式或字符串后面的某個(gè)模式或字符串,不管這兩個(gè)模式或字符串是否在同一行上,那么可以指定由分號(hào) (;) 分隔的兩個(gè)搜索命令,從而執(zhí)行復(fù)合搜索。例如,要想搜索出現(xiàn)在字符串 {file}+1 后面的字符串 echo,應(yīng)該使用 /{file}+1/;/echo/。在 清單 6 所示的文件中,這個(gè)命令會(huì)找到第 10 行的***個(gè)單詞。

復(fù)合搜索對(duì)于尋找代碼中出現(xiàn)在另一個(gè)命令后面的某個(gè)命令尤其有用 — 例如,在設(shè)置某個(gè)變量之后調(diào)用函數(shù)的地方。

重放搜索模式

當(dāng)在文件中搜索要替換的模式時(shí),可以讓 vi 把要匹配的任何模式保存在緩沖區(qū)中;然后,在執(zhí)行替換時(shí),可以用緩沖區(qū)引用號(hào)重放它們。方法是把模式放在 \( 和 \) 之間,這會(huì)指示 vi 把模式放在編號(hào)的緩沖區(qū)(1 到 9)中。在執(zhí)行替換時(shí),可以用緩沖區(qū)引用號(hào) \1 到 \9 引用這些緩沖區(qū)。

例如,假設(shè)要在 清單 7 所示的文件中搜索以單詞 Martin 開頭的行并對(duì)每個(gè)匹配添加前綴 Mr 和后綴 Wicks,那么進(jìn)入命令模式,輸入 vi 命令 :%s/^\(Martin\)/Mr \1 Wicks/g,然后按回車。

清單 7. 重放搜索模式(之前)

Martin is an IT consultant. Martin likes
snowboarding and mountain biking. Martin has
worked on UNIX systems for over 15 years. Martin also
worked for many years before that on mainframes.
Martin lives in London.
~
~
~
~
:%s/^\(Martin\)/Mr \1 Wicks/g

下面把這個(gè)命令分解開解釋一下:

:%s — 指示 vi 執(zhí)行替換。

/ — 模式分隔符。

^\(Martin\) — 尋找以字符串 Martin 開頭的行并把這個(gè)字符串保存在緩沖區(qū) 1 中。

/ — 模式分隔符。

Mr \1 Wicks — 把找到的字符串替換為字符串 Mr,加上緩沖區(qū) 1 中的內(nèi)容,再加上字符串 Wicks。

/ — 模式分隔符。

g — 全局修改(即修改所有匹配的地方)。

在搜索和替換字符串中都可以使用緩沖區(qū)引用。

修改的結(jié)果見 清單 8。

清單 8. 重放搜索模式(之后)

Mr Martin Wicks is an IT consultant. Martin likes
snowboarding and mountain biking. Martin has
worked on UNIX systems for over 15 years. Martin also
worked for many years before that on mainframes.
Mr Martin Wicks lives in London.
~
~
~
~
:%s/^\(Martin\)/Mr \1 Wicks/g

#p#

書簽

可以讓 vi 在文件中的特定位置放上書簽。方法是按 Escape 鍵,再按 M 鍵,然后輸入另一個(gè)表示書簽引用的字母表字符。因此,最多可以有 26 個(gè)書簽,分別名為 a 到 z。要返回到上一書簽,按 Escape 鍵,再按反撇號(hào)(`),然后輸入書簽引用字符。

例如,按 Escape 之后按 M 和 A 鍵,就會(huì)把當(dāng)前游標(biāo)位置保存在書簽 a 中。在編輯會(huì)話中,以后希望返回到這個(gè)游標(biāo)位置時(shí),只需按 Escape,然后輸入 `A??梢允褂秒p反撇號(hào)(``)命令在當(dāng)前書簽和前一個(gè)書簽之間切換。

查找、更新、查找下一個(gè)、重復(fù)

在 vi 編輯器中,最有用的搜索/替換特性之一是查找與某個(gè)模式匹配的字符串,更新它,然后繼續(xù)搜索下一個(gè)匹配的字符串,然后選擇是否以相同方式更新它。這與 Microsoft® Word 中的查找下一個(gè)/替換功能很相似。

您可能已經(jīng)知道可以在 vi 中搜索字符串模式,方法是進(jìn)入命令模式,輸入 /search_pattern(其中的 search_pattern 是字符串或正則表達(dá)式),然后按回車。這樣做就會(huì)找到與指定的模式匹配的***個(gè)字符串。在此之后,可以在找到的文本上執(zhí)行任何操作。例如,按 Escape,再按 C 和 W 鍵,再輸入更多文本,就會(huì)把找到的字符串替換為另一個(gè)單詞。

要想快速地找到與模式匹配的下一個(gè)地方,應(yīng)該按 Escape,然后按 N 鍵。在找到下一個(gè)匹配時(shí),可以使用點(diǎn)號(hào)鍵(.)在這個(gè)位置重復(fù)最近的文本操作,比如前一個(gè)示例中使用的修改單詞(cw)操作。然后,可以使用這些鍵繼續(xù)尋找其他匹配(n)并選擇重復(fù)文本操作(.),操作方式與使用 Word 中的查找下一個(gè)/替換功能很相似。

切換大小寫

在 vi 中,可以切換游標(biāo)下的字母字符的大小寫,方法是按 Escape,然后按波浪號(hào)鍵(~)。這會(huì)在小寫和大寫之間來(lái)回切換。按著這個(gè)鍵,移動(dòng)游標(biāo)經(jīng)過(guò)行中的每個(gè)字符,就會(huì)切換遇到的每個(gè)字母字符的大小寫??梢栽诓ɡ颂?hào)前面輸入一個(gè)數(shù)字,表示希望改變多少個(gè)字母字符的大小寫。

篩選

您可能知道,在 vi 中按 Escape,輸入 :!command(其中的 command 是要執(zhí)行的 UNIX 命令),然后按回車,就可以在 shell 中執(zhí)行命令。例如,:!pwd 顯示編輯會(huì)話當(dāng)前的工作目錄。

但是,還可以把文件的一部分作為標(biāo)準(zhǔn)輸入發(fā)送給 UNIX 命令,并用產(chǎn)生的輸出替換編輯緩沖區(qū)中的相同部分。例如,如果希望在 vi 會(huì)話內(nèi)對(duì) 清單 9 所示的整個(gè)文件進(jìn)行排序,可以按 Escape,輸入 :1,$!sort 并按回車,這讓 vi 把從***行到文件末尾($)的所有內(nèi)容傳遞給 sort 命令,用輸出替換指定的部分。

清單 9. 在 vi 會(huì)話內(nèi)執(zhí)行文件排序(排序之前)

5
4
3
2
7
6
5
4
8
9
6
3
1
3
4
~
~
:1,$!sort

清單 10 顯示 sort 操作的結(jié)果。

清單 10. 在 vi 會(huì)話內(nèi)執(zhí)行文件排序(排序之后)

1
2
3
3
3
4
4
4
5
5
6
6
7
8
9
~
~
:1,$!sort

另外,還可以在 shell 命令前面加上從當(dāng)前游標(biāo)位置開始希望操作的行數(shù)。方法是按 Escape,然后輸入指定行數(shù)的數(shù)字,然后輸入兩個(gè)驚嘆號(hào)(!!),***輸入 UNIX 命令。

例如,把游標(biāo)放在 清單 9 中第 4 行的開頭,按 Escape,然后輸入:

4!!awk '{print "New text",$0}'

再按回車,就會(huì)在第 4 到第 7 行(含)上加上前綴文本 New text,見 清單 11。

清單 11. 在多個(gè)代碼行前面加上新文本

5
4
3
New text 2
New text 7
New text 6
New text 5
4
8
9
6
3
1
3
4
~
~
!awk '{print "New text",$0}'

可以使用管道分隔符(|)把 UNIX 命令連接在一起,從而在 vi 會(huì)話中執(zhí)行復(fù)雜強(qiáng)大的篩選。例如,假設(shè)要把當(dāng)前 vi 會(huì)話的編輯緩沖區(qū)中的文件內(nèi)容替換為每行的***個(gè)空格分隔的字段,按升序排序并轉(zhuǎn)換為大寫,那么在按 Escape 之后輸入:

:1,$!awk '{print $1}' | sort | tr [:lower:] [:upper:]

保存部分內(nèi)容

可以保存當(dāng)前編輯的文件的部分內(nèi)容,方法是按 Escape,然后輸入 :start,endw file,其中的 start 是當(dāng)前文件中要保存的***行,end 是要保存的***一行,w 表示希望寫到另一個(gè)文件中(或者覆蓋現(xiàn)有的文件),file 是指定的部分要保存到的文件。對(duì)于***一行,可以使用 $ 表示文件的末尾。可以在 w 后面使用兩個(gè)大于號(hào)(>>)表示希望把內(nèi)容附加到文件中而不是覆蓋文件。清單 12 中的示例把第 6 到第 9 行(含)附加到文件 /tmp/newfile 中。

清單 12. 把文件的部分內(nèi)容保存到另一個(gè)文件中(附加而不是覆蓋)

1 #
2 # Internet host table
3 #
4 ::1 localhost
5 127.0.0.1 localhost loghost
6 192.168.0.6 centos5
7 192.168.0.10 appserv
8 192.168.0.11 webserv
9 192.168.0.12 test
10 192.168.0.5 solaris10 # Added by DHCP
~
~
~
:6,9w >> /tmp/newfile

vi 編輯器是一個(gè)極其強(qiáng)大的工具,本文提供了一些技巧和訣竅,希望能夠幫助您更高效地編輯文件。請(qǐng)記住,vi 還有更多不太為人所知的特性。祝工作愉快!

【編輯推薦】

  1. 從菜鳥到專家 vi編輯器全程教學(xué)手冊(cè)
  2. 詳解Unix/Linux系統(tǒng)中vi編輯器
  3. linux vi編輯器概念層層講解
  4. linux vi編輯器之葵花寶典
  5. 講述linux vi編輯器的基礎(chǔ)命令使用方法
責(zé)任編輯:張浩 來(lái)源: IBMDW
相關(guān)推薦

2010-09-25 10:38:20

vim編輯器

2015-10-27 09:25:11

Vi編輯器使用指南

2011-05-26 10:45:04

2015-08-24 09:12:00

Redis 技巧

2022-05-12 08:12:51

PythonPip技巧

2010-09-08 14:35:22

CSS

2018-05-28 06:44:42

網(wǎng)絡(luò)安全時(shí)間響應(yīng)安全

2009-10-26 10:47:57

linux vi編輯器

2009-07-31 17:38:47

linux vi命令詳linux vi命令屏幕文本編輯器

2024-05-16 11:09:40

Python字符串代碼

2024-02-28 16:26:14

Linuxvi編輯器

2023-06-07 15:23:07

開發(fā)IDE編輯器

2018-02-09 09:58:41

Linux編輯器Vi

2018-01-25 18:30:05

編輯器ViVim

2024-12-03 14:33:42

Python遞歸編程

2024-08-20 10:15:14

2011-05-31 17:13:29

SEO

2010-01-20 10:18:13

Linux VI編輯命令

2022-03-22 09:14:11

PythonIDE編輯器

2009-12-09 11:23:34

VS視圖編輯器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)