Nói rằng tôi có dòng này của văn bản trong vim:Xóa từ con trỏ đến cuối ngoặc (vv) trong vim
(foo bar (baz) qux)
^
và con trỏ của tôi là vào khoảng trống giữa foo
và bar
như đã nêu. Tôi thường thấy rằng, trong các tình huống như thế này, tôi muốn xóa toàn bộ bên phải của biểu thức được viết ngoặc đơn bên ngoài (nghĩa là, ở bên phải con trỏ của tôi), trong khi vẫn giữ nguyên phần bên trái. Đó là, tôi muốn kết thúc với:
(foo)
Thông thường, tôi muốn thực hiện điều này với dt)
("xóa cho đến khi )
"), nhưng việc bổ sung một ngoặc lồng nhau những điều phức tạp: lệnh đó sẽ để lại tôi với (foo) qux)
. Tôi cũng có thể sử dụng d2t)
, nhưng tôi không muốn phải tự đếm số lượng dấu ngoặc ôm lồng nhau. Tôi cũng có thể sử dụng di)
, nhưng xóa toàn bộ toàn bộ bên trong dấu ngoặc đơn, để lại cho tôi ()
.
Có chuyển động vim nào với nhận thức về số dư của i
- and a
-modified motions nhưng có liên quan đến vị trí con trỏ hiện tại không?
Tôi không biết về '])'; đó là chắc chắn đơn giản hơn giải pháp của tôi (nhưng tôi vẫn nên làm việc cho các phiên bản không vim của vi). –
@Keith Thompson: Giải pháp của bạn chắc chắn là vi tương thích mà là tốt đẹp.Nỗi sợ của tôi với giải pháp của bạn là nó phụ thuộc vào 'F (' tìm kiếm thích hợp '(' để nhảy tới. Tôi nghĩ tôi thích làm 'df)' và lặp lại w/'.' và sau đó là' a) ' . Hoặc 'mxF (' sau đó lặp lại 'F' chuyển động với', 'cho đến khi chính xác' ('được tìm thấy sau đó' '% d'x'' –
Vâng, tôi chỉ nghĩ về một trường hợp mà giải pháp của tôi sẽ không hoạt động:' ((trước) foo^(sau)) '.' F ('hoặc'? ( 'sẽ tìm dấu ngoặc trái trước' trước', không phải dấu ngoặc đơn gần nhất bao quanh vị trí con trỏ. (Tôi nhớ một ': set lisp 'lệnh từ nhiều năm trước. Tôi thấy vim vẫn có nó. Nó làm gì? Yeah, tôi nên RTFM.) –