Thursday, March 27, 2014

แสดง buffer list บน tabline ด้วย vim-airline

หลายคนคงรู้จักหรือเคยใช้ vim-airline กันบางแล้ว ส่วนใครที่ยังไม่รู้จัก vim-airline คือ plugin ที่ใช้ประโยชน์จาก statusline ให้แสดงข้อมูลที่เกี่ยวกับ file, project, scm หรือ ข้อมูลจาก plugin อื่นๆที่ support ได้อย่างสวยงาม ทำให้ vim ดู modern ขึ้นมาทันที

แต่ที่จะพูดถึงวันนี้คือการนำเอา tabline มาใช้ประโยชน์ให้แสดง buffer list ทำให้ไม่ไปเบียดเบียน statusline หรือสร้าง window มาจำลองเป็น buffer bar

การ set vim-airline ให้แสดง buffer list สามารถดูได้ที่
https://github.com/bling/vim-airline#smarter-tab-line

เมือ set ตามด้านบนแล้ว tabline ซึ่งปกติเอาไว้แสดง tab ที่เปิดอยู่จะแสดง buffer list แทนในกรณีที่ไม่ได้เปิด tab (คือมี tab เดียว) และเมื่อไหร่ก็ตามที่มีการสร้าง tab tabline ก็จะแสดงข้อมูล tab แทน

การสลับระหว่าง buffer หรือ tab ที่แสดงอยู่บน tabline ตอนนี้มีอยู่สอง mode ทำให้อาจจะสับสน ถ้าเราอยากย้ายไปที่ buffer/tab ที่ติดกัน แต่ต้องจำหรือดูว่าตอนนี้อยู่ใน mode tab หรือ mode buffer เพื่อที่จะใช้ คำสั่ง prev/next ที่ต่างกัน

อันนี้เป็น mapping ง่ายๆ ที่ผมใช้อยู่ เป็นการสลับ prev/next buffer/tab ที่เรามองเห็น ด้วย H และ L โดยไม่ต้องรู้ว่าที่เห็นอยู่เป็น tab หรือ buffer

function s:NextTabLine()
  if tabpagenr('$') == 1
    bnext
  else
    tabnext
  endif
endfunction

function s:PrevTabLine()
  if tabpagenr('$') == 1
    bprev
  else
    tabprev
  endif
endfunction

nnoremap <silent> H :call <SID>PrevTabLine()<CR>
nnoremap <silent> L :call <SID>NextTabLine()<CR>

No comments:

Post a Comment