tl; dr
:set statusline=%f\ %h%w%m%r%=%-14.(%l,%c%V%)\ %P
내 제안 된 솔루션은 다른 답변과 크게 다르지 않지만 더 자세한 설명을 나누고 싶습니다.
원래 행동
먼저 vim상태 표시 줄을 그리는 방법을 알아 보겠습니다 . 담당 기능은 win_redr_status()및 win_redr_ruler()입니다.
vim버퍼 소요 이름을 하는 추가 공간을 따라 어떤 플래그가있는 경우 (같은 [Help], [Preview], [+], [RO]). 다음 은 추가 플래그 .
일반적으로 눈금자에 18 개의 문자 셀 을 할당 합니다. 버퍼 이름 부분이 사용 가능한 나머지 공간에 맞지 않으면 왼쪽에서 vim 잘리고< 시작 부분에 추가 됩니다.
keymap을 위한 공간이 있으면 끝에 추가됩니다 (오른쪽 정렬).
자, 통치자 이 구성 <row>,<col>-<virtcol> 부품 과의 상대 위치 (오른쪽 정렬).
버퍼 이름을 가진 부분 이 너비의 절반 이상을 가져야한다는 제한도 있습니다 .
해결책
이제 문서에서 제안한 가치를 살펴 보겠습니다 .
:set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
어디
%< - 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
따라서 %<기본적으로 버퍼 이름이 시작 부분에서 잘 리므로 먼저 생략 할 수 있습니다. 그런 다음 미리보기 플래그 ( %w)가 없습니다. 또한 창의 18 * 2너비 가 문자 보다 작 으면 오른쪽 부분이 상태 표시 줄의 절반 이상을 차지합니다.
따라서 최소한 생략 %<하고 추가 할 수 있습니다 %w.
:set statusline=%f\ %h%w%m%r%=%-14.(%l,%c%V%)\ %P
더 나아가서 오른쪽 부분이 상태 표시 줄의 절반 이상을 차지하지 않도록 할 수 있습니다.
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
그런 다음 vim로 컴파일 된 기능 에 따라 만들 수 있습니다 .
if has("quickfix")
...
endif
그러나 나는 그것이 실용적이지 않다고 말하고 이전의 해결책은 대부분의 의도와 목적에 충분할 것입니다. 그러나 마지막 해결책이 효과가 없다면, 무엇이 잘못되었는지 말해 주시면 더 나은 해결책을 찾도록하겠습니다.
Laurence Gonsalves이 제안한 솔루션의 문제점은 플래그가 없으면 왼쪽과 오른쪽 부분 사이에 두 개의 공백이 있다는 것입니다.
:set statusline=%f\ %h%w%m%r\ %=%(%l,%c%V\ %=\ %P%)