Làm cách nào để chỉnh sửa bộ đệm hiện có trong tab mới trong vim?


51

Giả sử tôi đã bắt đầu vim như thế này:

vim foo bar

Bây giờ tôi quyết định rằng tôi muốn mỗi tệp đó trong tab riêng của mình. Có cách nào để làm điều đó mà không cần thoát vim và thêm -ptùy chọn vào dòng lệnh của tôi không?


Nhiều bạn có lẽ đang tìm kiếm tabe %được đề cập trong câu trả lời của liuyang1 dưới đây.
Mateusz Piotrowski

1
@MateuszPiotrowski Giống như tôi đã đề cập trong bình luận này cho câu trả lời đó , :tabe %không hoạt động với các bộ đệm không có filepath hợp lệ. :tab sblàm việc mọi lúc.
JoL

Câu trả lời:


30

Khi bạn bắt đầu vim như thế, bạn không nhận được ứng dụng khách vim, trình soạn thảo văn bản đang sử dụng dấu nhắc terminal hoặc cmd - hai tệp nằm trong hai bộ đệm khác nhau. Sử dụng :lsđể liệt kê các bộ đệm:

:ls
  1 %a   "foo"                 line 6
  2      "bar"             line 0

% A là bộ đệm hoạt động. Bạn có thể sử dụng :b2để chuyển sang bộ đệm 2 hoặc sử dụng :bnđể chuyển sang bộ tiếp theo hoặc :bptrước đó. Tôi thích (CTRL-W v) để phân chia các cửa sổ theo chiều dọc, hơn là (CTRL-W), phân chia theo chiều ngang.

Nếu bạn có 2 tệp được tải và chưa có tab (chưa), bạn có thể :tabnewvà trong loại tab mới:b2

Nếu bạn muốn luôn có bộ đệm được tải vào các tab riêng, hãy xem bài viết này .


Có, nhưng tôi muốn có các tab.
innaM

Vì vậy, bạn đã bắt đầu vim theo cách mà bạn có các tệp của mình trong máy khách vim, không phải trong vỏ cmd / terminal?
DaveParillo

1
Tôi không chắc ý của bạn là gì. Tôi sử dụng shell để bắt đầu vim như mô tả ở trên và sau đó tôi có một vim đang chạy.
innaM

Ah! Tôi đoán tôi không bao giờ thực sự hiểu rằng bộ đệm không cục bộ với các tab. Tôi luôn nghĩ (không cần suy nghĩ nhiều) rằng mỗi tab có danh sách bộ đệm riêng.
innaM

Trên máy của tôi, vimsẽ khởi chạy một trình soạn thảo trong trình bao. Để có được giao diện người dùng đồ họa vim tôi phải sử dụng gvim. Và bạn đã đúng - bộ đệm là toàn cầu cho ứng dụng vim.
DaveParillo

47

Bạn muốn mở một bộ đệm trong một tab mới?

Chia nhỏ màn hình (Ctrl-W), chiếm một cửa sổ và Ctrl-W T


Hừm. Không hoàn toàn những gì tôi có trong đầu, nhưng không tệ cho một khởi đầu. Tôi chưa biết về Ctrl-w Tnó. Tất nhiên, tab đầu tiên vẫn sẽ có hai bộ đệm theo cách đó.
innaM

Không. Sau khi bạn chia màn hình thành hai cửa sổ và mở một trong số chúng trong một tab mới, nó sẽ biến mất khỏi tab đầu tiên. Nó sẽ không còn (ít nhất là nó không có trên gvim72 của tôi). Theo như bộ đệm, chúng không được kết nối với windows / tab ... chúng giống như bộ nhớ trong đó vim lưu trữ nội dung tệp.
Rook

Ah! Bạn đúng. Tôi đã hiểu sai đầu ra của :ls.
innaM

Ngoài ra, ctrl-w V chia cửa sổ theo chiều dọc.
Shannon Nelson

1
CTRL-w v là lệnh chính xác để chia các cửa sổ theo chiều dọc
JRM

27

Bạn có thể thực hiện điều này bằng cách kết hợp tablệnh với sb[uffer]lệnh.

Trước tiên, bạn sẽ cần biết id bộ đệm của bộ đệm bạn muốn mở trong một tab mới. Bạn có thể tìm thấy điều này với lslệnh:

:ls
  1 %a   "foo"                          line 1
  2      "bar"                          line 0

Khi bạn có id, bạn có thể dễ dàng mở nó trong một tab mới bằng cách sử dụng:

:tab sb 2

Các sblệnh thường mở đệm được đưa ra trong một cửa sổ chia mới, nhưng tablệnh gây ra nó để mở trong một tab mới, thay thế.

Các tablệnh cũng cho phép bạn chỉ định nơi trong danh sách tab tab mới nên được tạo ra. Ví dụ: :0tab sb 2sẽ dẫn đến tab 'thanh' mới xuất hiện ở đầu danh sách thay vì sau tab hiện tại.


2
Bạn không cần số bộ đệm, cung cấp cho nó một phần rõ ràng của tên bộ đệm và VIM làm phần còn lại cho bạn.
tráng miệng

