Varsayılan durum satırının biçimi nedir?


14

Burada vim durum satırının nasıl güncelleneceğini okudum . Ve başarıyla güncelleyebiliyorum.

Ancak, varsayılan vim durum satırının biçimini korumak ve sadece dosya boyutu, dosya türü vb.Gibi daha fazla bilgi eklemek istiyorum.

Vim varsayılan durum satırı:

   <file-name>                              line_num,col_num        %file

Aşağıdakileri nasıl yapabilirim?

  1. Dosya adından sonra bilgi eklemek istiyorum
  2. Geçerli durum satırı biçimini :set statuslinegörüntüleme ( hiçbir şey göstermez)

Denedim:

set statusline+=%y

Ancak bu, tüm durum satırının üzerine yazar ve yalnızca dosya türünü ( %y) görüntüler.

İpucu var mı?


2
Vim ile ilgileniyorsanız, Vi ve Vim'e çıkış yapın !
muru

Yanıtlar:


15

@Muru'nun dediği gibi, oluşturma kodu olarak ayarlandığında varsayılan durum satırını tam olarak simüle etmek mümkün görünmüyor statusline, statuslineayarda belirtilemeyen şeyler yapıyor . Bununla birlikte, oldukça yakın olmak mümkündür. rulerEtkinleştirildiğinde varsayılan durum satırının nasıl göründüğüne dair makul bir tahmin :

:set statusline=%f\ %h%w%m%r\ %=%(%l,%c%V\ %=\ %P%)

Temel fark, satır ve sütun numaralarının konumlandırılmasıdır. Varsayılan boşluk mantığını simüle etmek mümkünse, bunu yapmanın bir yolunu bulamadım. Belki de bu sizin amaçlarınız için yeterince yakın olacaktır.

.vimrcSözdizimi durum satırı bilgilerini cetvelle normal bir vim durum satırına benzeyen şeyin ortasına yerleştirmek için bunun bölünmüş bir sürümünü kendim kullanıyorum :

" start of default statusline
set statusline=%f\ %h%w%m%r\ 
" NOTE: preceding line has a trailing space character

" Syntastic statusline
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

" end of default statusline (with ruler)
set statusline+=%=%(%l,%c%V\ %=\ %P%)

7

Kod, boş bir durum dizesine herhangi bir değer ayarlamaz, ancak bazı varsayılanları kullanarak çalışır. Bkz . src/screen.cFonksiyonwin_redr_status() . Gösterilen öğeler, derlenen özelliklere dayanmaktadır, bu nedenle, derlenen özelliklere bakmak için gereken durum çizgisini yeniden yapılandırmak için aşağıda verilen örnek durum çizgisini kullanmak daha basit olabilir :h statusline:

Examples:
Emulate standard status line with 'ruler' set 
  :set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

Genişlikten (14) sonraki nokta sembolü (.) Ne anlama geliyor %-14.(%l,%c%V%)?
Shamaoke

5

tl; Dr.

:set statusline=%f\ %h%w%m%r%=%-14.(%l,%c%V%)\ %P

Önerdiğim çözüm diğer cevaplardan çok farklı olmasa da, daha ayrıntılı bir açıklama paylaşmak istiyorum.

orijinal davranış

İlk olarak, vimdurum satırını nasıl çizdiğini bulalım. Sorumlu fonksiyonlar win_redr_status()ve win_redr_ruler().

vimtampon alır adını , bir ekler boşluk izlenmesinin de bayraklar varsa (gibi [Help], [Preview], [+], [RO]). Sonra o ekler bayrakları .

Normalde cetvel için 18 karakter hücresi ayırır. Arabellek adı kısmı mevcut alanın geri kalanına uymuyorsa , soldan vim keser< ve başlangıçta ekler .

Oda varsa klavye haritası , onu ekler sonunda (sağ hizalanmış).

Şimdi, yönetici. <row>,<col>-<virtcol> Kısmen ve göreceli konumdan oluşur (sağa hizalı).

Tampon adıyla kısmı en azından bir almalıdır bir sınırlama da bulunmaktadır yarısı arasında genişliği .

çözüm

Şimdi dokümanlar tarafından önerilen değeri alalım :

:set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

nerede

%< - where to truncate the line if too long
%f - buffer name (path to a file, or something)
%h - help flag
%m - modified flag
%r - readonly flag
%= - separater between the left (buffer name) and the right (ruler) parts
%-14.(...%) - minimum field width == 14
%l - line
%c - column
%V - virtual column
%P - percentage

Dolayısıyla, %<varsayılan olarak arabellek adı başlangıçta kesildiği için ilk göz ardı edilebilir. Ardından, önizleme bayrağı ( %w) eksik . Ayrıca, pencere 18 * 2karakterlerden daha genişse, sağ kısım durum satırının yarısından fazlasını alır.

En azından atlayabilir %<ve ekleyebiliriz %w:

:set statusline=%f\ %h%w%m%r%=%-14.(%l,%c%V%)\ %P

Daha ileri gidebilir ve doğru parçanın durum satırının yarısından fazlasını almadığından emin olabiliriz:

set statusline=%!MyStatusLine()
function! MyStatusLine()
    let l:w = min([14,winwidth(0)/2-3])
    return '%f %h%w%m%r%=%-' . l:w . '.(%l,%c%V%) %P'
endfunction

Sonra o özelliklerine bağlıdır yapabilirsiniz vimedildi ile derlenmiş .

if has("quickfix")
    ...
endif

Ancak bunun pratik olmadığını söyleyebilirim ve önceki çözüm çoğu amaç ve amaç için yeterli olacaktır. Ancak, son çözüm sizin için işe yaramazsa, bana neyin yanlış olduğunu söyleyin, ben daha iyi bir çözüm bulmaya çalışacağım.


Laurence Gonsalves tarafından önerilen çözümün sorunu, eğer bayrak yoksa, sol ve sağ kısımlar arasında iki boşluk bulunmasıdır:

:set statusline=%f\ %h%w%m%r\ %=%(%l,%c%V\ %=\ %P%)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.