Như ZyX đã nói trên #vim, câu hỏi này nghe có vẻ như "Tại sao các chuyên gia của Vim thích ngon hơn ấm?" .
"Chuyên gia Vim" không thích bộ đệm hơn các tab: họ sử dụng bộ đệm làm proxy cho tệp và trang tab làm không gian làm việc. Bộ đệm và trang tab có các mục đích khác nhau, vì vậy việc ưu tiên cái này không có ý nghĩa gì.
Vấn đề với bộ đệm và tab là một trong những nhầm lẫn , gây ra bởi sự kết hợp của các sự kiện độc lập.
Hầu hết các trình soạn thảo văn bản và IDE "hiện đại" đều sử dụng phép ẩn dụ tab để thể hiện các tệp được tải. Ẩn dụ đó hoạt động như một hệ thống thông tin - nó cho người dùng thấy những tập tin nào được mở và trạng thái của chúng - và như một thiết bị tương tác - nó cho phép người dùng thao tác (sắp xếp lại, chọn, đóng, những tập tin đã mở. Mặc dù có nhiều hạn chế, các tab ở khắp mọi nơi và mọi người đã quen với chúng và mong đợi chúng ở mọi nơi.
Vim đã giới thiệu các trang tab trong 7.0 như một cách để người dùng của nó tạo ra "không gian làm việc" đặc biệt. Không có gì trong các tính năng của chúng, các tùy chọn cụ thể, các lệnh cụ thể hoặc các :help
phần của chúng cho thấy rằng các trang tab có thể hoặc nên được sử dụng làm proxy tệp.
Tất nhiên, không có gì ngoại trừ tên và sự xuất hiện của "trang tab", điều này dẫn đến nhiều nhầm lẫn.
Không có :set hidden
, được tắt theo mặc định và không dễ tìm, Vim làm cho không thể chuyển sang bộ đệm khác mà không ghi bộ đệm hiện tại hoặc từ bỏ các thay đổi của nó. Người dùng mới, không biết về tùy chọn đó, không có lựa chọn nào khác ngoài việc chuyển sang sử dụng các cửa sổ nặng hoặc sử dụng tính năng "giống như tab" gần nhất mà họ có thể tìm thấy: các trang tab.
"Trang tab" là một lựa chọn tên không may cho tính năng đó, đặc biệt là trong thời đại bị chi phối bởi ý tưởng rằng đọc tài liệu là một sự lãng phí thời gian.
Trong Vim, các trang tab là một sự trừu tượng được xây dựng trên đỉnh của các cửa sổ, bản thân nó là một sự trừu tượng được xây dựng trên các bộ đệm. Mỗi cấp độ mới thêm các tính năng hữu ích nhưng hạn chế quy trình làm việc của bạn.
"Cách đệm"
Với quy trình làm việc dựa trên bộ đệm, các tệp bạn đang làm việc được phân phối dọc theo một chiều. Bạn có thể chuyển qua bộ đệm của mình, bạn có thể truy cập vào bộ đệm cụ thể bằng cách nhập một phần tên của nó (đã hoàn thành) hoặc số của nó, bạn có thể xen kẽ giữa các bộ đệm, bạn có thể nhắm mục tiêu chúng khá dễ dàng. Về cơ bản không có ma sát.
Tám bộ đệm mở, chỉ có một cái nhìn thấy:
Chuyển đổi theo số:
Chuyển đổi theo tên:
Bộ đệm là proxy của tập tin Vim. Nếu bạn nghĩ về các tập tin, bạn nghĩ về bộ đệm.
"Cách cửa sổ"
Với quy trình làm việc dựa trên cửa sổ, các "tệp" của bạn đều được phân phối dọc theo cùng một chiều "ảo" giống như khi bạn chỉ sử dụng bộ đệm và dọc theo hai kích thước "vật lý" khác. Nhưng các không gian cartesian trong đó các kích thước đó được tìm thấy gần như tách biệt hoàn toàn: di chuyển sang bộ đệm khác vẫn có nghĩa là "di chuyển sang tệp khác" nhưng di chuyển sang cửa sổ khác thì không. Bộ đệm tương ứng với tệp mong muốn có thể được hiển thị trong cửa sổ đó nhưng nó cũng có thể được hiển thị trong một tệp khác, có thể trong trang tab khác hoặc hoàn toàn không.
Với các cửa sổ, việc điều hướng giữa các tệp đang mở trở nên quá phức tạp hoặc quá đơn giản, ngay cả với 'switchbuf'
và :sb
. Chủ yếu là vì bạn buộc phải sử dụng hai bộ lệnh cho những gì về cơ bản là giống nhau: truy cập bộ đệm.
Windows có công dụng của chúng, như được mô tả dưới đây, nhưng chúng không có những gì cần thiết để thay thế bộ đệm trong quy trình làm việc của bất kỳ ai.
Ở đây tôi đang làm việc trên một màu sắc Vim. Hai cửa sổ là các khung nhìn khác nhau của cùng một bộ đệm: cửa sổ trên cùng đóng vai trò tham chiếu, với một bảng mã màu được sử dụng trong bảng màu và cửa sổ dưới cùng là nơi tôi làm việc:
Windows không được thiết kế dưới dạng proxy và không thể tạo thành các tệp: chúng là "thùng chứa" hoặc "khung nhìn" được thiết kế để cung cấp cho bạn chế độ xem vào bộ đệm. Không nhiều không ít.
"Cách tab"
Với quy trình làm việc dựa trên tab, về cơ bản, bạn cố gắng bắt chước trải nghiệm người dùng mà bạn đã quen với trình chỉnh sửa trước đó trong khi hoàn toàn bỏ qua bản chất của các trang tab của Vim. Nếu chúng ta quên trong chốc lát rằng chiến lược này nói chung là rất không hiệu quả, nó cũng là bất khả thi, giống như với các cửa sổ, để buộc Vim để tuân thủ với "một file = một tab" mô hình mà không làm mất rất nhiều tính linh hoạt.
Vẫn làm việc với các tệp giống như trên, tabline chiếm một không gian đáng kể mà hầu như không có lợi ích. Tất cả các tệp của tôi và tất cả các tab của tôi đều được gọi javascript*.vim
vì vậy tôi không thể làm 3gt
được và tự tin rằng tôi sẽ kết thúc ở đúng nơi và không thể truy cập một tab cụ thể theo tên. Thêm vào đó, thực tế là nhãn của nó rất có thể rất hữu ích nhưng hoàn toàn hợp lý [Quickfix List]
. Vì không có cách nào thực tế để buộc tệp / bộ đệm vào trang tab, về cơ bản bạn chỉ còn một cách thực tế để điều hướng giữa các trang tab / bộ đệm / tập tin: đi xe đạp.
Và vâng, tabline của tôi bị ghi đè chỉ với 8 tab, hãy tưởng tượng nếu tôi có 20!
Tám bộ đệm mở trong tám trang tab (sai)
Hai tab cho hai nhiệm vụ cụ thể (phải)
Các trang tab là "vùng chứa" hoặc "khung nhìn" được thiết kế để chứa một hoặc nhiều cửa sổ, bản thân chúng cũng là "vùng chứa" được thiết kế để chứa bộ đệm.
Tóm lại là
"Chuyên gia Vim" (giả sử tôi có thể nói như thể tôi là một người) không thích bộ đệm hơn các tab: họ chỉ sử dụng Vim vì nó được thiết kế và hoàn toàn thoải mái với thiết kế đó:
"Chuyên gia Vim" có 2, 30 hoặc 97 bộ đệm được tải và rất vui khi họ không phải đối phó với phân phối không gian;
khi họ cần so sánh hai tệp hoặc làm việc trong một phần của bộ đệm hiện tại trong khi vẫn giữ một tệp khác làm tài liệu tham khảo, "chuyên gia Vim" sử dụng các cửa sổ vì đó là cách chúng được sử dụng;
khi họ cần làm việc một thời gian trên một phần riêng biệt của dự án mà không gây rối với chế độ xem hiện tại của họ, "chuyên gia Vim" tải một trang tab hoàn toàn mới.