W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
現(xiàn)在我們先花點(diǎn)時(shí)間復(fù)習(xí)一下我們已經(jīng)談?wù)撨^的三個(gè)東西:映射(mappings),縮寫(abbreviations)和選項(xiàng)設(shè)置(options),這個(gè)過程中會(huì)講到一些新的東西。我們將在一個(gè)單一的緩沖區(qū)中同時(shí)設(shè)置它們。
這一章所講到的東西會(huì)在下一章中真正的顯示它們的作用,目前我們只需先打下基礎(chǔ)。
在這一章中你需要在Vim中打開兩個(gè)文件,兩個(gè)文件是分開的。我先將它們命名為foo
和bar
,你可以隨便對(duì)它們命名。然后為每個(gè)文件輸入一些文字。
選擇文件foo
,然后執(zhí)行下面的命令:
:nnoremap <leader>d dd
:nnoremap <buffer> <leader>x dd
現(xiàn)在保持在文件foo
下面,確保當(dāng)前處于常用模式下,然后敲擊<leader>d
。Vim會(huì)刪除一行。這個(gè)之前講到過,沒什么新鮮的。
仍然保持在文件foo
下面,敲擊<leader>x
。Vim也會(huì)刪除一行。這很正常,因?yàn)槲覀円矊?code><leader>x映射到dd
了。
現(xiàn)在切換到文件bar
。在常用模式下敲擊<leader>d
。同樣的,Vim會(huì)刪除當(dāng)前行,也沒有什么新鮮的。
ok,現(xiàn)在來點(diǎn)新鮮的:在文件bar
下敲擊<leader>x
。
Vim只刪除了一個(gè)字符,而不是刪除整個(gè)行! 為什么會(huì)這樣?
第二個(gè)nnoremap
命令中的<buffer>
告訴Vim這個(gè)映射只在定義它的那個(gè)緩沖區(qū)中有效:
當(dāng)你在bar
文件下敲擊<leader>x
,Vim找不到一個(gè)跟它匹配的映射,它將會(huì)被解析了兩個(gè)命令:<leader>
(這個(gè)什么都不會(huì)干)和?x
(通常會(huì)刪除一個(gè)字符)。
在這個(gè)例子中,<leader>x
是一個(gè)本地緩沖區(qū)映射,不過這種定義方式并不合適。如果我們需要設(shè)定一個(gè)只會(huì)用于特定緩沖區(qū)的映射,一般會(huì)使用<localleader>
,而不是<leader>
。
使用兩種不同的leader按鍵就像設(shè)置了一種命名空間,這會(huì)幫助你保證所有不同的映射對(duì)你而言更加清晰直接。
但你在編寫一個(gè)會(huì)被其他人用到的插件的時(shí)候,這點(diǎn)顯得尤其重要。使用<localleader>
來設(shè)置本地映射會(huì)防止你的插件覆蓋別人用<leader>
設(shè)置的全局映射,因?yàn)樗麄兛赡芤呀?jīng)對(duì)他們做設(shè)置的全局映射非常之習(xí)慣了。
在這本書的前面幾個(gè)章節(jié)里,我們談?wù)摿耸褂?code>set來設(shè)置選項(xiàng)。有一些選項(xiàng)總是會(huì)適用于整個(gè)Vim,但是有些選項(xiàng)可以基于緩沖區(qū)進(jìn)行設(shè)置。
切回到文件foo
,執(zhí)行下面的命令:
:setlocal wrap
然后切換到文件bar
,執(zhí)行下面的命令:
:setlocal nowrap
把你的Vim窗口調(diào)小一些,你會(huì)發(fā)現(xiàn)有些行在foo
中會(huì)自動(dòng)換行,而在bar
中則不會(huì)。
讓我們來測(cè)試下另外一個(gè)選項(xiàng)。切換到foo
執(zhí)行下面的命令:
:setlocal number
現(xiàn)在切換到bar
,然后執(zhí)行下面的命令:
:setlocal nonumber
現(xiàn)在在文件foo
中會(huì)出現(xiàn)行號(hào),而在bar
則沒有。
不是所有的選項(xiàng)都可以使用setlocal
進(jìn)行設(shè)置。如果你想知道某個(gè)特定的選項(xiàng)是否可以設(shè)置為本地選項(xiàng),執(zhí)行:help
查看它的幫助文檔。
對(duì)于本地選項(xiàng)如何_真正地_地工作,我說的有些簡(jiǎn)略。在練習(xí)中你會(huì)學(xué)到更多這方面的細(xì)節(jié)。
ok,在開始下一節(jié)之前,我們先來看關(guān)于本地映射的一個(gè)非常有趣的特性。切換到文件foo
,然后執(zhí)行下面的命令:
:nnoremap <buffer> Q x
:nnoremap Q dd
然后敲擊Q
,看看會(huì)發(fā)生什么?
當(dāng)你敲擊Q
,Vim會(huì)執(zhí)行第一個(gè)映射,而不是第二個(gè),因?yàn)榈谝粋€(gè)映射比起第二個(gè)要顯得更具體,這可以看成第二個(gè)映射被第一個(gè)映射遮蓋了。
切換回文件bar
,然后敲擊Q
,Vim會(huì)使用第二個(gè)映射。這是因?yàn)樵谶@個(gè)緩沖區(qū)中第二個(gè)映射沒有被第一個(gè)映射遮蓋。
閱讀:help local-options
。
閱讀:help setlocal
。
閱讀:help map-local
。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: