Làm cách nào để có được chiều cao và chiều rộng thực tế của Vim?


18

winheight()winwidth()trả về số lượng cột / dòng trong cửa sổ hiện tại. Những gì tôi đang tìm kiếm là một cái gì đó gần hơn với chiều cao và chiều rộng thực tế của khu vực chỉnh sửa hoặc khu vực được hiển thị nếu chạy trong một thiết bị đầu cuối. Vấn đề với winheight()winwidth()là tỷ lệ khung hình được tính từ các giá trị này không phù hợp với tỷ lệ khung hình thực tế.

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

Ảnh chụp màn hình của vùng đệm có kích thước 936x918 pixel, cho tỷ lệ khung hình hiển thị là 1.019608. Tôi nghĩ rằng tôi có thể nhận được giá trị thực tế bằng cách sử dụng kích thước của phông chữ, nhưng làm thế nào?

Đây là phần tiếp theo Làm thế nào tôi có thể giúp Vim mở trợ giúp trong phân chia theo chiều dọc? . Tôi đang cố gắng thích nghi với giải pháp của Nobe4 .


3
Tôi không nghĩ bạn có thể lấy kích thước bằng pixel với các hàm Vim đơn giản. Đối với việc mở trợ giúp trong phân chia theo chiều dọc, tôi không bận tâm với các tính toán tỷ lệ khung hình, tôi chỉ phân chia theo chiều dọc nếu cửa sổ đầu cuối đủ rộng : cnoreabbrev h <C-r>=(&columns >= 160 && getcmdtype() ==# ':' && getcmdpos() == 1 ? 'vertical botright help' : 'h')<CR>.
Sato Katsura

1
Do đó, @SatoKatsura tuân theo truyền thống được thiết lập bởi hầu hết các nhà phát triển web, những người sử dụng chiều rộng tài liệu để xác định xem đó có phải là điện thoại di động hay không. :(
muru

1
Không hẳn vậy, vì tôi chỉ gây ra điều đó cho bản thân mình. Tôi đã chơi với tỷ lệ khung hình trong một thời gian và tôi thấy kết quả là không đạt yêu cầu. Sau đó, tôi nhớ rằng tôi có chính xác hai phím tắt để mở thiết bị đầu cuối, cho kích thước "bình thường" và cho thiết bị đầu cuối "rộng". Vì vậy, thiết bị đầu cuối của tôi hầu như luôn luôn có cùng kích thước. YMMV tất nhiên.
Sato Katsura

@SatoKatsura lệnh đó là một số ma thuật đen tối nghiêm trọng. Tôi rất ngạc nhiên rằng ngoài việc không biết về ==#toán tử :hgiúp làm sáng tỏ tôi thực sự hiểu toàn bộ mệnh lệnh kỳ dị. Điều đó làm cho tôi một chuyên gia Vim? Phải là một cái gì đó như thế. Cần phải ra ngoài nhiều hơn.
Steven Lu

Câu trả lời:


1

104 cột / 51 dòng = 2.04

Tính toán của bạn bị sai lệch vì tỷ lệ khung hình của mỗi ô là dọc.

Ví dụ: trên Terminal.app, với phông chữ 23pt và khoảng cách ký tự mặc định, mỗi ô của thiết bị đầu cuối có chiều rộng 7px và chiều cao 15px với tổng số 728x765px :

(104 * 7) / (51 * 15) = 728/765 = 0,95


Bạn không thể truy xuất kích thước phông chữ từ bên trong Vim mà không gọi các lệnh bên ngoài hoặc cách giao tiếp với thiết bị đầu cuối, điều này có thể trở nên khá nặng nề. Rõ ràng, điều này là khác nhau trong Gvim nhờ 'guifont'.

Nếu bạn quản lý để làm điều đó, bạn vẫn cần một cách để khấu trừ kích thước của một ô có thể thay đổi tùy thuộc vào chương trình thiết bị đầu cuối nếu không có tiêu chuẩn . Tôi chỉ kiểm tra iTerm 2 mà may mắn có kết quả tương tự.


Vì vậy, tôi sẽ chọn một giải pháp tĩnh. Tôi đã ghép kiểm tra chiều rộng tối thiểu cho đoạn trích này mà bạn có thể đặt vào 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>)

Nếu cửa sổ đủ lớn để giữ 80 cột của bộ đệm hiện tại, một phần trợ giúp hẹp được mở ở bên phải, nếu không thì phần tách được mở bên dưới. Bạn có thể tùy chỉnh hướng phân chia với :vertical.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.