Fernに関するちょっとした話
Fernの作者によるこれを読んで、VimのファイラーをNERDTreeからFernに変えてみようと思った時に起こったちょっとした話
.vimrc
call jetpack#begin()
Jetpack 'lambdalisue/fern.vim'
call jetpack#end()
syntax on
filetype plugin indent on
""" Fern
" Show hidden files
let g:fern#default_hidden=1
" Show file tree with Ctrl+n
nnoremap <C-n> :Fern . -reveal=% -drawer -toggle -width=40<CR>
" Color
colorscheme abstract
FernはCtr
+ n
[1]でドロワーとして開くようにしている。
^_
がくっつく
ツリーのノードにMacのターミナルだとなんかこんな感じでファイルツリーの最後に^_
が表示される。
home
|- Projects/^_
|+ specreq/^_
|- tools/^_
| myip.sh^_
| pass.rb^_
理由はMacのデフォルトのvimはconceal
を無効にしてビルドされているから。ビルドし直せば^_
は消える[2]。私はHomebrewで以下のように。vim --version
すれば何が有効になっているかはわかる。ビルドによりおそらくvimのパスが変わるので注意。
brew install vim --build-from-source
ツリーの左側の色
カラースキームによってはツリーの左側の色に違和感があるかもしれない。どこのことを言ってるのかわかりやすくするためにわざと白くしてみた。
ひとまず今の定義を確認してみる。vimを開いて:hi
とやるだけ。
これ自体は~/.vim/colors
にあるカラースキームの定義ファイル(ハイライトグループというらしい)を表示しているだけのはず。でも、ツリーの横の部分ってどこを書き換えたらいいの...?
と思っていたら、カーソルのあるところのカラースキームの定義を教えてくれるvim関数に出会った。以下を.vimrc
に書いて、色ついているところにカーソル合わせて、:SyntaxInfo
を叩くと下の方にハイライトグループが表示されるのでそこを書き換えればよい。
function! s:get_syn_id(transparent)
let synid = synID(line("."), col("."), 1)
if a:transparent
return synIDtrans(synid)
else
return synid
endif
endfunction
function! s:get_syn_attr(synid)
let name = synIDattr(a:synid, "name")
let ctermfg = synIDattr(a:synid, "fg", "cterm")
let ctermbg = synIDattr(a:synid, "bg", "cterm")
let guifg = synIDattr(a:synid, "fg", "gui")
let guibg = synIDattr(a:synid, "bg", "gui")
return {
\ "name": name,
\ "ctermfg": ctermfg,
\ "ctermbg": ctermbg,
\ "guifg": guifg,
\ "guibg": guibg}
endfunction
function! s:get_syn_info()
let baseSyn = s:get_syn_attr(s:get_syn_id(0))
echo "name: " . baseSyn.name .
\ " ctermfg: " . baseSyn.ctermfg .
\ " ctermbg: " . baseSyn.ctermbg .
\ " guifg: " . baseSyn.guifg .
\ " guibg: " . baseSyn.guibg
let linkedSyn = s:get_syn_attr(s:get_syn_id(1))
echo "link to"
echo "name: " . linkedSyn.name .
\ " ctermfg: " . linkedSyn.ctermfg .
\ " ctermbg: " . linkedSyn.ctermbg .
\ " guifg: " . linkedSyn.guifg .
\ " guibg: " . linkedSyn.guibg
endfunction
command! SyntaxInfo call s:get_syn_info()
ちなみに出典はここ
これはめっちゃ便利な関数だったが、なぜかツリーの左側の部分だけはカーソルで選択できないので使えなかった。その後、いろいろ触っていてここのハイライトグループはSignColumn
だとわかった。
ということで、今回かえたのはターミナルのツリーの左端のカラムの色とディレクトリの色
"hi Directory ctermfg=62 ctermbg=NONE cterm=NONE guifg=#5A5AE6 guibg=NONE gui=NONE
hi Directory ctermfg=229 ctermbg=NONE cterm=NONE guifg=#FEF29E guibg=NONE gui=NONE
"hi SignColumn ctermfg=246 ctermbg=235 cterm=NONE guifg=#909194 guibg=#2E2F31 gui=NONE
hi SignColumn ctermfg=246 ctermbg=0 cterm=NONE guifg=#909194 guibg=#2E2F31 gui=NONE
ちなみにこれらはvimのコマンドなので、:hi Directory ctermfg=**
とかで色を一時的にあてて試してみることができる。
あと、いじっているとカラースキームがおかしくなることがある。その場合はカラースキームを以下のようにリロードするとよい。
:source ~/.vim/colors/molokai.vim
その他の参考になりそうなサイト
これもいい情報が満載
まとめ
Fernはいいぞ。
Discussion