Vim 筆記 chapter2:復(fù)制粘貼、寄存器

復(fù)制與粘貼

Vim 的剪切、復(fù)制、粘貼有別于其他編輯器。

命令 Others Vim
復(fù)制 copy yank
剪切 cut delete
粘貼 paste put

Vim 的 put 命令與粘貼命令完全相同。
Vim 的 yank 命令等同于復(fù)制操作。至于為什么用 yank 而不是 copy ,這就是歷史遺留原因了。 當(dāng)時(shí)的 c 命令被用于 修改(change)操作了,所以被迫換成了 yank 這個(gè)名字。
Vim 的 delete 也與標(biāo)準(zhǔn)的剪切操作一致。該命令會(huì)把指定文本復(fù)制到寄存器后再從文檔中刪掉。

用無名寄存器實(shí)現(xiàn)刪除、復(fù)制與粘貼操作

通常情況下,復(fù)制、粘貼和操作指的是操縱系統(tǒng)的剪貼板。在 Vim 中,操作的是寄存器。

調(diào)換字符

手速太快有時(shí)候會(huì)習(xí)慣性的輸錯(cuò)某個(gè)單詞,常見的比如兩個(gè)字母的順序輸錯(cuò)了。

 Practica lvim

上面把 “l(fā)” 和空格的順序輸入反了,現(xiàn)在我的光標(biāo)在最后一個(gè)字母 "m" 上, 按下 F<space> 在本行文本中找到光標(biāo)之前的空格,按下 x 把光標(biāo)下的字符剪切下來放到無名寄存器。最后按下 p 命令將無名寄存器的內(nèi)容粘貼到光標(biāo)后面。
最后把兩個(gè)命令組合到一起,即 xp ,可以 “調(diào)換光標(biāo)后的兩個(gè)字符”,現(xiàn)在我的光標(biāo)在最后一個(gè)字母 "m" 上, 按下 F<space> 在前文中找到空格,按下 x 把光標(biāo)下的字符剪切下來放到無名寄存器。最后按下 p 命令將無名寄存器的內(nèi)容粘貼到光標(biāo)后面。

 Practical vim

調(diào)換文本行

類似的,也可以方便的調(diào)換兩行文本的順序。這次,用 dd 命令剪切當(dāng)前行,將內(nèi)容放到無名寄存器中,再按下 p 會(huì)把內(nèi)容粘貼到當(dāng)前行的下一行。
把命令連接起來即 ddp ,可以用來“調(diào)換當(dāng)前行和它的下一行”。

// before
 我是第二行
 我是第一行
 我是第三行
// after
 我是第一行
 我是第二行
 我是第三行

創(chuàng)建文本行的副本

類似調(diào)換文本行,創(chuàng)建文本行的副本只需要將剪切行的命令 dd 換成復(fù)制一行文本的命令 yy 即可,連起來是 yyp,可以用來“復(fù)制當(dāng)前行并在下一行粘貼文本”。

// before
 我是第一行
 我是第二行
// after
 我是第一行
 我是第一行
 我是第二行

深入理解 Vim 寄存器

引用一個(gè)寄存器

Vim 的刪除、復(fù)制和粘貼都會(huì)用到眾多寄存器中的一個(gè) 。 可以通過給命令加 "{register} 前綴的方式指定要用的寄存器。若不指明,Vim 將使用無名寄存器。

  • 舉例
    如果想把當(dāng)前單詞復(fù)制到寄存器 a 中, 可以執(zhí)行 "ayiw 。
    把當(dāng)前整行文本剪切到寄存器 b 中, 可以執(zhí)行 "bdd 。

"ap 可以粘貼來及寄存器 a 的單詞, "bp 可以粘貼來及寄存器 b 的一行文本,兩者互不干擾。

無名寄存器("")

倘若我們沒有指定使用寄存器, Vim 將缺省使用無名寄存器,它可以雙引號(hào)表示。

  • 舉例
    例如 ""p 這個(gè)命令,他完全等同于 p 命令。

