在vim上編譯python/LaTex

最近老師在課堂上分享了一段 vim 設定,能在 vim 中編譯 python 並把執行結果貼到 vim 裡面,設定如下

autocmd BufRead *.py nmap <leader>c :w<Esc>G:r!python %<CR>`.

雖然知道只要貼上去就能用了,但是秉持著「有所了解的東西用起來比較安心的原則」就去查了一下到底這裡面到底是啥

python編譯設定詳解

首先是 autocmd BufRead *.py [action]: 若是開始編輯的文件為某 python 檔時執行 [action]

nmap [button] [action]: map [button] 到 [action],只在 Normal mode 生效,在這裡是被上面自動執行的 [action]

<leader>c: <leader> 默認設定為 \ 鍵,而且能以 let mapleader = [key] 來做更動,這裡作為執行接下來指定動作的 [button]

接著的一長串就是 map 到 [button] 的 [action]

:w<Esc>G: 儲存,按下 Esc(返回 Normal mode),按下G(將 cursor 移到文末)

:r!{cmd}: 用 terminal 執行 {cmd} 並將其 standard output(就是會輸出到 terminal 上那個) 插入到 cursor 的位置下

python %<CR>: 編譯並執行此 python 檔,而 在這裡是一個特別的 vim keyword,代表 current file 的名字、<CR> 是 Enter

`.: 將 cursor 移到上一個更動的點

結合起來,這段 vim 設定就是:「按下\c之後會將結果插入 cursor 後並將 cursor 前移至結果前」


我的 LaTex 編譯設定

了解了其中奧秘之後,就是魔改時間啦~ XD

正好最近開始用 LaTex(一種能將 code 編譯成好看的 pdf 的工具),每次預覽都要重新編譯一次好麻煩

設定如下(自創)

autocmd BufRead *.tex nmap <Leader>c :w<Esc>:!pdflatex %<CR>:!envince %:r:S.pdf &<CR><CR>

就不講解了請大家自己研究 😀


結論

  1. 如何快速(?)查詢 vim 設定:

  2. 關於代表檔名的 % : filename-modifiers(關鍵字) 可以用來修改這個 %

  3. 關於 <Leader> key: What is the <leader> in a .vimrc file

  4. envince 是 ubuntu 上內建的 pdf 檢視器,由於在 terminal 的指令都會將 stdin 連接到 terminal,所以要加上 & 來變成背景執行 —— Difference between nohup, disown and &

  5. 補充: NERDTree 是個好東西,ctag/cscope 也是~