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


14

Іноді мені потрібно перемістити вікна на вже існуючу вкладку, і мені було цікаво, чи є ярлик команди / клавіатури, який міг би це зробити. Я знаю, що можу закрити вікно, перейти на вкладку, а потім відкрити його в новому розділі, але мені було цікаво, чи існує коротший спосіб цього досягти. Зауважте, що я хочу перемістити його на існуючу вкладку, а не на нову вкладку, як <C-w>Tце робиться.


Не можна переміщувати вікна через вкладки.
lcd047

Хм, це дуже погано. Можливо, я міг би створити якесь відображення чи команду, яка могла б виконати це.
EvergreenTree

Я думаю, що найкраще, що ви можете зробити, це зберегти всі налаштування вікна, а потім відтворити їх на існуючій вкладці.
tommcdo

Відповіді:


10

Хоча є команди для переміщення існуючих вікон на поточній сторінці вкладки (тобто впливають на макет вікна шляхом обертання, зміни розміру та переміщення), немає команд для переміщення вікна на іншу вкладку.

Оскільки вікно - це лише вікно перегляду завантаженого буфера, ви повинні:

  1. Зверніть увагу на номер буфера, відображений у поточному вікні.
  2. :close! вікно.
  3. Перехід на існуючу цільову сторінку вкладки.
  4. :sbuffer номер буфера для його повторного відкриття.

Ви втратите будь-які варіанти для цього вікна. Ви також можете зберегти та відновити їх у сценарії.


Я подумав, що це так. Можливо, я міг би створити невеликий сценарій, який робить саме це.
EvergreenTree

2
  1. перейти до наявної цільової вкладки
  2. розділіть його, як хочете
  3. :b ab(вкладка - заповніть решту)

abє лише випадковими літерами, замінюючи їх початком потрібного імені файлу. :bЗавершення вкладки для мене дуже добре працює, зазвичай він може знайти правильний буфер джерела на основі лише однієї літери та 1-2 Tabнатискань клавіш.

Перевага такого підходу над Інго полягає у відсутності зауваження або запам'ятовування чогось, що означає меншу пізнавальну навантаження. Ім'я файлу ви все одно знаєте.


2

Дві команди, визначені нижче, переміщують усі буфери з правої вкладки на поточну вкладку, а потім закривають вкладку правої руки. Mtabspпереміщує їх, розбиваючи по горизонталі і Mtabvspрозбиваючись вертикально. Потрібно перенести об'єднану вкладку перед використанням команд. Використовувати +tabm, -tabmабо <n>tabm.

Налаштування

Додайте нижче свій сценарій vim vimrc:

function! Mtab(vert)
    if tabpagenr() == tabpagenr("$")
        return 0
    endif
    +tabnext
    let s:killed_tab = tabpagenr()
    let s:buf_list = tabpagebuflist()
    -tabnext
    for item in s:buf_list
        if a:vert
            vsp
        else
            sp
        endif
        execute "buf " . item
    endfor
    execute "tabclose " . s:killed_tab
endfunction

command! Mtabsp call Mtab(0)
command! Mtabvsp call Mtab(1)

Технічні деталі

Функція Mtab отримує один параметр vert. Він визначає, чи розділена поточна вкладка по горизонталі чи вертикалі.

Бажаний результат досягається наступними кроками:

  1. Переходимо до наступної вкладки тимчасово
  2. Використовуйте дві змінні для позначення номера вкладки та буферів
  3. Поверніться до поточної вкладки
  4. Розбиваємо вкладку і відкриваємо кожен буфер
  5. Нарешті закриваємо вкладку правої руки

Якщо наша поточна вкладка остання, команди ігноруються.


1

Якщо це файловий буфер (не працює для буферів подряпин тощо), ви можете:

  1. :let @f=@%ENTER - у вікні джерела;
    • Це замінює вміст звичайного регістру f вмістом спеціального регістра % , який містить поточне ім'я файлу.
    • Примітка. Я вибрав регістр f як у файлі , але ви можете використовувати будь-який інший реєстр, який вам подобається.
    • Ви можете перевірити, чи реєстр містить правильний шлях за допомогою: :echo @f
  2. За бажанням: Ctrl-WCtrl-Q- закрити старе вікно;
  3. gt/ gT- перейти до цільової вкладки (та вікна);
  4. Ctrl-Ws - розділити вкладку будь-яким способом, щоб відкрити нове вікно;
  5. :e␣Ctrl-RfENTER
    • у щойно відкрите вікно завантажує файл із шляху, збереженого в регістрі f ;
    • Примітка: символ ␣ тут позначає звичайний пробіл.

Важлива примітка: завершальний крок не буде працювати правильно, якщо шлях містить пробіли або деякі спеціальні символи! :-( Як вирішення, наступна, трохи довша команда повинна працювати для шляхів з пробілами (хоча для деяких інших спеціальних символів вона все ще може не працювати):

  • :e␣"Ctrl-Rf"ENTER

(тобто цитуючи результат Ctrl-R, f )

Натхненний відповідями lkraav та ingo-karkat .


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