Linux CentOS7 vim寄存器解讀
計(jì)算機(jī)中通常所說(shuō)的寄存器register一般指的是CPU中的寄存器,用來(lái)暫存CPU處理所需要的指令、數(shù)據(jù)等。
vim中同樣也有寄存器,使用的方式和CPU非常類(lèi)似。
vim中的寄存器(register)作用和windows中的剪切板類(lèi)似,不過(guò)vim中的寄存器不止一個(gè),有不同的類(lèi)別,有不同的用處。
vim的寄存器是一組用于保存文本的簡(jiǎn)單容器。它們既可像剪貼板那樣,剪切、復(fù)制和粘貼文本;也可以記錄一系列按鍵操作,把它們錄制成宏。
vim常規(guī)使用系統(tǒng)剪貼板進(jìn)行剪切、復(fù)制與粘貼操作,如果再運(yùn)用寄存器手段,將為刪除、復(fù)制與粘貼等操作提供更多選擇,而更具靈活性,同時(shí)也提高了編輯文本效率。
一、認(rèn)識(shí)寄存器
vim的寄存器可以看成vim中額外用來(lái)存儲(chǔ)信息的區(qū)域,雖然看不見(jiàn),但是如果使用d、x、s、y、p等命令,都無(wú)意識(shí)地使用了vim的寄存器。
你可能已經(jīng)在復(fù)制或刪除文本并用p或P粘貼它們到別處的時(shí)候使用過(guò)Vim的寄存器了。但是,你知道Vim總共有10種不同類(lèi)型的寄存器嗎?如果正確地使用Vim寄存器,將幫助您從重復(fù)的輸入中解放出來(lái)。
總的來(lái)說(shuō),寄存器就是一個(gè)可自定義的多重剪切板,超級(jí)剪切板。
1.寄存器分類(lèi)
vim所擁有的10種寄存器類(lèi)型:
匿名寄存器("")編號(hào)寄存器("0-9)小刪除寄存器("-)命名寄存器("a-z)只讀寄存器(":,".,"%)Buffer交替文件寄存器("#)表達(dá)式寄存器("=)選取和拖放寄存器("*,"+)黑洞寄存器("_)搜索模式寄存器("/) 2.寄存器作用與功能
常用的有匿名寄存器("")和命名寄存器("a-z)。
- 匿名寄存器("")
匿名寄存器,又常稱(chēng)為無(wú)名寄存器,是vim默認(rèn)的寄存器,復(fù)制、刪除、修改等操作的內(nèi)容都會(huì)保存在該寄存器中。
倘若沒(méi)有指定要使用的寄存器,vim將缺省使用無(wú)名寄存器,它可以用雙引號(hào)表示。為了顯式地引用該寄存器,需要使用兩個(gè)雙引號(hào)。例如,""p,它完全等同于p命令。x、s、d、c與y命令(以及它們對(duì)應(yīng)的大寫(xiě)命令)都會(huì)覆蓋無(wú)名寄存器中的內(nèi)容。無(wú)論哪一種情況,都可以通過(guò)加"{register}前綴來(lái)指定另外一個(gè)寄存器,但無(wú)名寄存器總是缺省的。事實(shí)上,無(wú)名寄存器的內(nèi)容很容易被覆蓋,不小心會(huì)導(dǎo)致問(wèn)題發(fā)生。
- 命名寄存器("a-z)
命名寄存器使用字母a-z來(lái)命名。a-z命名寄存器可以存儲(chǔ)復(fù)制的、修改的、和被刪除的文本。用戶(hù)需要顯示地告訴vim要使用的命名寄存器。
追加文本:使用大寫(xiě)版本的命名寄存器來(lái)向原來(lái)的命名寄存器中追加文本。
- 復(fù)制專(zhuān)用寄存器("0)
就是使用y命令復(fù)制的內(nèi)容都會(huì)存放到這個(gè)寄存器中。
緩存最近操作內(nèi)容,復(fù)制與刪除有別。
- 黑洞寄存器("_)
顧名思義,這個(gè)寄存器的功能和/dev/null設(shè)備非常地相似,就是將一切輸入其中的東西都吞噬掉。我們常用x命令來(lái)刪除某個(gè)字符,用dd命令來(lái)刪除某行,其實(shí)這些都不是刪除,是剪切,真正的刪除應(yīng)該是這些命令:
- "_dd //刪除某行
- "_x //刪除光標(biāo)下的字符
文件名寄存器("%)
- "%代表的是文件名寄存器,存放的是當(dāng)前正在編輯的文件名
二、引用寄存器
我們重點(diǎn)討論命名寄存器的命名、使用等操作。
本文中提到的d命令,y命令,c命令指的是和這個(gè)操作符相關(guān)聯(lián)的命令集合,比如和y操作符相關(guān)聯(lián)的一些命令如下:
- yy //復(fù)制當(dāng)前行
- yw //當(dāng)前光標(biāo)下面的這個(gè)單詞
- yit //復(fù)制一個(gè)html標(biāo)簽中的內(nèi)容
- yft //復(fù)制當(dāng)前行上光標(biāo)到第一個(gè)t之間的所有內(nèi)容
- yiw //復(fù)制一個(gè)單詞的內(nèi)容(yank in word)
vim的刪除、復(fù)制與粘貼命令都會(huì)用到眾多寄存器中的某一個(gè)。可以通過(guò)給命令加"{register}前綴的方式指定要用的寄存器。若不指明,vim將缺省使用無(wú)名寄存器。
1.在普通模式中使用寄存器
不論在哪一類(lèi)模式中,都是先定義(或生成)寄存器,再使用。
如果想把當(dāng)前單詞復(fù)制到寄存器a中,可執(zhí)行"ayiw,或者,可以用"bdd,把當(dāng)前整行文本剪切至寄存器b中。在此之后,既可以輸入"ap粘貼來(lái)自寄存器a的單詞,也可使用"bp命令粘貼來(lái)自寄存器b的一整行文本,兩者互不干擾。
比如,%代表的是文件名寄存器,存放的是當(dāng)前正在編輯的文件名,我們現(xiàn)在打開(kāi)一個(gè)文件demo.txt,處于普通模式,此時(shí)輸入以下內(nèi)容:
"%p
//表示將文件名寄存器的內(nèi)容粘貼到當(dāng)前行
文件內(nèi)容就變成這個(gè)樣子了:
2.在底行模式中使用寄存器
除了普通模式的命令外,vim也提供用于刪除、復(fù)制與粘貼操作的Ex命令(底行模式下)。
例如,可以執(zhí)行:delete c,把當(dāng)前行剪切到寄存器c,然后再執(zhí)行:put c命令將其粘貼至當(dāng)前光標(biāo)所在行之下。
delete命令可以簡(jiǎn)寫(xiě)為d。
- 執(zhí)行d b命令,刪除當(dāng)前行,內(nèi)容存入b寄存器中
- 執(zhí)行nd d命令,刪除第n行,內(nèi)容存入d寄存器中。
如下圖,n=8
執(zhí)行粘貼命令時(shí),不能把put簡(jiǎn)寫(xiě)為p,會(huì)報(bào)錯(cuò)。
- 執(zhí)行put d命令時(shí),將在當(dāng)前行后粘貼d寄存器中的內(nèi)容。
- 執(zhí)行nput d命令時(shí),將在第n行后粘貼d寄存器中的內(nèi)容。
如下圖,n=3
一個(gè)很酷的技巧是將黑洞寄存器("_)傳給:put命令。因?yàn)楹诙醇拇嫫鞑槐4嫒魏沃担?put _命令將插入一個(gè)新的空白行。您可將這個(gè)與全局命令聯(lián)合起來(lái),插入多個(gè)空行。
3.在編輯模式中使用寄存器
在編輯模式中,我們不能定義或命名寄存器(這是因?yàn)椋褐荒芡ㄟ^(guò)命令的方式命名寄存器,在編輯模式下,不能執(zhí)行命令,就不能命名寄存器)。
在編輯模式下,我們可以使用在其他模式下命名的寄存器(如果是在一個(gè)服務(wù)器,一個(gè)系統(tǒng)中,其他人在其他文檔中命名的寄存器)。具體使用方法:按下ctrl+r鍵,(將顯示一個(gè)")再加上相應(yīng)的寄存器的名字,就可以插入寄存器中的內(nèi)容。
在編輯模式下,一般用的最多的是系統(tǒng)剪切板:選擇內(nèi)容;用ctrl+insert復(fù)制;用shift+insert粘貼。
4. 在可視模式中使用寄存器
在可視模式下,一般用的最多的是無(wú)名寄存器。選擇內(nèi)容后,錄入y命令進(jìn)行復(fù)制,錄入d命令刪除內(nèi)容。
三、查看寄存器
查看寄存器里面緩存的內(nèi)容,可以使用多個(gè)命令,如dis,registers,register,reg等。
- :reg [寄存器名稱(chēng)]
- :reg # 查看當(dāng)前所有寄存器
- :reg a b c # 查看指定的命名寄存器
四、刪除寄存器
從技術(shù)上來(lái)說(shuō),我們沒(méi)有必要來(lái)清除任何寄存器,因?yàn)槟阆乱粋€(gè)使用來(lái)存儲(chǔ)文本的寄存器會(huì)自動(dòng)覆蓋該寄存器中之前的內(nèi)容。
如果想清除寄存器中的內(nèi)容,可以使用表達(dá)式 :let @a='' 來(lái)將寄存器 "a的值設(shè)為空的字符串。
寄存器的生命周期是很長(zhǎng)的,即使服務(wù)器重啟,只要能正常進(jìn)入系統(tǒng),寄存器里的內(nèi)容都是一直存在的。
五、寄存器與剪切板
在討論寄存器時(shí),一個(gè)繞不開(kāi)的話題是與系統(tǒng)剪切板的關(guān)系。
系統(tǒng)剪切板是所有操作系統(tǒng)必備的工具或功能,在復(fù)制、刪除、粘貼等方面發(fā)揮著重要作用。
在linux中,通過(guò)設(shè)置可以打通寄存器與剪切板,即剪切板用"+寄存器表示,與其他寄存器一樣使用。
其最大好處就是可以在普通模式、命令行模式下使用剪切板中的內(nèi)容。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux取消目錄的執(zhí)行權(quán)限的具體步驟
用戶(hù)對(duì)一個(gè)文件或目錄具有訪問(wèn)權(quán)限,這些訪問(wèn)權(quán)限決定了誰(shuí)能訪問(wèn),以及如何范圍這些文件和目錄,本文給大家介紹了Linux取消目錄的執(zhí)行權(quán)限的具體步驟,并通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-10-10Linux 下讀XML 的類(lèi)詳解及實(shí)現(xiàn)代碼
這篇文章主要介紹了 Linux 下讀XML 的類(lèi)詳解及實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03CentOS 6.5 web服務(wù)器apache的安裝與基本設(shè)置
這篇文章主要介紹了CentOS 6.5 web服務(wù)器apache的安裝與基本設(shè)置,需要的朋友可以參考下2017-09-09Linux yum安裝postgresql出現(xiàn)Bad GPG signature問(wèn)題的解決
這篇文章給大家介紹了Linux yum安裝postgresql出現(xiàn)Bad GPG signature問(wèn)題的解決方法,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-02-02