Làm cách nào để chọn giữa dấu ngoặc (hoặc dấu ngoặc kép hoặc trên) trong Vim?


219

Tôi chắc chắn đã từng có một plugin cho công cụ này, nhưng bây giờ tôi cần nó, dường như tôi không thể tìm thấy nó (một cách tự nhiên), vì vậy tôi sẽ chỉ hỏi những điều đơn giản và tốt đẹp.

Cách dễ nhất để chọn giữa dấu ngoặc hoặc dấu ngoặc kép hoặc nói chung là danh sách các ký tự khớp là gì?

   write ( *, '(a)' ) 'Computed solution coefficients:'

Ví dụ, ở đây tôi muốn chọn (a), hoặc Computed solution coefficients:.

Tôi không quan tâm đến multiline, chỉ những trường hợp xảy ra trên một dòng.

Câu trả lời:


276

Sử dụng bất kỳ khóa điều hướng nào bạn muốn nhận được trong dấu ngoặc đơn, sau đó bạn có thể sử dụng yi(hoặc yi)để sao chép mọi thứ trong phạm vi khớp. Điều này cũng hoạt động với dấu ngoặc vuông (ví dụ yi]) và dấu ngoặc nhọn. Ngoài y, bạn cũng có thể xóa hoặc thay đổi văn bản (ví dụ ci), di]).

Tôi đã thử điều này với dấu ngoặc kép và dấu ngoặc đơn và nó dường như cũng hoạt động ở đó. Đối với dữ liệu của bạn, tôi làm:

write (*, '(a)') 'Computed solution coefficients:'

Di chuyển con trỏ đến C, sau đó gõ yi'. Di chuyển con trỏ đến một dòng trống, nhấn pvà lấy

Computed solution coefficients:

Như CMS lưu ý , các công trình này để lựa chọn chế độ trực quan cũng - chỉ cần sử dụng vi), vi}, vi'vv


1
Nói chung, tôi đang tìm cách để chọn mọi thứ giữa các ký tự khớp được xác định trước (thông thường chỉ có dấu ngoặc kép và dấu ngoặc kép và dấu ngoặc của tất cả các loại).
Rook

2
Bạn có ý nghĩa gì bởi các từ tách biệt? Tôi đã thử nó trên "[x, y, z]" và nó đã chọn ra "x, y, z"
Tim Whitcomb

4
Bỏ qua bình luận cuối cùng - tìm thấy vấn đề là gì. Hoạt động như một bùa mê :-)
Rook

nó dường như hoạt động với các trích dẫn cũng như yi"chọn tất cả các trích dẫn
héo

ci(hoặc ci)làm điều đó cho những gì tôi đang tìm kiếm. Cảm ơn. Tôi vẫn chưa hiểu hết về itrường hợp đó, nhưng ai quan tâm miễn là nó hoạt động, phải không? :)
justnorris

279

Để chọn giữa các dấu ngoặc đơn, tôi thường làm một vi' ("chọn dấu ngoặc đơn bên trong").

Trong khối ngoặc đơn, tôi sử dụng vib ("chọn khối bên trong")

Bên trong khối niềng răng xoăn bạn có thể sử dụng viB("thủ đô B")

Để làm cho các lựa chọn "bao gồm" (cũng chọn dấu ngoặc kép, dấu ngoặc đơn hoặc dấu ngoặc nhọn), bạn có thể sử dụng athay vì i.

Bạn có thể đọc thêm về các lựa chọn đối tượng Văn bản trên hướng dẫn hoặc :help text-objectstrong vim.


cảm ơn vì mẹo đó, tôi đã tìm kiếm và yêu cầu một cái gì đó tương tự và không hài lòng với kết quả của mình. Tuyệt vời.
alfredodeza

Mẹo này rất đơn giản và dễ thực hiện trong bộ nhớ não và cơ bắp của tôi. cảm ơn.
Ghazaly

Đây là một mẹo rất hữu ích. Không còn dò dẫm với tổ hợp phím thêm. Cảm ơn vi đương link.
Rai

27

Phương pháp lựa chọn này được tích hợp sẵn và được bảo vệ tốt trong trợ giúp Vim. Nó bao gồm các thẻ XML và nhiều hơn nữa.

Xem :help text-objects.


