<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                現在我們談論一個跟映射一樣重要的東西:自動命令。 自動命令可以讓Vim自動執行某些指定的命令,這些指定的命令會在某些事件發生的時候執行。我們先看一個例子。 使用`:edit foo`打開一個新文件,然后立即使用`:quit`關閉。查看你的硬盤,你會發現這個文件并不存在。這是因為在你第一次保存這個文件之前,Vim_實際上_并沒有真正創建它。 讓我們對Vim做一些改變,使得Vim可以在你開始編輯文件的時候就創建它們。執行下面的命令: ~~~ :autocmd BufNewFile * :write ~~~ 這里面有很多需要進一步說明的,不過在此之前我建議你先感受下它是怎么工作的。執行`:edit foo`,使用`:quit`關閉,然后查看硬盤。這個時候文件會存在(當然文件內容為空)。 你只有關閉Vim才能刪除這個自動命令。我們會在后面的章節說明如何避免這種情況。 ## 自動命令結構 讓我們來深入分析下我們剛才創建的自動命令: ~~~ :autocmd BufNewFile * :write ^ ^ ^ | | | | | 要執行的命令 | | | 用于事件過濾的“模式(pattern)” | 要監聽的“事件” ~~~ 這個命令的第一部分是我們想監聽的事件的類型。Vim提供了_很多_可以監聽的事件。這些事件包括: * 開始編輯一個當前并不存在的文件。 * 讀取一個文件,不管這個文件是否存在。 * 改變一個緩沖區的`filetype`設置。 * 在某段時間內不按下鍵盤上面的某個按鍵。 * 進入插入模式。 * 退出插入模式。 上面只舉出了可用事件里面的很小一部分。還有很多其他的事件,你可以利用這些事件來做一些有趣的事情。 這個自動命令的下一部分是一個“模式”,這個模式可以進一步限定你要執行的命令的執行范圍。新開一個Vim實例,執行下面的命令: ~~~ :autocmd BufNewFile *.txt :write ~~~ 這個跟之前的那個自動命令基本一樣,不過這個自動命令只對后綴為`.txt`的文件有效,也就是說當你新建的文件為txt文件的時候,Vim會在文件創建的時候自動執行write命令將文件保存到硬盤上。 試試執行`:edit bar`,然后執行`:quit`,再執行`:edit bar.txt`,然后再執行`:quit`。你會發現Vim會自動創建`bar.txt`,但不會創建`bar`,因為它的后綴名不是txt,不跟模式匹配。 這個自動命令的最后一部分是事件發生時我們想執行的命令。這個部分很容易理解,跟我們執行其他命令一樣,除了不能在這個命令中使用特殊的字符,例如`<cr>`。我們會在本書后面的章節中談論如何突破這個限制,現在你只需要遵守它就可以。 ## 再來一個示例 我們再定義一個自動命令,這次使用一個不同的事件。執行下面的命令: ~~~ :autocmd BufWritePre *.html :normal gg=G ~~~ 這里用到了`normal`命令,我會在本書的后面的章節里面講到它,這可能有點超前,不過我覺得這是一個很好的使用自動命令的示例,所以請大家先忍受一下。 創建一個名為`foo.html`的新文件。用Vim編輯它,并輸入下面的文本,請保證輸入的文本_完全一致_,包括空白符: ~~~ <html> <body> <p>Hello!</p> </body> </html> ~~~ 執行`:w`保存這個文件。看看會發生了什么?Vim似乎在文件保存之前重新進行了文本縮進處理。 ok,請先相信我文本縮進處理是`:normal gg=G`干的,先別糾結于為什么`:normal gg=G`可以干這個。 我們_應該_把注意力放在自動命令上。這個自動命令里面用到的事件是`BufWritePre`,這個事件會在你保存_任何_字符到文件之前觸發。 我們使用了`*.html`這個模式,這個模式會保證命令只會在編輯html文件的時候被執行。這就是自動命令強大的地方,因為它可以專門針對特定類型的文件來執行我們想要執行的命令。ok,讓我們繼續探索它吧。 ## 多個事件 你可以創建一個綁定_多個_事件的自動命令,這些事件使用逗號分隔開。執行下面的命令: ~~~ :autocmd BufWritePre,BufRead *.html :normal gg=G ~~~ 這個跟上面的自動命令基本一樣,不同的是它會讓Vim不僅在寫html文件的時候進行縮進處理,讀html文件的時候也會進行縮進處理。如果你有些同事不喜歡把HTML文件格式搞得漂亮點,那么這個命令會很有用。 在Vim腳本編程中有一個不成文的規定,你應該同時使用`BufRead`和`BufNewFile`(譯注:這里不是BufWritePre)這兩個事件來運行命令,這樣當你打開某個類型的文件,不論這個文件是否存在命令都會執行。執行下面的命令: ~~~ :autocmd BufNewFile,BufRead *.html setlocal nowrap ~~~ 上面的命令會使得無論你在什么時候編輯HTML文件自動換行都會被關閉。 ## FileType事件 最有用的事件是`FileType`事件。這個事件會在Vim設置一個緩沖區的`filetype`的時候觸發。 讓我們針對不同文件類型設置一些有用的映射。運行命令: ~~~ :autocmd FileType javascript nnoremap <buffer> <localleader>c I//<esc> :autocmd FileType python nnoremap <buffer> <localleader>c I#<esc> ~~~ 打開一個Javascript文件(后綴為`.js`的文件),將光標移動到某一行,敲擊`<localleader>c`,光標所在的那一行會被注釋掉。 現在打開一個Python文件(后綴為`.py`的文件),將光標移動到某一行,敲擊`<localleader>c`,同樣的那一行會被注釋掉,不同的是此時所用的是Python的注釋字符! 在自動命令中包含我們上一章中學到的本地緩沖區映射,我們可以創建一些映射,這些映射會根據我們正在編輯的文件的類型來進行不同的處理。 這可以為我們在編碼的時候減輕很多思考的負擔。如果要添加一個注釋,我們可能想到的是必須將光標移動到行首,然后添加一個注釋字符,而使用上面的映射,我們只需要簡單的將其理解為“注釋掉這一行”。 ## 練習 瀏覽`:help autocmd-events`查看自動命令可以綁定的所有事件。你不需要現在就記住每一個事件。僅僅只需要了解下你可以使用這些事件做哪些事情。 創建一些`FileType`自動命令使用`setlocal`對你喜歡的文件類型做一些設置。你可以針對不同的文件類型設置`wrap`、`list`、?`spell`和`number`這些選項。 對一些你會經常處理的文件類型創建一些類似“注釋掉這一行”的命令。 把所有這些自動命令寫到你的`~/.vimrc`文件里面。記住使用前面章節中提到過的快速編輯和加載`~/.vimrc`文件的映射來做這個事情,這是必須的!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看