我是如何使用 Vim 高效率寫 Markdown 的

本文僅適合於對vim有一定了解的人閱讀,沒有了解的人可以看看文中的視頻我使用 neovim 代替 vim ,有些插件是 neovim 獨佔, neovim 和 vim 的區別請自行

google系統: Manjaro(Linux)

前言

之前我一直使用的是 vscode 和 typora 作為 markdown 編輯器,這兩個都挺好用的,都有 linux 版本,typora 可能是我見過的最優雅的編輯器了

不過直到我遇見了 vim,一款被譽為編輯器之神的軟件,才明白,顏值啥的都是浮雲,效率才是第一位。關於 vim 如何高效率寫 markdowm,我也是借鑑了別人的思路。視頻在下方,推薦觀看,看完他的所有視頻,我相信你會愛上 linux 的 視頻地址


設置

vim 的一大思想就是手不離開鍵盤,所有操作全都靠鍵盤完成,還可以自定義各種各樣的快捷鍵,無疑能很大程度提高效率。vim 基本操作方法就不用我講了吧,默認大家都用過 vim

markdown 的語法其實很簡單,都是一些特定的格式。但是對於追求效率的人,markdown 還是不夠快,下面是一些提速思路

設置錨點,自定義快捷鍵

可能你會疑問,自定義就自定義嘛,為什麼還要設置錨點?錨點又是什麼?錨點的作用在於讓你快速跳轉到下一個你需要輸入的位置,而不需要通過方向鍵來移動,或者是鼠標來移動

看下這個設置鏈接的例子

我是如何使用 Vim 高效率寫 Markdown 的

錨點就是,在插入模式中使用,a 創建鏈接模板,使用,f 來尋找下一個錨點,並刪除這個錨點,邏輯就這麼簡單,其他的格式也是一樣的,可以讓你完全擺脫方向鍵和鼠標

快捷鍵設置

<code>> 快速添加錨點
autocmd Filetype markdown inoremap <buffer> <silent> ,,
> 尋找下一個錨點
autocmd Filetype markdown inoremap <buffer> <silent> ,f /:nohlsearchc4l
> 尋找下一個錨點並刪除錨點前的空格
autocmd Filetype markdown inoremap <buffer> <silent> ,s / :nohlsearchc5l
> 分割線
autocmd Filetype markdown inoremap <buffer> <silent> ,- ---<enter><enter>
> 加粗
autocmd Filetype markdown inoremap <buffer> <silent> ,b **** F*hi
> 刪除線
autocmd Filetype markdown inoremap <buffer> <silent> ,x ~~~~ F~hi
> 斜體
autocmd Filetype markdown inoremap <buffer> <silent> ,p ** F*i
> 行內代碼
autocmd Filetype markdown inoremap <buffer> <silent> ,q `` F`i
> 代碼塊
autocmd Filetype markdown inoremap <buffer> <silent> ,c ```<enter><enter>```<enter><enter>4kA
> todo

autocmd Filetype markdown inoremap <buffer> <silent> ,g - [ ] <enter>kA
> 下劃線
autocmd Filetype markdown inoremap <buffer> <silent> ,u F/hi
> 圖片
autocmd Filetype markdown inoremap <buffer> <silent> ,p ![]() F[a
> 鏈接
autocmd Filetype markdown inoremap <buffer> <silent> ,a []() F[a
> 一號標題
autocmd Filetype markdown inoremap <buffer> <silent> ,1 #<space><enter>kA
> 二號標題
autocmd Filetype markdown inoremap <buffer> <silent> ,2 ##<space><enter>kA
> 三號標題
autocmd Filetype markdown inoremap <buffer> <silent> ,3 ###<space><enter>kA
> 四號標題
autocmd Filetype markdown inoremap <buffer> <silent> ,4 ####<space><enter>kA
> 插入當前時間
autocmd Filetype markdown inoremap <buffer> <silent> ,t =strftime("%Y-%m-%d %H:%M:%S")/<silent>/<buffer>
/<enter>/<space>/<silent>/<buffer>
/<enter>/<space>/<silent>/<buffer>
/<enter>/<space>/<silent>/<buffer>
/<enter>/<space>/<silent>/<buffer>
/<silent>/<buffer>
/<silent>/<buffer>
/<silent>/<buffer>
/<enter>/<silent>/<buffer>
/<enter>/<enter>/<enter>/<enter>/<silent>/<buffer>
/<silent>/<buffer>
/<silent>/<buffer>
/<silent>/<buffer>
/<silent>/<buffer>/<enter>/<enter>/<silent>/<buffer>
/<silent>/<buffer>
/<silent>/<buffer>/<silent>/<buffer>/<code>

這個快捷鍵的設置算是完全展示了 vim 的神奇

首先看這個幾個前綴,需要分為三部分來看

  1. autocmd Filetype markdown會在打開文件時判斷當前文件類型,如果是 markdown 就執行後面的命令
  2. inoremap 也就是映射命令map,當然它也可以添加很多前綴1
    nore
    表示非遞歸,而遞歸的映射,也就是如果鍵a被映射成了b,c又被映射成了a,如果映射是遞歸的,那麼c就被映射成了b
    n
    表示在普通模式下生效
    v
    表示在可視模式下生效
    i
    表示在插入模式下生效
    c
    表示在命令行模式下生效所以inoremap也就表示在插入模式下生效的非遞歸映射
  3. <buffer> <silent> map的參數,必須放在map後面<buffer> 表示僅在當前緩衝區生效,就算你一開始打開的是md文件,映射生效了,但當你在當前頁面打開非md文件,該映射也只會在md文件中生效<silent> 如果映射的指令中使用了命令行,命令行中也不會顯示執行過程/<silent>/<buffer>/<silent>/<buffer>

後面就是按鍵和映射的指令了,邏輯什麼的就是對 vim 的直接操作,就不詳細介紹了

表格

畫表格最麻煩的就是格式化問題,我們需要用到vim-table-mode 插件

安裝方法 Github 上寫的很詳細,我就不仔細說了,我只講講我怎麼寫表格,我就用的默認配置

使用<leader>tm來開啟表格格式化(如果你不知道<leader>是什麼鍵的話請自行 google),先添加錨點來快速搭建整個表格框架,再依次進行替換/<leader>/<leader>

我是如何使用 Vim 高效率寫 Markdown 的

列表

使用bullets.vim來自動添加列表項和整理列表

我是如何使用 Vim 高效率寫 Markdown 的

預覽

我用的是markdown-preview.nvim

詳細配置請查看 Github,我只使用了默認配置,添加了以下開啟預覽的快捷鍵

<code>noremap r :call CompileRunGcc()
func! CompileRunGcc()

exec "w"
if &filetype == 'c'
exec "!gcc % -o % :sp
:res -15
:term ./%<
elseif &filetype == 'cpp'
set splitbelow
exec "!g++ -std=c++11 % -Wall -o % :sp
:res -15
:term ./%<
elseif &filetype == 'sh'
:!time bash %
elseif &filetype == 'python'
set splitbelow
:sp
:term python3 %
elseif &filetype == 'html'
silent! exec "!firefox % &"
elseif &filetype == 'markdown'
exec "MarkdownPreview"
elseif &filetype == 'go'
set splitbelow
:sp
:term go run %
endif
endfunc
/<code>

這個腳本可以使用r來編譯執行或預覽c/c++, html, python, go, markdown

總結

我就用 markdown 寫寫博客,追求效率至上,使用場景比較單一,還有一些好用的 markdwon 插件我沒怎麼用過就不介紹了


分享到:


相關文章: