Чи можна сказати, чи вікно внизу чи вгорі, ліворуч чи праворуч?


13

Я не знаю, чи є якась функція для перевірки положення вікна, я маю на увазі, чи зараз він сидить внизу або вгорі, зліва або справа ??

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

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

Що ти намагаєшся зробити? (Проблема XY)
mMontu

Я намагаюся написати функцію, щоб повернути вікно розбивається на вертикальне, якщо поточне розташування - горизонтальне, і навпаки, коли всього два вікна. Тож мені потрібно знати, який поточний макет розбиття і де моє поточне вікно
Аарон Шен

3
Чому б просто не використовувати ctrl-W_L? (або ctrl-W_R)
Вітор

Я хочу, щоб це була зручна функція перемикання, вона автоматично визначить поточний макет і зробить для мене правильне обертання, замість того, що мені потрібно продумати це в моєму мозку та вибрати правильну команду для використання. Все, що мені потрібно зробити, це завжди потрапляти на одне і те ж відображення ключів.
Аарон Шен

Відповіді:


4

Підводячи підсумки коментарів до питання:

- Я намагаюся записати функцію, щоб повернути вікно розбивається на вертикальне, якщо поточне розташування - горизонтальне, і навпаки, коли всього два вікна.

- Чому б просто не використовувати ctrl-W_L? (або ctrl-W_R)

- Я хочу, щоб це була зручна функція перемикання, вона автоматично визначить поточну компоновку і зробить для мене правильне обертання, замість того, що мені потрібно продумати це в моєму мозку та вибрати правильну команду для використання. Все, що мені потрібно зробити, це завжди потрапляти на одне і те ж відображення ключів.

Для макетів, що містять лише два вікна, повинна працювати наступна функція:

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, але дякую, він працює чудово !! btw, я додаю лише один додатковий чек, він працює лише тоді, коли у вас є лише два вікна.
Аарон Шен

6

На жаль, я не думаю, що це можливо перевірити, на жаль.

Можливо, є спосіб зробити власну функцію, яка перевіряє це: Номери вікон завжди нумеруються від 1 вліво вліво до n внизу праворуч. Можливо, можна використати це в поєднанні з даними геометрії winwidth(), winheight()значеннями &linesта &columnsдля створення потрібної карти?

Зауважте, щоб бути загальним, це повинно підтримувати більш складні схеми. Яким повинен бути вихід, якщо, наприклад, ліва частина розділена на дві частини? Можливо, це причина, чому функція не існує в першу чергу ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.