ウィンドウが下か上か、左か右かを判断することは可能ですか?


13

ウィンドウの位置をチェックする機能があるかどうかはわかりませんが、現在は下または上、左または右に座っていますか?

__________________________
|           |            |
|           |            |
|  left     |   right    |
|           |            |
|           |            |
|___________|____________|

__________________________
|                        |
|          top           |
|________________________|
|                        |
|         bottom         |
|_______________________ |

あなたは何をしようとしているのですか?(XY問題)
mMontu

現在のレイアウトが水平の場合はウィンドウ分割を垂直に回転させる関数を作成しようとしていますが、ウィンドウが2つしかない場合はその逆です。したがって、現在の分割レイアウトと現在のウィンドウの場所を知る必要があります
アーロンシェン

3
なぜ単純に使用しないのctrl-W_Lですか?(またはctrl-W_R
Vitor

便利なトグル機能にしたいのですが、現在のレイアウトを自動的に検出し、代わりに脳内でそれを考えて使用する正しいコマンドを選択する必要があるため、正しい回転を行います。私がする必要があるのは、常に同じキーマッピングをヒットすることです。
アーロンシェン

@AaronShen コマンドを復元するウィンドウをご覧ください。
ムル

回答:


4

質問のコメントをまとめる:

-ウィンドウが2つしかない場合、現在のレイアウトが水平の場合はウィンドウ分割を垂直に、またその逆の場合はウィンドウ分割を回転する関数を記述しようとしています。

-単にctrl-W_Lを使用しないのはなぜですか?(またはctrl-W_R)

-便利なトグル機能にしたいのですが、現在のレイアウトを自動的に検出し、代わりに脳内で考えて正しいコマンドを選択する必要がある代わりに正しい回転を行います。私がする必要があるのは、常に同じキーマッピングをヒットすることです。

2つのウィンドウのみを含むレイアウトの場合、次の機能が動作するはずです。

function! Rotate()
   " save the original position, jump to the first window
   let initial = winnr()
   exe 1 . "wincmd w"

   wincmd l
   if winnr() != 1
      " succeeded moving to the right window
      wincmd J " make it the bot window
   else
      " cannot move to the right, so we are at the top
      wincmd H " make it the left window
   endif

   " restore cursor to the initial window
   exe initial . "wincmd w"
endfunction

nnoremap <F3> :call Rotate()<CR>

すごい機能、すべてのvimスクリプトを知っているわけではありませんが、ありがとう、完璧に機能します!! ちなみに、ウィンドウが2つしかない場合にのみ機能するため、追加のチェックを1つ追加します。
アーロンシェン

6

残念ながら、これを確認する方法はないと思います。

これをチェックするカスタム関数を作成する方法があるかもしれません:ウィンドウ番号は常に左上に1から右下にnまで番号が付けられます。おそらく一つの形状データと組み合わせてこれを使用することができwinwidth()winheight()及びの値&lines&columns所望のマップを作成するために?

一般的であるためには、より複雑なレイアウトをサポートする必要があることに注意してください。たとえば、左側が2つに分割されている場合、出力はどうなりますか?おそらく、これが関数がそもそも存在しない理由です...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.