Sejak memasang "dark" theme, saya cenderung menjadi malas menulis. Untuk sementara, dark theme saya disable dulu yaa. Terima kasih (^_^) (bandithijo, 2024/09/15) ●
Latar Belakang
Post ini saya tulis sebagai update catatan bagian pertama yang berjudul:
Lightline, Alternatif Vim Statusline.
Saya memutuskan untuk membuat bagian kedua, karena sudah cukup banyak perubahan yang saya tambahkan dari bagian pertama. Terutama pada bagian pengecualian statusline pada Defx buffer.
Kenapa ada pengecualian pada Defx?
Menurut saya, saya tidak memerlukan statusline yang sangat informatif pada Defx.
Agak lucu rasanya, kalau pada Defx, statusline ditampilkan Git branch, line & column poisiton, dll.
Maka, pada buffer Defx, Lightline statusline tidak diperlukan untuk menampilkan status secara lengkap.
Instalasi
Saya menggunakan vim-plug.
Konfigurasi
Contoh-contoh konfigurasi dapat teman-teman lihat pada halaman GitHub dari Lightline.
Saya akan langsung menunjukkan konfigurasi yang saya lakukan pada bagian kedua ini.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
" LightLine
let g:lightline = {
\ 'colorscheme': 'codedark_bandit',
\ 'active': {
\ 'left' : [[ 'mode', 'paste' ],
\ [ 'gitbranch' ],
\ [ 'filename' ]],
\ 'right': [[ 'trailing' ],
\ [ 'lineinfo' ],
\ [ 'percent' ],
\ [ 'filetype', 'fileencoding', 'fileformat' ] ]
\ },
\ 'tab': {
\ 'active' : ['tabnum'],
\ 'inactive' : ['tabnum']
\ },
\ 'tabline': {
\ 'left' : [['buffers']],
\ 'right' : [['string1'], ['string2', 'smarttabs']]
\ },
\ 'separator': {
\ 'left': '', 'right': ''
\ },
\ 'subseparator': {
\ 'left': '\u2502', 'right': '\u2502'
\ },
\ 'component': {
\ 'filename': '%<%{LightlineFileName()}'
\ },
\ 'component_function': {
\ 'gitbranch' : 'LightlineFugitive',
\ 'readonly' : 'LightlineReadonly',
\ 'fileformat' : 'LightlineFileformat',
\ 'filetype' : 'LightlineFiletype',
\ 'fileencoding' : 'LightlineFileEncoding',
\ 'lineinfo' : 'LightlineLineInfo',
\ 'percent' : 'LightlinePercent',
\ 'mode' : 'LightlineMode',
\ },
\ 'component_expand': {
\ 'buffers' : 'lightline#bufferline#buffers',
\ 'string1' : 'String1',
\ 'string2' : 'String2',
\ 'smarttabs' : 'SmartTabsIndicator',
\ 'trailing' : 'LightlineTrailingWhitespace',
\ },
\ 'component_type': {
\ 'buffers' : 'tabsel',
\ 'trailing' : 'warning'
\ },
\ 'mode_map': {
\ 'n' : ' N0RMAL',
\ 'i' : ' INSERT',
\ 'R' : ' REPLACE',
\ 'v' : ' VISUAL',
\ 'V' : ' V-LINE',
\ "\<C-v>" : ' V-BL0CK',
\ 'c' : ' COMMAND',
\ 's' : ' SELECT',
\ 'S' : ' S-LINE',
\ "\<C-s>" : ' S-BL0CK',
\ 't' : ' TERMINAL',
\ }
\}
function! LightlineReadonly()
return &readonly ? '' : ''
endfunction
function! LightlineFugitive()
if &filetype !=? 'defx' && &filetype !=? 'tagbar' && &filetype !=? 'taglist'
if exists('*fugitive#head')
let branch = fugitive#head()
return branch !=# '' ? ' ' . branch : ''
endif
return fugitive#head()
else
return ''
endif
endfunction
function! LightlineFileformat()
if &filetype !=? 'defx' && &filetype !=? 'tagbar' && &filetype !=? 'taglist'
return winwidth(0) > 70 ? (&fileformat . ' ' . WebDevIconsGetFileFormatSymbol()) . ' ' : ''
else
return ''
endif
endfunction
function! LightlineFiletype()
if &filetype !=? 'defx' && &filetype !=? 'tagbar' && &filetype !=? 'taglist'
return winwidth(0) > 70 ? (strlen(&filetype) ? &filetype . ' ' . WebDevIconsGetFileTypeSymbol() : 'no ft') : ''
else
return ''
endif
endfunction
function! LightlineFileEncoding()
if &filetype !=? 'defx' && &filetype !=? 'tagbar' && &filetype !=? 'taglist'
return &fileencoding
else
return ''
endif
endfunction
function! LightlineLineInfo()
if &filetype !=? 'defx' && &filetype !=? 'tagbar' && &filetype !=? 'taglist'
let current_line = printf('%3s', line('.'))
let current_col = printf('%-3s', col('.'))
let lineinfo = ' ' . current_line . ':' . current_col
return lineinfo
else
return ''
endif
endfunction
function! LightlinePercent()
if &filetype !=? 'defx' && &filetype !=? 'tagbar' && &filetype !=? 'taglist'
return printf(' %3s', (line('.') * 100 / line('$'))) . '%'
else
return ''
endif
endfunction
function! LightlineFileName()
let filename = expand('%')
let modified = &modified ? '' : ''
let readonly = &readonly
if &filetype !=? 'defx' && &filetype !=? 'tagbar' && &filetype !=? 'taglist'
if filename ==# ''
return '[No Name]'
endif
let terms = split(filename, ':')
if terms[0] ==# 'term'
return '[' . terms[-1] . ']'
endif
return filename . ' ' . (readonly ? '' : modified)
else
return expand('%:t') ==# '__Tagbar__.1' ? '[tagbar]' :
\ expand('%:t') ==# '__Tag_List__' ? '[taglist]' :
\ &filetype ==# 'defx' ? '[defx]' :
\ ''
endif
endfunction
function! LightlineMode()
return expand('%:t') ==# '__Tagbar__.1' ? ' TAGBAR' :
\ expand('%:t') ==# '__Tag_List__' ? ' TAGLIST' :
\ &filetype ==# 'defx' ? ' DEFX' :
\ lightline#mode()
endfunction
function! String1()
return ' BANDITHIJO.GITHUB.IO'
endfunction
function! String2()
return 'BUFFERS'
endfunction
function! SmartTabsIndicator()
let tabs = lightline#tab#tabnum(tabpagenr())
let tab_total = tabpagenr('$')
return tabpagenr('$') > 1 ? ('TABS ' . tabs . '/' . tab_total) : ''
endfunction
function! LightlineTrailingWhitespace()
if &filetype !=? 'defx'
let status = lightline#trailing_whitespace#component()
return status == 'trailing' ? '!' : ''
else
return ''
endif
endfunction
" autoreload
command! LightlineReload call LightlineReload()
function! LightlineReload()
call lightline#init()
call lightline#colorscheme()
call lightline#update()
endfunction
set showtabline=2 " Show tabline, 2 show, 1 hide
set guioptions-=e " Don't use GUI tabline
Penjelasan
Seperti yang dapat dilihat di atas, cukup banyak function yang saya definisikan.
Saya membuat function agar lebih leluasa untuk memodifikasi isi dari statusline apabila dirasa tampilan default yang dsediakan kurang mencukupi.
Function-function modifikasi ini nantinya ditempatkan pada 'component_function': {..}
.
Credit
Terima kasih kepada mas Yeri, untuk catatan di blognya.
Pesan Penulis
Sepertinya, segini dulu yang dapat saya tuliskan.
Untuk konfigurasi Lightline milik saya yang lebih terbaru, dapat teman-teman kunjungi di sini.
Mudah-mudahan dapat bermanfaat.
Terima kasih.
(^_^)
Referensi
-
github.com/itchyny/lightline.vim
Diakses tanggal: 2020/10/30 -
hagen.dev/kristoffer/dotfiles - [nvim] Lightline config
Diakses tanggal: 2020/10/30
Lisensi
Atribusi-NonKomersial-BerbagiSerupa 4.0 Internasional (CC BY-NC-SA 4.0)
Penulis
My journey kicks off from reading textbooks as a former Medical Student to digging bugs as a Software Engineer – a delightful rollercoaster of career twists. Embracing failure with the grace of a Cat avoiding water, I've seamlessly transitioned from Stethoscope to Keyboard. Armed with ability for learning and adapting faster than a Heart Beat, I'm on a mission to turn Code into a Product.
- Rizqi Nur Assyaufi