Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

lightline.vim を使って vim のステータスラインをカスタマイズ

$
0
0

先日 vim-powerlineから vim-airlineに乗り換えたばかりだったのですが、あっさり lightline.vimに乗り換えてしまいました。

理由は、lightline.vim 作者さんの以下記事に共感したからです。

また、設定方法が直感的で分かりやすい点や、カスタマイズしやすい点なども気に入りました。

インストール

NeoBundle 'itchyny/lightline.vim'

今回のカスタマイズでは、以下のプラグインと連携させているので入れておくと良いです。
(無くてもエラーになったりはしません)

NeoBundle 'tpope/vim-fugitive'
NeoBundle 'airblade/vim-gitgutter'

NeoBundle 以外のインストール方法は、README読んで下さい。

カスタマイズ

おすすめの設定ですが、READMEを上から順に試していくのも良いですが、作者さんの設定を真似るのが一番手っ取り早いです。

作者さんの設定は、READMEの一番最後に記載されています。
もしくは、直接 作者さんの .vimrcを参考にしましょう。

さらに今回は、カーソル下の文字コード表示と、vim-gitgutterと連携してGitの追加/変更/削除のハンク数も表示させるようにしました。

lightline-vim.png

以下が最終的な設定です。

特に解説はしませんが lightline.vim の設定方法は非常に直感的で分かりやすいので、すぐに理解できると思います。
また、READMEがチュートリアル方式になっているので、もし分からなければ読んでみると良いでしょう。

" vim-gitgutterletg:gitgutter_sign_added ='✚'letg:gitgutter_sign_modified ='➜'letg:gitgutter_sign_removed ='✘'" lightline.vimletg:lightline = {
        \ 'colorscheme': 'landscape',
        \ 'mode_map': {'c': 'NORMAL'},
        \ 'active': {
        \   'left': [
        \     ['mode','paste'],
        \     ['fugitive','gitgutter','filename'],
        \   ],
        \   'right': [
        \     ['lineinfo','syntastic'],
        \     ['percent'],
        \     ['charcode','fileformat','fileencoding','filetype'],
        \   ]
        \ },
        \ 'component_function': {
        \   'modified': 'MyModified',
        \   'readonly': 'MyReadonly',
        \   'fugitive': 'MyFugitive',
        \   'filename': 'MyFilename',
        \   'fileformat': 'MyFileformat',
        \   'filetype': 'MyFiletype',
        \   'fileencoding': 'MyFileencoding',
        \   'mode': 'MyMode',
        \   'syntastic': 'SyntasticStatuslineFlag',
        \   'charcode': 'MyCharCode',
        \   'gitgutter': 'MyGitGutter',
        \ },
        \ 'separator': {'left': '⮀','right': '⮂'},
        \ 'subseparator': {'left': '⮁','right': '⮃'}
        \ }

function! MyModified()return&ft=~'help\|vimfiler\|gundo' ? '' : &modified ? '+' : &modifiable ? '' : '-'endfunctionfunction! MyReadonly()return&ft!~? 'help\|vimfiler\|gundo'&& &ro ? '⭤' : ''endfunctionfunction! MyFilename()return(''!= MyReadonly() ? MyReadonly() . ' ' : '') .
        \ (&ft=='vimfiler' ? vimfiler#get_status_string() :
        \  &ft=='unite' ? unite#get_status_string() :
        \  &ft=='vimshell' ? substitute(b:vimshell.current_dir,expand('~'),'~','') :
        \ ''!= expand('%t') ? expand('%t') : '[No Name]') .
        \ (''!= MyModified() ? ' ' . MyModified() : '')endfunctionfunction! MyFugitive()tryif&ft!~? 'vimfiler\|gundo'&& exists('*fugitive#head')let _ = fugitive#head()return strlen(_) ? '⭠ '._ : ''endifcatchendtryreturn''endfunctionfunction! MyFileformat()returnwinwidth('.')>70 ? &fileformat : ''endfunctionfunction! MyFiletype()returnwinwidth('.')>70 ? (strlen(&filetype) ? &filetype : 'no ft') : ''endfunctionfunction! MyFileencoding()returnwinwidth('.')>70 ? (strlen(&fenc) ? &fenc : &enc) : ''endfunctionfunction! MyMode()returnwinwidth('.')>60 ? lightline#mode() : ''endfunctionfunction! MyGitGutter()if! exists('*GitGutterGetHunkSummary')
        \ ||!get(g:,'gitgutter_enabled',0)
        \ ||winwidth('.')<=90return''endiflet symbols = [
        \ g:gitgutter_sign_added . ' ',
        \ g:gitgutter_sign_modified . ' ',
        \ g:gitgutter_sign_removed . ' '
        \ ]
  let hunks = GitGutterGetHunkSummary()letret= []
  foriin [0,1,2]
    if hunks[i] >0call add(ret, symbols[i] . hunks[i])endifendforreturnjoin(ret,' ')endfunction" https://github.com/Lokaltog/vim-powerline/blob/develop/autoload/Powerline/Functions.vimfunction! MyCharCode()ifwinwidth('.')<=70return''endif" Get the output of :asciiredir=>asciisilent!asciiredir END

  ifmatch(ascii,'NUL')!=-1return'NUL'endif" Zero pad hex valueslet nrformat ='0x%02x'letencoding=(&fenc=='' ? &enc : &fenc)ifencoding=='utf-8'" Zero pad with 4 zeroes in unicode fileslet nrformat ='0x%04x'endif" Get the character and the numeric value from the return value of :ascii" This matches the two first pieces of the return value, e.g." "<F>  70" => char: 'F', nr: '70'let [str, char, nr; rest] = matchlist(ascii,'\v\<(.{-1,})\>\s*([0-9]+)')" Format the numeric valuelet nr = printf(nrformat, nr)return"'". char ."' ". nr
endfunction

あとは気に入らない部分を自分好みに変えていくと良いかと思います。

  • vim-gitgutter の sign は私の好みで変えてるだけなので、別にデフォルトのままでも良いです
  • separatorsubseparatorvim-powerlineのものなので、対応していない方は設定を削除するか、フォントにパッチを当てて下さい。powerlineを使ってる方はそっちでもおk

私の最新の設定はGithubに置いてあるので、良ければ何かの参考にでも。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>