Di chuyển cửa sổ hiện tại sang tab hiện có


13

Đôi khi tôi cần di chuyển các cửa sổ vào một tab đã có sẵn và tôi tự hỏi liệu có một phím tắt lệnh / bàn phím nào có thể làm điều này không. Tôi biết tôi có thể đóng cửa sổ, chuyển sang tab và sau đó mở nó trong một phân chia mới, nhưng tôi đã tự hỏi nếu có một cách ngắn hơn để thực hiện điều này. Lưu ý rằng tôi muốn di chuyển nó đến một tab hiện có , không phải là một tab mới như thế <C-w>T.


Không thể di chuyển các cửa sổ trên các tab.
lcd047

Hmm, điều đó thật tệ. Tôi có thể có thể tạo một số ánh xạ hoặc lệnh có thể thực hiện nó mặc dù.
EvergreenTree

Tôi nghĩ rằng điều tốt nhất bạn có thể làm là lưu tất cả các cài đặt cửa sổ và sau đó tạo lại nó trên tab hiện có.
tommcdo

Câu trả lời:


10

Mặc dù có các lệnh để di chuyển các cửa sổ hiện có xung quanh trong trang tab hiện tại (nghĩa là ảnh hưởng đến bố cục cửa sổ bằng cách xoay, thay đổi kích thước và di chuyển), không có lệnh nào để di chuyển cửa sổ sang tab khác.

Vì một cửa sổ chỉ là một khung nhìn vào một bộ đệm được tải, bạn phải:

  1. Lưu ý số bộ đệm được hiển thị trong cửa sổ hiện tại.
  2. :close! cửa sổ.
  3. Chuyển sang trang tab mục tiêu hiện có.
  4. :sbuffer số bộ đệm để mở lại nó.

Bạn sẽ mất bất kỳ tùy chọn cửa sổ cụ thể nào bởi điều này. Bạn cũng có thể lưu và khôi phục những thứ đó trong một tập lệnh.


Tôi đoán rằng đây là trường hợp. Tôi có thể có thể tạo ra một kịch bản nhỏ làm chính xác điều đó.
EvergreenTree

2
  1. đi đến tab mục tiêu hiện có
  2. chia nó theo cách bạn muốn
  3. :b ab(hoàn thành phần còn lại)

abchỉ là các chữ cái ngẫu nhiên, thay thế bằng phần đầu của tên tệp bạn muốn. :bhoàn thành tab đã thực hiện rất tốt đối với tôi, nó thường có thể tìm đúng bộ đệm nguồn chỉ dựa trên một chữ cái và 1-2Tab phím nhấn.

Lợi ích của phương pháp này so với Ingo là không chú ý hay ghi nhớ bất cứ điều gì, có nghĩa là tải ít nhận thức hơn. Tên tập tin bạn đã biết anyway.


2

Hai lệnh được xác định bên dưới sẽ di chuyển tất cả các bộ đệm từ tab bên phải sang tab hiện tại và sau đó đóng tab bên phải. Mtabspdi chuyển chúng bằng cách chia theo chiều ngang và Mtabvspchia theo chiều dọc. Bạn cần di chuyển tab đã hợp nhất trước khi sử dụng các lệnh. Sử dụng +tabm, -tabmhoặc<n>tabm .

Thiết lập

Thêm tập lệnh vim dưới đây vào 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)

Chi tiết kỹ thuật

Hàm Mtab nhận một tham số vert . Nó xác định nếu tab hiện tại được chia theo chiều ngang hoặc chiều dọc.

Kết quả mong muốn đạt được với các bước sau:

  1. Chúng tôi tạm thời chuyển sang tab tiếp theo
  2. Sử dụng hai biến để tham chiếu số tab và bộ đệm của nó
  3. Quay trở lại tab hiện tại
  4. Chúng tôi chia tab và mở từng bộ đệm
  5. Cuối cùng, chúng tôi đóng tab bên tay phải

Nếu tab hiện tại của chúng tôi là cuối cùng, các lệnh sẽ bị bỏ qua.


1

Nếu đó là bộ đệm tệp (sẽ không hoạt động đối với bộ đệm đầu, v.v.), bạn có thể:

  1. :let @f=@%ENTER - trong cửa sổ nguồn;
    • Điều này thay thế nội dung của thanh ghi thông thường f bằng nội dung của thanh ghi đặc biệt % , chứa tên tệp hiện tại.
    • Lưu ý: Tôi đã chọn đăng ký f như trong tệp , nhưng bạn có thể sử dụng bất kỳ đăng ký nào khác mà bạn thích.
    • Bạn có thể xác minh rằng thanh ghi chứa đường dẫn chính xác với: :echo @f
  2. Tùy chọn: Ctrl-WCtrl-Q- để đóng cửa sổ cũ;
  3. gt/ gT- điều hướng đến tab mục tiêu (và cửa sổ);
  4. Ctrl-Ws - chia tab theo bất kỳ cách nào bạn thích, để mở một cửa sổ mới;
  5. :e␣Ctrl-RfENTER
    • trong cửa sổ mới mở, tải một tệp từ đường dẫn được lưu trong thanh ghi f ;
    • Lưu ý: ký tự here ở đây đánh dấu một khoảng trắng thông thường.

Lưu ý quan trọng: bước cuối cùng sẽ không hoạt động chính xác nếu đường dẫn chứa khoảng trắng hoặc một số ký tự đặc biệt! :-( Như một cách giải quyết, lệnh sau, lệnh dài hơn một chút sẽ hoạt động đối với các đường dẫn có khoảng trắng (mặc dù nó vẫn có thể thất bại đối với một số ký tự đặc biệt khác):

  • :e␣"Ctrl-Rf"ENTER

(nghĩa là trích dẫn kết quả của Ctrl-R, f )

Lấy cảm hứng từ câu trả lời từ lkraavingo-karkat .


Điều này thật tuyệt vời, tôi cần thiết lập một ánh xạ để "cắt và dán" Windows vào Tab.
dragon788
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.