vim 상태 줄을 업데이트하는 방법을 읽었습니다.여기. 그리고 성공적으로 업데이트할 수 있습니다.
그러나 기본 vim 상태 줄의 형식을 유지하고 파일 크기, 파일 유형 등과 같은 정보를 더 추가하고 싶습니다.
Vim의 기본 상태 표시줄은 다음과 같습니다:
<file-name> line_num,col_num %file
다음 작업을 어떻게 수행할 수 있나요?
- 파일명 뒤에 정보를 추가하고 싶어요
- 상태 표시줄의 현재 형식을 표시합니다(
:set statusline
아무 것도 표시하지 않음).
나는 시도했다:
set statusline+=%y
하지만 이는 전체 상태 표시줄을 덮어쓰고 파일 유형( %y
)만 표시합니다.
어떤 팁이 있나요?
답변1
@muru가 말했듯이 이것은 불가능해 보입니다.정확히statusline
설정에서 지정할 수 없는 작업을 수행하는 렌더링 코드로 설정된 경우 기본 상태 표시줄을 시뮬레이션합니다 statusline
. 그러나 매우 가까이 다가가는 것은 가능합니다. ruler
활성화된 경우 기본 상태 표시줄의 합리적인 근사치 는 다음과 같습니다 .
:set statusline=%<%f\ %h%w%m%r%=%-14.(%l,%c%V%)\ %P
주요 차이점은 행 및 열 번호의 위치입니다. 이는 [-]
수정 불가능한 버퍼에도 나타납니다 . 기본 간격 논리를 에뮬레이트하는 것이 가능하다면 이를 수행할 방법을 찾지 못했습니다. 아마도 이것은 귀하의 목적에 충분히 가깝습니다.
:help statusline
이 버전에는 미리보기 플래그가 없지만 이는 시도된 시뮬레이션의 기본 상태 표시줄과 매우 유사합니다 .
나는 그것의 분할 버전을 직접 사용하여 .vimrc
눈금자가 있는 일반적인 vim 상태 줄처럼 보이는 것의 중간에 Syntastic 상태 줄 정보를 배치했습니다.
" 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%)
답변2
너무 길어요.
: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
자르기왼쪽부터 시작해서 <
처음에 추가하세요.
공간이 있다면키맵, 이를 추가합니다마지막에(오른쪽 정렬).
자, 통치자. 그것은 포함한다<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
따라서 %<
기본적으로 버퍼 이름의 시작 부분이 잘리므로 first는 생략할 수 있습니다. 그런 다음 미리보기 플래그( )가 누락되었습니다 %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%)
답변3
코드는 빈 상태 문자열에 어떤 값도 설정하지 않으며 단지 일부 기본값으로 작동합니다. 바라보다src/screen.c
, 기능win_redr_status()
. 표시된 항목은 컴파일된 함수를 기반으로 하므로 정확한 상태 줄을 재구성하려면 컴파일된 함수를 살펴봐야 합니다. 다음에 제공된 예제 상태 줄을 사용하는 것이 더 간단할 수 있습니다.:h statusline
:
Examples:
Emulate standard status line with 'ruler' set
:set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P