復(fù)制專用寄存器 ("0)

當(dāng)使用 y{motion} 命令時(shí),要復(fù)制的文本不僅會(huì)拷貝到無名寄存器中,同時(shí)也拷貝到了復(fù)制專用寄存器中。后者可以用數(shù)字 “0” 加以引用。

  • 舉例
    例如有以下代碼
 var myCat1 = new cat();
 var myCat2 = new dog();

現(xiàn)在想要把 "dog" 換為 "cat"。若是之前不知道寄存器這個(gè)概念的話,場(chǎng)景會(huì)是這樣:

  1. 光標(biāo)到 “cat” 上面,按下 yiw 復(fù)制這個(gè)單詞
  2. 把光標(biāo)移動(dòng)到 “dog” 上面,按下 diw 刪除這個(gè)單詞
  3. 按下 p 粘貼
  4. 變成傻逼:本來想粘貼 “cat” 的,結(jié)果粘貼的內(nèi)容卻是 “dog” ,第一步復(fù)制的 “cat” 不見了

發(fā)生這個(gè)問題原因是一直使用的是無名寄存器,當(dāng)刪除單詞時(shí),刪除操作會(huì)把單詞放到無名寄存器中,把之前復(fù)制的內(nèi)容給“擠”走了。

現(xiàn)在有了復(fù)制專用寄存器就不虛了。在最后粘貼的時(shí)候按下 "0p 而不是 p 就完美的解決了這個(gè)問題。

 var myCat1 = new cat();
 var myCat2 = new cat();

有名寄存器("a - "z)

Vim 提供了一組以 26 個(gè)英文字母命名的寄存器,這意味著我們可以復(fù)制、剪切或者粘貼多達(dá) 26 段文本。
上面改名字的問題使用有名寄存器也能很輕松地解決,這里就不再贅述了。

  • 用小寫字母引用有名寄存器,會(huì)覆蓋該寄存器的原有內(nèi)容。
  • 用大寫字母引用有名寄存器,會(huì)將新內(nèi)容添加到原有內(nèi)容之后。

黑洞寄存器 ("_)

想要?jiǎng)h除一段文本而不想保留副本時(shí),黑洞寄存器就很管用了。
使用 "_diw 刪除一個(gè)單詞時(shí), 不會(huì)將之前無名寄存器的內(nèi)容覆蓋。

系統(tǒng)剪切板("+)與選擇專用寄存器("*)

到目前為止,討論的寄存器都是 Vim 內(nèi)部的,如果想從 Vim 復(fù)制內(nèi)容到外部,則必須使用系統(tǒng)剪切板。

Vim 的加號(hào)寄存器與系統(tǒng)剪切板等效,可用 +號(hào)引用。
比如現(xiàn)在從別的程序中復(fù)制了一段文本,在 Vim 中,就可以通過 "+p 命令將其粘貼到 Vim 內(nèi)部。
如果在 Vim 的復(fù)制、粘貼和剪切命令之前加上 "+ ,相應(yīng)的文本會(huì)捕捉至系統(tǒng)剪切板。

在 Windows 和 Mac OS 中, "+ 寄存器 和 "* 寄存器 可以混用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近集中讀了幾本關(guān)于Vim的書,?以《Practical Vim》最為詳盡,特重新溫習(xí)并總結(jié)成篇,一來作為復(fù)習(xí)和練...
    南瓜不胡鬧閱讀 6,255評(píng)論 1 29
  • 命令歷史 以:和/開頭的命令都有歷史紀(jì)錄,可以首先鍵入:或/然后按上下箭頭來選擇某個(gè)歷史命令。 啟動(dòng)vim 在命令...
    im螞蟻閱讀 31,084評(píng)論 3 48
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢(mèng)閱讀 100,853評(píng)論 9 468
  • 在耳朵旁邊聽見有朋友吹噓著,我在這個(gè)學(xué)校有多少朋友,在那個(gè)學(xué)校有多少兄弟,具體是否浮夸,我無從得知。 但是我覺得奇...
    沈諾閱讀 1,311評(píng)論 0 2
  • 前提:目前在遙遠(yuǎn)的非洲,公司有食堂,發(fā)放生活用品,辦公室有網(wǎng)絡(luò),女生是國寶 近似于被軟禁是什么感覺?不允許出門閑...
    KatherineMeng閱讀 324評(píng)論 -1 2

友情鏈接更多精彩內(nèi)容