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は、ドキュメント幅を使用してモバイルかどうかを判断するほとんどのWeb開発者が設定した伝統に従っています。:(
muru

1
そうではない、私は自分にそれを与えているだけだから。私はしばらくの間アスペクト比を試しましたが、結果が満足のいくものではないことがわかりました。その後、ターミナルを開くためのショートカットとして、「通常の」サイズ用と「ワイド」なターミナル用のショートカットが正確に2つあることを思い出しました。したがって、私の端末はほとんど常に同じサイズです。もちろんYMMV。
佐藤桂

@SatoKatsuraそのコマンドは、いくつかの深刻なダークマジックです。==#オペレーターを知らなかったことを除け:hば、おかしなコマンド全体が実際に理解できたことに非常に驚きました。それは私をVimの専門家にしますか?そのようなものにする必要があります。もっと出て行く必要があります。
スティーブンルー

回答:


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.