1
: giúp các đối tượng văn bản gần gũi hơn với những thứ hữu ích ... ít nhất bạn có thể đề cập đến một số trong những thứ phổ biến, như "và" (khi ở chế độ trực quan.
Stobor

2
(Ngoài ra, +1 vì mặc dù là người dùng vim lâu năm, tôi không biết về những điều này!)
Stobor

@Stobor. Chúc mừng đã sửa tham chiếu đó
michael

21

Để chọn trong dấu ngoặc đơn sử dụng vi'.

Để chọn trong ngoặc sử dụng vi(.


3
Lưu ý: ci'hoặc ci(để thay đổi thay vì lựa chọn trực quan. Nhưng nó làm chính xác những gì tôi muốn. Cảm ơn :)
justnorris

Cái thứ hai chỉ hoạt động khi trong khối () đó, vì vậy tôi thường làm %vi(hoặc%vib
816-8055

7

Sử dụng các mũi tên hoặc hjklđể đến một trong các biểu thức ngoặc, sau đó vđể chọn chế độ trực quan (tức là chọn), sau đó %chuyển sang dấu ngoặc khác.


5
(không thực hiện trích dẫn, thật không may, mặc dù ...)
Stobor

3

Viết hàm Vim bằng .vimrc bằng hàm searchpairdựng sẵn:

searchpair({start}, {middle}, {end} [, {flags} [, {skip}
            [, {stopline} [, {timeout}]]]])
    Search for the match of a nested start-end pair.  This can be
    used to find the "endif" that matches an "if", while other
    if/endif pairs in between are ignored.
    [...]

( http://vimdoc.sourceforge.net/htmldoc/eval.html )


2

Tôi sẽ thêm một chi tiết cho câu trả lời được bình chọn nhiều nhất:

Nếu bạn đang sử dụng gvim và muốn sao chép vào bảng tạm, hãy sử dụng

"+<command>

Để sao chép tất cả nội dung giữa các dấu ngoặc (hoặc dấu ngoặc hoặc dấu ngoặc nhọn)

Ví dụ: "+yi}sẽ sao chép vào bảng tạm tất cả nội dung giữa các dấu ngoặc nhọn mà con trỏ của bạn là.


2
Điều này là hoàn toàn trực giao với vấn đề và không nên là một câu trả lời. Bạn có thể viết điều này trên mỗi câu hỏi về y.
ống

Đây là một bổ sung cho câu trả lời, không phải là một câu trả lời chính nó.
yuriploc

Sau đó, nó phải là một chỉnh sửa cho câu trả lời đó, bài này như là không trả lời câu hỏi.
đường ống

Đây là một quảng cáo cho việc KHÔNG sử dụng gvim :) Ai cần thêm hai ca + nhấn phím trong cuộc sống của họ?
Paul Parker

1

Tôi đã tạo một plugin vim-textobj-quotes : https://github.com/beloglazov/vim-textobj-quotes

Nó cung cấp các đối tượng văn bản cho các cặp trích dẫn gần nhất của bất kỳ loại nào. Chỉ sử dụng iqhoặcaq nó cho phép bạn thao tác trên nội dung của các trích dẫn đơn ('), double (") hoặc back (`) hiện đang bao quanh con trỏ, ở phía trước con trỏ hoặc phía sau (theo thứ tự ưu tiên đó) Nói cách khác, nó nhảy về phía trước hoặc lùi lại khi cần để đạt được dấu ngoặc kép.

Dễ hiểu hơn bằng cách xem các ví dụ (con trỏ được hiển thị với | ):

  1. Trước : foo '1, |2, 3' bar; sau khi nhấn diq:foo '|' bar
  2. Trước : foo| '1, 2, 3' bar; sau khi nhấn diq:foo '|' bar
  3. Trước : foo '1, 2, 3' |bar; sau khi nhấn diq:foo '|' bar
  4. Trước : foo '1, |2, 3' bar; sau khi nhấn daq:foo | bar
  5. Trước : foo| '1, 2, 3' bar; sau khi nhấn daq:foo | bar
  6. Trước : foo '1, 2, 3' |bar; sau khi nhấn daq:foo | bar

Các ví dụ ở trên được đưa ra cho các trích dẫn đơn, plugin hoạt động chính xác theo cùng một cách cho dấu ngoặc kép (") và back (`).

Bạn cũng có thể sử dụng bất kỳ nhà khai thác khác: ciq, diq, yiq, viq,, vv

Xin vui lòng xem trang github được liên kết ở trên để biết thêm chi tiết.


-6

Một sơ đồ đơn giản trong vim sẽ giải quyết vấn đề này. map viq Fv lvf hh Lệnh này ở trên lệnh ánh xạ viq tới các phím để tìm kiếm giữa các dấu ngoặc kép. Thay thế "bằng bất kỳ ký tự nào và tạo keymap của bạn. Dán cái này vào vimrc trong khi khởi động và bạn sẽ có thể sử dụng nó mọi lúc.

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.