Làm cách nào để mở các tab mới theo mặc định?


10

Khi tôi mở vimbằng nhiều tệp ( vim f1 f2 ...), làm cách nào tôi có thể mở tệp trực tiếp trong tab mà không cần sử dụng -p?

Tôi đang tìm cách tách hành vi shell khỏi hành vi vim, xóa các vimbí danh dựa trên, v.v ... Đó là lý do tại sao tôi không muốn sử dụng bí danh, v.v. (vì thế, không -p).

Tôi khá chắc chắn rằng cái này đã được hỏi trên một vài trang SE (chẳng hạn như trên SO ). Tuy nhiên, tôi không có khả năng đánh giá đâu là cách tốt nhất để làm điều này, vì vậy tôi cũng hy vọng một lưu ý về lý do tại sao một phương pháp được đề xuất là tốt.

Đối với bài SO cụ thể được liên kết:

  • câu trả lời được chấp nhận không tabpagemax=9999. Gọi nó là thiên vị cá nhân, nhưng tôi thấy một giới hạn được đặt thành một số lượng lớn và tôi nghĩ có gì đó không đúng (theo cách tôi cảm thấy nếu tôi thấy chmod 777).

    :au VimEnter * set tabpagemax=9999|sil tab ball|set tabpagemax&vim
    
  • câu trả lời khác dẫn đến một tab trống thêm đang được mở, trong khi ngắn gọn hơn nhiều.

    :autocmd VimEnter * argdo tabedit
    

Tôi hy vọng câu trả lời không có tab phụ được mở và không đặt giới hạn cho giá trị lớn (hoặc giải thích tại sao đó không phải là điều xấu).



@OrangeTux Tôi đăng theo tinh thần câu trả lời của Gilles. Nhưng với downvote tôi tự hỏi Gilles sẽ nói gì với một bài đăng liên kết đến một bài đăng hiện có?
muru 4/2/2015

@Carpetsmoker Tôi không thấy cập nhật bình luận của bạn. Một trang trống không phải là một vấn đề lớn khi các phiên của bạn có xu hướng kết thúc :qabằng thói quen. Nếu đó là lợi thế duy nhất tôi đi với người khác, vì nó có vẻ đơn giản hơn.
muru 4/2/2015

3
@muru WWGS? Bạn có lý do để nghĩ rằng câu trả lời trên Stack Overflow không thỏa đáng không? Nếu vậy, giải thích rằng trong câu hỏi của bạn. Trong mọi trường hợp, tóm tắt các câu trả lời SO trong câu hỏi của bạn. Nếu điều đó dẫn đến câu hỏi chứa câu trả lời của chính nó, đừng đăng.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles Cập nhật. Tôi đã không đăng các lệnh thực tế, bạn có nghĩ rằng tôi nên?
muru 4/2/2015

Câu trả lời:


4

Sau một số thử nghiệm, tôi thấy đây là cách tốt nhất; nó nên hoạt động giống như vim -p:

au VimEnter * if !&diff | tab all | tabfirst | endif

Đầu tiên, tab allmở tất cả các mục trong danh sách đối số ( :args) trong một tab. Danh sách đối số là danh sách các tệp bạn đã chuyển cho Vim khi khởi động. Và tabfirstđảm bảo rằng tab đầu tiên được tập trung chứ không phải cuối cùng (đây là tùy chọn).

Chúng tôi không làm bất cứ điều này nếu &diffđược thiết lập; nếu có, chúng tôi đang sử dụng vimdiffhoặc vim -d, nơi chúng tôi muốn có 2 cửa sổ chứ không phải 2 tab.

Trong câu trả lời này, tôi cũng đã viết một chút về danh sách đối số và tab allcó thể được quan tâm.


Một số lưu ý về các giải pháp khác:

  • tab ballmở một tab cho mọi mục trong danh sách bộ đệm , không phải danh sách đối số. "Vấn đề" là danh sách bộ đệm có thể được lưu trong tệp viminfo khi thoát và được khôi phục khi khởi động (nếu %ở trong 'viminfo', không được bật theo mặc định). Vì vậy, nếu bạn chỉ cần gõ vimnó sẽ mở những tập tin. Tôi coi điều này là không mong muốn, mặc dù tôi có thể tưởng tượng một số người thấy nó hữu ích; Vì vậy, sử dụng những gì bạn thích.

  • set tabpagemax=9999không được yêu cầu; mặc định là 10, và điều này sẽ ổn Bạn có thể tăng số này trong vimrc nếu bạn muốn nhiều hơn, nhưng 9999là một con số ngớ ngẩn. Nếu bạn sử dụng -p, bạn cũng nhận được tabpagemaxcác tab. Vì vậy, điều này nên tôn trọng điều đó. Hãy nhớ rằng điều này sẽ mở (đọc) một bộ đệm khi khởi động, vì vậy nó khá chậm.

  • autocmd VimEnter * argdo tabeditchỉ là cùng một cách nói tab all. Tuy nhiên, bộ đệm ban đầu không bị xóa, vì vậy bạn còn lại với tab phụ đó ( tab allthay thế tất cả các tab). Để khắc phục điều này, bạn cần có cách giải quyết trong câu trả lời của Josh Petrie.


2

Tôi nghĩ rằng việc thêm một cái gì đó như thế này vào bạn .vimrccó thể giải quyết vấn đề của bạn (tuy nhiên, lưu ý rằng tôi không thực sự sử dụng cái này và chỉ thực hiện thử nghiệm tối thiểu, nó có thể làm những điều kỳ lạ trong một số trường hợp):

function! OpenArgumentsInTabs()
  ardo tabedit
  if tabpagenr("$") > 1
    tabclose
  endif
endfunction

autocmd VimEnter * call OpenArgumentsInTabs()

Như bạn đã lưu ý, argdo tabeditsẽ để lại cho bạn một tab phụ trống. Vì vậy, bạn có thể chỉ cần đóng tab đó tự động. Tuy nhiên, bạn không thể gọi tabclosekhông được kiểm tra, hoặc vim sẽ báo lỗi khi bạn khởi chạy nó mà không có đối số hoặc một tệp duy nhất (bạn "không thể đóng tab cuối cùng"). Thay vào đó, hãy kiểm tra xem tổng số tab có lớn hơn một không (đó là $nguyên nhân gây ra tabpagenrtrả lại) và chỉ sau đó bạn mới cần đóng tab cuối cùng.


Điều đó nói rằng, tôi cảm thấy đáng để chỉ ra rằng các tab của vim không giống như các tab của các biên tập viên khác và đó là điều cần lưu ý khi xem xét cách sử dụng các tab trong quy trình làm việc của bạn (nhưng bạn dường như nhận thức được điều này, nhưng tôi muốn đưa ra quan điểm vì lợi ích của những độc giả tương lai, những người có thể không muốn họ có thể tự đưa ra quyết định).

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.