沒穿方服

索引

顯示╱隱藏內文

Color scheme: bootleg

用了半年的 Vim,一向認為預設的 slate 加上少許自訂就相當管用,不必再創招煩人了。
直到開始調 gVim,才發現 gui 配色跟 term 實在差很多……
(對付此問題可參考依云寫的 gui2term.py,由 gui 轉出 256 term 的配色。 ——只可惜我的需求是 term2gui)

8/22 放上自訂的 colorscheme bootleg(不是 bootleq 喔)

  • 對稱性:只支援 256 色 term 和 gui,且盡量讓兩者顯示效果相同。
    這裡會特別處理粗體(bold):gui 不使用粗體,cterm 以 MinTTY 預設顯示為準(粗體會被轉為亮色)。
  • 保守:基本配色是從 slate(256 色 term,非 gui 的)繼承而來。
  • 易讀:暗色背景、高對比。
    如果還是有字感覺太暗,歸咎於螢幕設定不同吧。
  • 個人調整:最後原則還是以個人使用為重,像 Pmenu、Diff 的顏色都跟 slate 沒有關聯了。另外還有加幾個自訂 highlight group(主要是 TabLine 系列)若沒特別配合調過,這些都是沒用的。

原始碼

gist: 543652 - Vim colorscheme: bootleg

擷圖參考 (cterm/gui)

畫面很亂不全是配色的錯啊 gui 較少用,問題可能較多

另付敝人調色時愛用的寶貝色表

這圖我也忘記怎麼做的了

Vim Tips Wiki 已經有一篇 CamelCase to under lined and vice versa 提供 visual mode 用的兩份 map。

這篇則是在 normal mode 取得游標所在的 word,若符合 CamelCase 或 under_score 型式便直接變更文字。

特別考慮游標不在 keyword 上的情形,例如 <camelCase>,游標在 < 上也能轉換。
但游標在行尾時,因為 non-blank 的字皆被 <cword> 接受,就先不研究怎麼排除 non-keyword 了。

原始碼:gist: 541723 - [.vimrc] toggle between CamelCased/under_scored word

TYPE IV~沒穿方服~ 從地下的屍體放置場冒出來的僵屍,即使已經死了,但還保留著吃東西的本能。 
文獻來自 PS 恐怖遊戲之非官方印刷品。

遊戲結局數分鐘前才登場的 lo-fi 多邊形喪屍,已經失去 9 成以上的嚇人能力,然後惡靈古堡就爆炸了。

跟洋館的怪物相比實在是很無味的角色,幸好有個多麼好聽的名字而被人記住。

編譯沒有 gui 的 Vim 7.3,無特殊需求,純升級。

  1. ftp.vim.org/pub/vim/unix/ 下載 unix 用的原始碼 vim-7.3.tar.bz2,解開後進入 vim73 目錄。
  2. 直接選 big 包的 features(包括 multi_byte 等沒理由不要的功能)。
    ./configure --with-features=big

(也可加 --enable-rubyinterp 等 optional feature,詳見 ./configure --help)

  1. make
  2. make install

之後下 vim --version 應該就能看到新設定。


部份相關設定(非全部的新功能)

vimrc 基本設定部份

if version >= 703
  set conceallevel=1
  set concealcursor=nc
  set colorcolumn=+1
  set cinoptions+=L0
  set undofile
  set undodir=~/.vim/undofiles
  if !isdirectory(&undodir)
    call mkdir((&undodir, "p")
  endif
  map  <C-ScrollWheelDown> <ScrollWheelRight>
  map  <C-ScrollWheelUp>   <ScrollWheelLeft>
  imap <C-ScrollWheelDown> <ScrollWheelRight>
  imap <C-ScrollWheelUp>   <ScrollWheelLeft>
endif
  • conceal 的設定以不影響排版為主。下圖說明:

    上半 normal mode,下半 insert mode

    以 help 檔為例,平時只要把 |:autocmd| 左右的「|」塗黑,不必真的移除。
    但游標移到該行時,因為 CursorLine 有上深灰,所以能識別有文字被隱藏掉。
    最後在 insert  mode(如圖下半部)或  visual mode,應照實顯示原文。

  • colorcolumn 在 textwidth 右邊標顏色。
    從 PSPad 轉到 Vim 的時候就想要這功能,不過出來以後效果挺醜的(也太麤了吧),所以最後配合 colorscheme 調成只有在游標所在的行能看見。前面擷圖中最右邊黑 column 即是。
  • L 是 cindent 新增的設定值,參考 :help cinoptions-values。
    另有新增 J 給 JavaScript 用,不過似乎預設就包含了。
  • undofile 沒設定的話就完全沒效果……
    這可是讓 :e! 或下次進入 Vim 後還能 undo 的便利功能啊。
  • 新增的水平 ScrollWheel 系列,測試沒效,先放置不管。

偵測到檔案類型為 help 時要跑的設定(help_rc 這種寫法是參考 c9s 的 gist 學來的)

fun! s:help_rc()
  set number
  if version >= 703
    set conceallevel=1
    set concealcursor=nc
    set colorcolumn=+1
  endif
endf
au FileType help :call s:help_rc()

因 help 類型檔案會重設 conceal 設定所以為之。

colorscheme

if version >= 703
  hi Conceal ctermfg=240 ctermbg=Black guifg=#585860 guibg=Black
  hi ColorColumn ctermbg=Black guibg=Black
endif

為了前述效果所用的顏色設定(換個跟我不一樣的 colorscheme 就不適用了。)

FuzzyFinder 找分頁

如果用了之前寫的 Vim 分頁列(tabline)設定,script 空間就會出現變數 s:tabLineTabs,內含所有分頁編號、檔名等資料。

於是可以用 FuzzyFinder 尋找分頁,例如 map <Leader>fg 叫出下面選單:

僅供參考,某些檔案是沒法用 Vim 編輯的

接著按 <CR> 便會跳到該分頁,按 <LocalLeader><CR> 則是關閉該分頁。(當然 g:fuf_keyOpen 系列變數要先設好)


原始碼展開如下(放在 .vimrc)

let g:fuf_tabListener = {}

function! g:fuf_tabListener.onComplete(item, method)
  let l:tabnr = matchstr(a:item, '\d\+')
  if a:method == 4
    silent exec 'normal ' . l:tabnr . 'gt'
  else
    silent exec 'tabclose ' . l:tabnr
  endif
endf

function g:fuf_tabListener.onAbort()
endf

function! g:fuf_tabFinder()
  if exists("s:tabLineTabs")
    let l:tabList = []
    for tab in s:tabLineTabs
      let label = tab.n . '. ' . (strlen(tab.split) > 0 ? ('(' . tab.split . ')') : '') . tab.flag . tab.filename
      if tab.n == tabpagenr()
        let label = '*' . label
      endif
      call add(l:tabList, label)
    endfor
    call fuf#callbackitem#launch('', 1, 'tabs>', g:fuf_tabListener, l:tabList, 0)
  endif
endf

nnoremap <LocalLeader>fg :call g:fuf_tabFinder()<CR>

若沒有用之前寫的 tabline 設定,也可嘗試取該 tabline 原始碼產生 s:tabLineTabs 的部分來用;或從 :tabs 抓分頁資料,再仿照 用 FuzzyFinder 尋找 register 自己建立分頁資料 list。