Vim의 실제 높이와 너비는 어떻게 얻습니까?


18

winheight()그리고 winwidth()현재 윈도우에서 열 / 행의 수를 반환합니다. 내가 찾고있는 것은 편집 영역의 실제 높이와 너비 또는 터미널에서 실행되는 경우 표시된 영역에 더 가깝습니다. 의 문제 winheight()winwidth()이들 값으로부터 계산 된 종횡비는 실제 종횡비 터치가 부족하다.

:echo winwidth('%') winheight('%') winwidth('%') * 1.0 / winheight('%')
104 51 2.039216

버퍼 영역의 스크린 샷 크기는 936x918 픽셀이며 화면비는으로 표시됩니다 1.019608. 글꼴 크기를 사용하여 실제 값을 얻을 수 있다고 생각하지만 어떻게해야합니까?

이것은 수직 분할에서 Vim어떻게 도와 줄 수 있습니까?에 대한 후속 조치입니다 . . Nobe4의 솔루션 을 조정하려고합니다 .


3
일반 Vim 함수를 사용하여 치수를 픽셀 단위로 얻을 수 있다고 생각하지 않습니다. 수직 분할에서 도움말을 열 때 종횡비 계산에 신경 쓰지 않고 터미널 창이 충분히 넓 으면 수직으로 분할됩니다 cnoreabbrev h <C-r>=(&columns >= 160 && getcmdtype() ==# ':' && getcmdpos() == 1 ? 'vertical botright help' : 'h')<CR>.
사토 카츠라

1
따라서 @SatoKatsura는 문서 너비를 사용하여 모바일인지 결정하는 대부분의 웹 개발자가 설정 한 전통을 따릅니다. :(
muru

1
사실은 나 자신에게만 영향을 미치기 때문입니다. 나는 한동안 종횡비를 가지고 놀았고 결과가 만족스럽지 않다는 것을 알았습니다. 그런 다음 터미널을 여는 데 필요한 "일반"크기 및 "와이드"터미널에 대한 바로 가기가 두 개 있다는 것을 기억했습니다. 따라서 터미널의 크기는 거의 항상 같습니다. 물론 YMMV.
사토 카츠라

@SatoKatsura 그 명령은 심각한 다크 매직입니다. 정리 ==#하는 :h데 도움이 되는 운영자 에 대해 알지 못하는 것 외에도 실제로 전체 괴물 명령을 이해했습니다. 그것이 Vim 전문가가됩니까? 그런 식으로해야합니다. 더 나가야합니다.
Steven Lu

답변:


1

104 열 / 51 행 = 2.04

각 셀의 종횡비가 수직이므로 계산이 왜곡됩니다.

예를 들어, 23pt 글꼴 및 기본 문자 간격이있는 Terminal.app에서 각 터미널 셀의 너비는 7px, 높이는 15px이며 총 728x765px입니다 .

(104 * 7) / (51 * 15) = 728/765 = 0.95


외부 명령을 호출하거나 터미널과의 통신 방법을 호출하지 않으면 Vim에서 글꼴 크기를 검색 할 수 없습니다. 분명히 이것은 Gvim의 덕분에 다릅니다 'guifont'.

그렇게 할 경우 표준 이없는 경우 터미널 프로그램에 따라 달라질 수있는 셀 크기를 공제하는 방법이 필요합니다 . 운 좋게도 같은 결과를 얻는 iTerm 2 만 확인했습니다.


따라서 정적 솔루션을 선택합니다. 최소 너비 검사를이 코드 조각에 접목했습니다 plugin/help.vim.

function! Help(...)
  let l:topic = a:0 ? a:1 : ''
  if winwidth('%') >= 160 " Minimum width
    execute 'vertical botright help' l:topic
    execute 'vertical resize 78'
  else
    execute 'botright help' l:topic
  endif
endfunction

" Use :H to open a vertical or horizontal help split
command! -complete=help -nargs=? H call Help(<f-args>)

창이 현재 버퍼의 80 열을 유지하기에 충분히 큰 경우 좁은 도움말 분할이 오른쪽에 열리고 그렇지 않으면 분할이 아래에 열립니다. 로 분할 방향을 사용자 정의 할 수 있습니다 :vertical.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.