Vim 中為 Markdown 配置斷行符號展開例子

來源:互聯網
上載者:User

靠Vim寫Jekyll部落格已經很久了,編寫代碼塊(Code Fence)時鍵入前後的```, 以及手動編寫文章頭資訊(Front Matter)一直是個麻煩的事情。 Harttle今天就通過Vim鍵盤對應來對這兩種文法提供斷行符號展開支援。最終效果如下:

鍵入Code Fence```以及高亮語言(|表示游標所在位置):

```javascript|```
此時鍵入斷行符號:

```javascript
|
```
定界符匹配

Markdown中有兩種代碼文法:行內代碼`foo`,以及用```分隔的代碼塊(Code Fence)。 我們在輸入`時希望Vim自動補全後一個`且游標仍位於兩者之間。 要實現這一點需要先安裝 delimitMate 外掛程式:

Plugin 'Raimondi/delimitMate'
如何安裝Vim外掛程式?請參考打造前端開發的 Vim 環境一文。
然後在~/.vim/after/ftplugin/markdown.vim(不存在則建立該路徑及檔案)中為Markdown檔案配置特殊的`定界符:

let b:delimitMate_quotes = "\" ' `"
let b:delimitMate_nesting_quotes = ['`']
設定`允許嵌套是為了在輸入三個`時Vim仍然可以正確匹配。
現在開啟一個*.md檔案並鍵入```後,即可自動補全後面的```:

```|```
此時敲斷行符號:

```
|```
而我們希望的是:

```
|
```
這便是我們下一節討論的斷行符號符展開。

斷行符號符展開

本節中更改的還是~/.vim/after/ftplugin/markdown.vim檔案, 該檔案為Markdown類型檔案專屬的配置,不會影響其他類型的檔案。 首先建立一個鍵盤對應:將斷行符號映射為Expander()函數調用。

Vim通過檔案尾碼來識別檔案類型,只需要在~/.vimrc中開啟該功能::filetype on。 如果你希望自訂檔案類型,可以在~/.vim/after/filetype.vim中添加檔案類型識別規則。 參見:http://vim.wikia.com/wiki/Filetype.vim
inoremap <expr> <CR> Expander()
其中inoremap是指insert模式(i)下進行映射;且為非遞迴(nore)映射,即映射後的結果不被再次映射;<CR>為斷行符號符(Carriage Return)。 現在到了程式員的強項:編寫Expander函數。

function! Expander()
  let line   = getline(".")
  let col    = col(".") - 1

  if line[0:2] ==# "```" && line[col : col+2] ==# "```"
    return "\<CR>\<Esc>O"
  endif

  return "\<CR>"
endfunction
該函數擷取了當前游標所在行內容,以及游標所在位置(敲擊斷行符號後游標後移了一格)。 游標後有三個`並且行首也有三個`時返回『斷行符號、退出插入模式、向上插入新行』; 否則返回正常的『斷行符號』。

注意<expr>鍵盤對應的函數傳回值中,按鍵需要轉義。例如\<CR>。
頭資訊展開

在編寫Jekyll文章時,首先要編寫頭資訊(Front Matter):

---
title: xxx
tags: xxx
---
我希望輸入---後斷行符號便自動補全以上內容,可以繼續修改上述Expander函數:

function! Expander()
  let line   = getline(".")
  let col    = col(".") - 1

  if line[0:2] ==# "```" && line[col : col+2] ==# "```"
    return "\<CR>\<Esc>O"
  endif

  if line[0:2] ==# "---"
    return "\<CR>layout: blog\<CR>---\<Esc>Otitle: "
  endif

  return "\<CR>"
endfunction
儲存該檔案並重新開啟一個*.md檔案,輸入以下內容(|為游標位置):

---|
按下斷行符號,便可補全Front Matter:

---
layout: blog
title: |
---

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.