Làm cách nào để Vim thực hiện hoàn thành tab bình thường (giống Bash) cho tên tệp?


289

Khi tôi mở một tệp mới trong Vim và tôi sử dụng hoàn thành tab, nó sẽ hoàn thành toàn bộ tên tệp thay vì thực hiện khớp một phần như Bash. Có một tùy chọn để làm cho việc hoàn thành tab tên tệp này hoạt động giống như Bash không?


10
Về mặt kỹ thuật, tôi khá chắc chắn "bash" không thực hiện bất kỳ hoàn thành tab nào. Đó là đường dẫn mà làm điều đó.
Maxy-B

2
Chúng ta đang nói về việc tùy chỉnh hành vi của tính năng ^ X ^ F?
BrunoJCM

Câu trả lời:


413

Cá nhân tôi sử dụng

set wildmode=longest,list,full
set wildmenu

Khi bạn gõ tab đầu tiên, nó sẽ hoàn thành càng nhiều càng tốt. Lượt truy cập tab thứ hai sẽ cung cấp một danh sách. Các tab thứ ba và tiếp theo sẽ chuyển qua các tùy chọn hoàn thành để bạn có thể hoàn thành tệp mà không cần thêm khóa.

Bash-like sẽ chỉ là

set wildmode=longest,list 

nhưng đầy đủ là rất tiện dụng.


1
Tôi muốn đây là hành vi mặc định trong vim. Tôi mặc dù không có xung quanh để hoàn thành tab đầy đủ cho đến khi tôi thấy bài đăng này.
Neha Karanjkar

6
@NehaKaranjkar Tôi khuyên bạn nên duy trì kho lưu trữ dotfiles để dễ dàng triển khai trong môi trường mới
michael

2
Có cách nào để bắt đầu đầy đủ chỉ khi có ít kết quả không? một cái gì đó giống như set wildmode=longest,5full,list. Với nhiều kết quả đầy đủ là vô ích nhưng rất tiện dụng với số ít. Sẽ thật hoàn hảo với một cái gì đó như "chỉ hiển thị đầy đủ nếu hoàn thành phù hợp trên một màn hình dòng"
albfan

1
Điều này đã từng hoạt động trong quá khứ (gVim / ubfox) nhưng bây giờ thì không (macvim8.x / macOS). Xem ví dụ . Có ý kiến ​​gì không?
Paschalis

1
Sau khi chịu đựng hoàn thành tab gốc trong 2 tháng, tôi nghĩ phải có cách đơn giản hóa nó. Cảm ơn bạn.
ramwin

23

Hành vi gần nhất với sự hoàn thành của Bash phải là

set wildmode=longest:full,full

Với một vài ký tự được gõ, nhấn tab một lần sẽ cung cấp cho tất cả các trận đấu có sẵn wildmenu. Điều này khác với câu trả lời của Michael mở ra một cửa sổ giống như quickfix bên dưới dòng lệnh.

Sau đó, bạn có thể tiếp tục nhập phần còn lại của các ký tự hoặc nhấn lại tab để tự động hoàn thành với kết quả khớp đầu tiên và khoanh tròn xung quanh nó.


Tôi nghĩ rằng tôi thích cách này.
Eddy Ekofo

8

Nếu bạn không muốn đặt wildmenu, bạn luôn có thể nhấn Ctrl+ Lkhi bạn muốn mở tệp. Ctrl+ Lsẽ hoàn thành tên tệp như hoàn thành Bash.


Ctrl-L không hoạt động như bash autocomplete. Nó không quay vòng qua tất cả các tùy chọn có thể.
mưa

2
Bash của tôi không hành động như vậy. <Tab>hoàn thành chuỗi hiện tại càng xa càng tốt (như CTRL-Ltrong Vim) và <Tab><Tab>hiển thị danh sách các kết quả khớp có thể (như CTRL-Dtrong Vim).
chiếu

8

Ngoài wildmode / wildmenu được đề xuất, Vim cũng cung cấp tùy chọn hiển thị tất cả các hoàn thành có thể bằng cách sử dụng Ctrl+ D. Điều này có thể hữu ích cho một số người dùng vấp phải câu hỏi này khi tìm kiếm các tùy chọn tự động hoàn thành khác nhau trong Vim như tôi đã làm.


4

Tôi giả sử rằng bạn đang sử dụng tự động hoàn tất trong Vim qua Ctrl+ Nđể tìm kiếm thông qua bộ đệm hiện tại. Khi bạn sử dụng lệnh này, bạn sẽ nhận được một danh sách các giải pháp; chỉ cần lặp lại lệnh để đi đến mục tiếp theo trong danh sách. Điều này cũng đúng với tất cả các lệnh tự động hoàn thành. Trong khi họ điền vào toàn bộ từ, bạn có thể tiếp tục di chuyển qua danh sách cho đến khi bạn đến nơi bạn muốn sử dụng.

Đây có thể là một lệnh hữu ích hơn: Ctrl+ P. Sự khác biệt duy nhất là Ctrl+ Ptìm kiếm ngược trong bộ đệm trong khi Ctrl+ Ntìm kiếm chuyển tiếp ... Thực tế, cả hai sẽ cung cấp một danh sách với các phần tử giống nhau và chúng có thể chỉ xuất hiện theo một thứ tự khác.


0

Hãy thử sử dụng :set wildmenu . Ngoài ra, tôi không chắc chính xác những gì bạn đang cố gắng.

Ồ, vâng, và có thể thử liên kết này: liên kết

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.