Vimscript 本地緩沖區(qū)的選項(xiàng)設(shè)置和映射

2018-02-24 16:02 更新

現(xiàn)在我們先花點(diǎn)時間復(fù)習(xí)一下我們已經(jīng)談?wù)撨^的三個東西:映射(mappings),縮寫(abbreviations)和選項(xiàng)設(shè)置(options),這個過程中會講到一些新的東西。我們將在一個單一的緩沖區(qū)中同時設(shè)置它們。

這一章所講到的東西會在下一章中真正的顯示它們的作用,目前我們只需先打下基礎(chǔ)。

在這一章中你需要在Vim中打開兩個文件,兩個文件是分開的。我先將它們命名為foobar,你可以隨便對它們命名。然后為每個文件輸入一些文字。

映射

選擇文件foo,然后執(zhí)行下面的命令:

:nnoremap          <leader>d dd
:nnoremap <buffer> <leader>x dd

現(xiàn)在保持在文件foo下面,確保當(dāng)前處于常用模式下,然后敲擊<leader>d。Vim會刪除一行。這個之前講到過,沒什么新鮮的。

仍然保持在文件foo下面,敲擊<leader>x。Vim也會刪除一行。這很正常,因?yàn)槲覀円矊?code><leader>x映射到dd了。

現(xiàn)在切換到文件bar。在常用模式下敲擊<leader>d。同樣的,Vim會刪除當(dāng)前行,也沒有什么新鮮的。

ok,現(xiàn)在來點(diǎn)新鮮的:在文件bar下敲擊<leader>x。

Vim只刪除了一個字符,而不是刪除整個行! 為什么會這樣?

第二個nnoremap命令中的<buffer>告訴Vim這個映射只在定義它的那個緩沖區(qū)中有效:

當(dāng)你在bar文件下敲擊<leader>x,Vim找不到一個跟它匹配的映射,它將會被解析了兩個命令:<leader>(這個什么都不會干)和?x(通常會刪除一個字符)。

本地Leader

在這個例子中,<leader>x是一個本地緩沖區(qū)映射,不過這種定義方式并不合適。如果我們需要設(shè)定一個只會用于特定緩沖區(qū)的映射,一般會使用<localleader>,而不是<leader>

使用兩種不同的leader按鍵就像設(shè)置了一種命名空間,這會幫助你保證所有不同的映射對你而言更加清晰直接。

但你在編寫一個會被其他人用到的插件的時候,這點(diǎn)顯得尤其重要。使用<localleader>來設(shè)置本地映射會防止你的插件覆蓋別人用<leader>設(shè)置的全局映射,因?yàn)樗麄兛赡芤呀?jīng)對他們做設(shè)置的全局映射非常之習(xí)慣了。

設(shè)置

在這本書的前面幾個章節(jié)里,我們談?wù)摿耸褂?code>set來設(shè)置選項(xiàng)。有一些選項(xiàng)總是會適用于整個Vim,但是有些選項(xiàng)可以基于緩沖區(qū)進(jìn)行設(shè)置。

切回到文件foo,執(zhí)行下面的命令:

:setlocal wrap

然后切換到文件bar,執(zhí)行下面的命令:

:setlocal nowrap

把你的Vim窗口調(diào)小一些,你會發(fā)現(xiàn)有些行在foo中會自動換行,而在bar中則不會。

讓我們來測試下另外一個選項(xiàng)。切換到foo執(zhí)行下面的命令:

:setlocal number

現(xiàn)在切換到bar,然后執(zhí)行下面的命令:

:setlocal nonumber

現(xiàn)在在文件foo中會出現(xiàn)行號,而在bar則沒有。

不是所有的選項(xiàng)都可以使用setlocal進(jìn)行設(shè)置。如果你想知道某個特定的選項(xiàng)是否可以設(shè)置為本地選項(xiàng),執(zhí)行:help查看它的幫助文檔。

對于本地選項(xiàng)如何_真正地_地工作,我說的有些簡略。在練習(xí)中你會學(xué)到更多這方面的細(xì)節(jié)。

遮蓋

ok,在開始下一節(jié)之前,我們先來看關(guān)于本地映射的一個非常有趣的特性。切換到文件foo,然后執(zhí)行下面的命令:

:nnoremap <buffer> Q x
:nnoremap          Q dd

然后敲擊Q,看看會發(fā)生什么?

當(dāng)你敲擊Q,Vim會執(zhí)行第一個映射,而不是第二個,因?yàn)榈谝粋€映射比起第二個要顯得更具體,這可以看成第二個映射被第一個映射遮蓋了。

切換回文件bar,然后敲擊Q,Vim會使用第二個映射。這是因?yàn)樵谶@個緩沖區(qū)中第二個映射沒有被第一個映射遮蓋。

練習(xí)

閱讀:help local-options。

閱讀:help setlocal

閱讀:help map-local。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號