1
Đây là câu trả lời tôi đang tìm kiếm và cần thiết. Tôi đã mất tinh thần khi :tab buffer part-of-namekhông mở một tab mới! Nhưng :tab sb part-of-namelàm việc như một lá bùa. Cảm ơn bạn!!!!
Sukima

Đây không phải là câu hỏi chính xác của OP, nhưng chính xác là những gì tôi đang tìm kiếm :)
jackcogdill

25

Một cách tốt hơn để thực hiện những gì OP yêu cầu là:

:bufdo tab split

Điều này sẽ mở mỗi bộ đệm vào một tab của riêng nó, bất kể có bao nhiêu. Nếu bạn sử dụng nhiều như vậy, thật dễ dàng để tạo thành một ánh xạ trong .vimrc của bạn. Kết hợp với một cái gì đó như plugin vim nhỏ này, phần sau đây sẽ mở mọi mục từ :grep(hoặc : Ack ) trong một tab của riêng nó:

:grep foo
:QuickFixOpenAll
:bufdo tab split

Tất nhiên, khi sử dụng một plugin, có thể dễ dàng sửa đổi nó để mở nội dung danh sách quickfix trực tiếp vào các tab.

CẬP NHẬT : Tôi thực sự đã phải hét to với bình luận của ggustafsson bên dưới. Đó là câu trả lời hay nhất trong số rất nhiều và minh họa rất hay về xu hướng của Vim đối với hành vi sáng tác. Gợi ý là:

 :tab sball

Thật đáng để tìm kiếm trợ giúp Vim cho : tab: sball để xem những gì đang diễn ra ở đây.


Một cách tiếp cận tương tự từ một chỉnh sửa trước đó, cho hậu thế, là :bufdo execute "tabnew %". Tôi nghĩ rằng cách tiếp cận mới là một chút rõ ràng hơn.
John Whitley

Một cảnh báo: nếu bộ đệm bắt đầu trong vim không trống, điều này dường như mở bộ đệm cuối cùng hai lần. Tôi sẽ đăng một bản cập nhật nếu tôi tìm thấy một sửa chữa đơn giản.
John Whitley

12
:tab sballdường như làm việc tốt hơn
ggustafsson

6

1. Mở hai tệp trong Vim.

$ vim foo thanh

2. Kiểm tra số lượng bộ đệm.

: ls
  1% một "foo"
  2 "thanh"

3. Chuỗi hai lệnh: tabnewđể mở một tab mới và b <buffer_number>để tải bộ đệm mong muốn trong tab.

: tabnew | b 2

8
Vấn đề với bước 3 là trước tiên nó tạo ra một tab mới với bộ đệm trống, sau đó mở bộ đệm 2, dẫn đến một bộ đệm không có tiêu đề bổ sung trong danh sách bộ đệm. Sử dụng tốt hơn:tab sb 2
rkjnsn

1
@rkjnsn bạn nên đăng nó dưới dạng câu trả lời - nó trả lời tốt nhất câu hỏi 'làm cách nào để chỉnh sửa bộ đệm hiện có trong tab mới trong vim?'
JonnyRaa

1
@JonnyLeed đã xong.
rkjnsn

4

Chỉ cần thêm một số điểm mà những người khác đã không đề cập.

  • cửa sổ hiện tại sang tab mới

Nếu có nhiều cửa sổ, <C-W>Tsẽ chuyển cửa sổ này sang tab mới. Tuy nhiên, lối tắt này chỉ dành cho "Cửa sổ", không phải "bộ đệm". Nếu thích kiểu này :sphoặc <C-W>ssao chép bộ đệm hiện tại sang một cửa sổ nữa, sau đó <C-W>Tchuyển nó sang tab mới.

4 tổ hợp phím hoặc 7 tổ hợp phím.

  • bộ đệm hiện tại sang tab mới

:tabe % để mở tab mới cho bộ đệm hiện tại.

7 tổ hợp phím.

  • đệm vào tab mới

Nếu sử dụng plugin CtrlP, cũng có thể sử dụng "CtrlPBuffer", sau đó bằng <C-t>phím tắt để mở nó bằng trang tab mới. Phong cách này, dễ dàng để chuyển sang bộ đệm khác nhau.

Với phím tắt "CtrlPBuffer", 4 lần nhấn phím trở lên.


:tabe %là những gì tôi đã tìm kiếm trong một thời gian dài, cảm ơn!
pevik

Không, :tabe %không thực sự mở một tab mới cho bộ đệm hiện tại. Điều gì xảy ra là %được mở rộng tới filepath của bộ đệm hiện tại và :tabemở đường dẫn đó. Vim sẽ thấy bạn đang cố mở một tệp bạn đã mở và sẽ sử dụng lại bộ đệm bạn có. Điều này có nghĩa là điều này không hoạt động với các bộ đệm không có filepath. Nếu bạn mở một tệp mới :newvà bạn chưa lưu nó, bạn không thể đặt nó trên một tab mới với điều này. Lệnh thực sự bạn cần là những gì rkjnsn đưa vào câu trả lời của họ: :tab sb %hoặc ngắn hơn::tab sb
JoL
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.