LoginSignup
5
7

More than 5 years have passed since last update.

lightline.vimのtablineを設定してみた

Last updated at Posted at 2017-02-25

はじめに

Vimのタブのところに、どこのディレクトリのファイルなのかのヒントが欲しいときがあります。そして、それはできるだけシンプルなものがいいです。たとえば、ディレクトリ名の頭文字を含むものです。

スクリーンショット 2017-02-26 19.31.23.png

スクリーンショット 2017-02-26 19.28.58.png

私はlightline.vimを使っているので、それに合わせる必要がありました。

今回はその設定を紹介します。

設定

設定は下記になります:

if $TERM == 'screen'
    set t_Co=256
endif

set background=dark
let g:solarized_termcolors=256
colorscheme solarized

let g:lightline = {
      \ 'colorscheme': 'solarized_dark',
      \ 'active': {
      \   'left': [ [ 'mode', 'paste' ],
      \             [ 'fugitive', 'filename' ] ]
      \ },
      \ 'component_function': {
      \   'readonly': 'LightlineReadonly',
      \   'modified': 'LightlineModified',
      \   'fugitive': 'LightlineFugitive',
      \   'filename': 'LightlineFilename'
      \ },
      \ 'separator': { 'left': '', 'right': '' },
      \ 'subseparator': { 'left': '|', 'right': '|' }
      \ }

function! LightlineModified()
  if &filetype == 'help'
    return ''
  elseif &modified
    return '+'
  elseif &modifiable
    return ''
  else
    return '-'
  endif
endfunction

function! LightlineReadonly()
  if &filetype == 'help'
    return ''
  elseif &readonly
    return 'x'
  else
    return ''
  endif
endfunction

function! LightlineFugitive()
  return exists('*fugitive#head') ? fugitive#head() : ''
endfunction

function! LightlineFilename()
  return ('' != LightlineReadonly() ? LightlineReadonly() . ' ' : '') .
       \ ('' != expand('%:t') ? expand('%:t') : '[No Name]') .
       \ ('' != LightlineModified() ? ' ' . LightlineModified() : '')
endfunction

let g:lightline.tab = {
      \ 'active': [ 'tabnum', 'filename', 'modified' ],
      \ 'inactive': [ 'tabnum', 'filename', 'modified' ]
      \ }

let g:lightline.tab_component_function = {
      \ 'filename': 'LightlineTabFilename',
      \ 'modified': 'lightline#tab#modified',
      \ 'readonly': 'lightline#tab#readonly',
      \ 'tabnum': 'lightline#tab#tabnum' }

function! LightlineTabFilename(n) abort
  let buflist = tabpagebuflist(a:n)
  let winnr = tabpagewinnr(a:n)
  let _ = pathshorten(expand('#'.buflist[winnr - 1].':f'))
  return _ !=# '' ? _ : '[No Name]'
endfunction

少し設定の解説

先頭に、私はターミナルでGNU Screenを使っていますので、その設定とカラースキームの設定があります。

LightlineTabFilename(n)のところ以外はlightline.vimの設定チュートリアルにあるものです。

LightlineTabFilename(n)のアイデアは、ファイル名ではなく相対パスを取得して、その相対パスをpathshortenで変換して、表示させるというものです。

pathshortenを試してみるにはVimを開いて、:echo pathshorten('~/.vim/autoload/myfile.vim')を試すのがいいと思います。名前の通りパスを短くしてくれます。

気をつけなければいけないところは、tab_component_functionで指定する関数は引数を一つ受け取るというところです。(filenameコンポーネントのときだけかもしれませんが、その関数が受け取る値はカレントタブページの番号です。なので、仮引数をnとせずtabnrにしたほうがわかりやすいかもしれません。)

動かすためには、いくつかのプラグインをインストールするか、不要なところを削る必要があります。どちらでもお好みのほうを試していただければと思います。

参考URL

5
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7