Hoàn thành tab giống như Zsh của các đường dẫn một phần


11

Liên quan đến hoàn thành một phần tab giống như Bash cho tên tệp trong Vim

Một trong những tính năng thực sự tuyệt vời zshlà bạn có thể gõ, ví dụ ls /u/s/m/m/who.1, nhấn Tabvà hoàn thành nó ls /usr/share/man/man1/who.1.gz. Khi bạn đã quen với nó, thật khó chịu khi quay trở lại /u<tab>/s<tab>/m<tab>/m<tab>..., đặc biệt là khi toàn bộ đường dẫn một phần chỉ có thể giải quyết theo một đường dẫn thực tế, nhưng mỗi thành phần riêng lẻ có thể có nhiều lần hoàn thành. Điều này có thể đạt được trong Vim, ví dụ, khi sử dụng :ehoặc :cd?

Có các tính năng liên quan đến đường dẫn hữu ích khác trong zsh, chẳng hạn như sử dụng cd foo barđể di chuyển đến một đường dẫn tương đương được foothay thế bằng bar(nghĩa là /blah/foo/baz/yadatrở thành /blah/bar/baz/yada). Nếu có một giải pháp cũng mang lại những điều này (về cơ bản là bàn giao các nhiệm vụ liên quan đến vỏ cho một vỏ rất tốt), thì nó sẽ rất tuyệt.


1
Tôi không biết bất cứ điều gì đạt được chính xác những gì bạn yêu cầu, nhưng có nhiều công cụ tìm tệp mờ khác nhau cho phép bạn mở tệp theo cách tương tự. Tôi thích CtrlP, nhưng cũng có Command-T và tôi chắc chắn có những người khác tôi đang quên tên của nó.
Giàu

1
@Rich Miễn là tôi không phải nghiền Tab hàng chục lần, tôi sẽ rất vui.
muru

Câu trả lời:


6

Tôi đã từng sử dụng CtrlP và các plugin liên quan khác trước đó rất nhiều cho đến khi tôi thực sự khám phá ra sức mạnh bản địa của vim. Hãy để tôi giải thích một vài cách để làm điều này mà không cần một plugin bên ngoài:

  1. :e, điều tuyệt vời về: e là bạn có thể làm điều gì đó như thế :e /u*/s*/m*/m*/<Tab>và vim sẽ tự động mở rộng điều đó cho bạn :e /usr/share/man/man. Nó ngắn hơn và đơn giản hơn nhiều so với những gì bạn đã đăng, nhưng một cách thậm chí tốt hơn là làm :e /usr/**/man<Tab>theo cách đó nó sẽ trông đệ quy bên dưới /usrvà liệt kê ra tất cả các đường dẫn phù hợp, điều này có thể mất thời gian mặc dù tùy thuộc vào độ lớn của tập hợp, nhưng trong một dự án này hoạt động kỳ diệu bởi vì bạn có thể làm một cái gì đó như thế :e ap**/jav**/user<Tab>và nó sẽ hoàn thành tất cả các đường dẫn chưa hoàn thành và cung cấp cho bạn một danh sách các đường dẫn phù hợp và hoạt động siêu tuyệt vời.
  2. :b, Để mở bộ đệm hiện có. Điều này thực sự mạnh mẽ bởi vì nó chấp nhận partials theo mặc định, do đó bạn chỉ cần làm một cái gì đó như thế :b usr*man<Tab>và nó sẽ hoàn thành tên tệp nếu nó đã được tải trong danh sách bộ đệm. Điều này đặc biệt tốt bởi vì nó gần ngay lập tức và thực sự nhanh chóng. Ngoài ra, tôi sử dụng các phiên vim rất nhiều, với sự giúp đỡ của tpope / vim-obsessiondhruvasagar / vim-prosession , giữ tất cả các tệp tôi mở trong danh sách bộ đệm và chúng có sẵn ngay cả khi tôi tồn tại vim và quay lại từ đó thư mục dự án.

1
/u*/s*/m*/m*/<Tab>là cách tôi đã từng làm việc xung quanh bash. Nó không thay thế cho zsh một dặm. /usr/**/man<Tab>chậm kinh khủng khi bạn mở toàn bộ hệ thống tập tin, nhưng có thể hữu ích cho các dự án nhỏ. Trừ khi tôi hiểu nhầm :b, không phải là để mở tập tin mới.
muru

@muru bạn nói đúng, nó không thay thế cho zsh nhưng vẫn tốt hơn là bạn phải tự gõ toàn bộ, điều đó làm cho nó dễ dàng hơn, **thực sự rất chậm, nhưng hoạt động tốt cho các dự án thông thường. :bdành cho bộ đệm mở hiện có, đó là lý do tại sao sử dụng phiên giúp.
Dhruva Sagar

5

mục đích hoàn thành vim-zsh-path để thực hiện chính xác những gì bạn yêu cầu (ít nhất là phần đầu tiên), nhưng tôi chưa bao giờ thử nó. (Tôi thậm chí đã không nghe về nó cho đến khi romainl liên kết với câu trả lời SO của tác giả , mặc dù tài liệu của nó cũng đề cập đến một số hạn chế.

Ngoài ra, có nhiều công cụ tìm tệp mờ khác nhau để đạt được thứ gì đó tương tự để mở tệp.

Plugin ưa thích của tôi cho điều này là CtrlP . Khi được sử dụng để mở tệp, nó tìm kiếm bất kỳ tệp nào có đường dẫn đầy đủ chứa các ký tự mà bạn nhập theo đúng thứ tự mà bạn không phải nhập vào các phần của mọi thành phần của đường dẫn (và tất cả các dấu tách đường dẫn) như bạn có trong ví dụ của bạn, nhưng nó hoạt động hoàn toàn tốt nếu bạn làm. Nó cũng sử dụng cùng một giao diện để mở các tệp được sử dụng gần đây và các bộ đệm hiện đang mở và hơn thế nữa.

Theo mặc định, nó ánh xạ <c-p>trong chế độ bình thường để mở dấu nhắc CtrlP. Lời nhắc hiển thị danh sách các tệp được thu hẹp khi bạn nhập ký tự. Bạn có thể nhấn Entertại bất kỳ điểm nào để mở tệp hiện đang chọn hoặc sử dụng <c-k><c-j>để di chuyển lựa chọn lên và xuống thông qua danh sách các tệp hiện đang khớp.

Một lựa chọn phổ biến khác là Command-T , nhưng tôi thích CtrlP vì nó được triển khai trong VimScript; Command-T có thành phần Ruby.

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.