Cách chọn tất cả các phiên bản của một biến và chỉnh sửa tên biến trong Sublime


428

Nếu tôi chọn một biến (không chỉ bất kỳ chuỗi nào) trong mã của mình, tất cả các phiên bản khác của biến đó sẽ có một nét (viền trắng) xung quanh chúng:

nhập mô tả hình ảnh ở đây

Có một phím tắt nào cho phép tôi chọn tất cả các phiên bản của biến đó và chỉnh sửa tất cả chúng cùng một lúc không?


Những điều tôi đã thử:

D, KUcho phép tôi chọn từng cái một, nhưng tôi phải loại trừ thủ công các chuỗi không khớp biến:

nhập mô tả hình ảnh ở đây

Và sử dụng CtrlGchỉ cần chọn tất cả các chuỗi khớp:

nhập mô tả hình ảnh ở đây

Rõ ràng, Sublime có thể phân biệt giữa khớp và biến chuỗi. Có cách nào để chọn chỉ các biến phù hợp?

Câu trả lời:


604
  1. Đặt con trỏ vào biến.

    Lưu ý: chìa khóa là bắt đầu với một lựa chọn trống. Đừng làm nổi bật; chỉ đưa con trỏ của bạn ở đó.

con trỏ văn bản trên biến

  1. Nhấn Dkhi cần. Không phải trên máy Mac? Sử dụng CtrlD.

nhiều trường hợp biến được tô sáng

Không làm việc à? Hãy thử lại, đảm bảo bắt đầu với không có gì được chọn .

Thêm lệnh:

Tìm tất cả: CtrlG chọn tất cả các lần xuất hiện cùng một lúc. Không phải trên máy Mac?AltF3

Hoàn tác lựa chọn: U bước lùi. Không phải trên máy Mac?CtrlU

Nhanh Skip Tiếp theo: KD bỏ qua sự xuất hiện tiếp theo. Không phải trên máy Mac?CtrlKCtrlD

Tài liệu tuyệt vời


14
, Làm thế nào để bạn làm điều này trên bàn phím không MAC?
Bjarke Freund-Hansen

6
ít nhất trong ST3, bạn có thể thực hiện Ctrl--G mà không cần lệnh-D khác. Thật không may, nó bị dán nhãn sai trong thực đơn!
watsonic

30
Điều này không trả lời câu hỏi ban đầu của OP. Anh đặc biệt hỏi variable (not just any string). Điều này chỉ đơn giản là chọn tất cả các lần xuất hiện của chuỗi.
Betjamin Richards

17
@BetjaminRichards Đảm bảo bạn không chọn (tô sáng) biến. Chỉ cần di chuyển con trỏ vào biến và sau đó nhấn ⌘D. Ngẫu nhiên, đây chính xác là vấn đề tôi gặp phải với câu trả lời của MattDM ( stackoverflow.com/a/16844924/483520 ).
Nolan Amy

2
@MuhammadUmer Bất cứ điều gì phù hợp với từ, tính đến ranh giới. Không phải là một tìm kiếm biến thành sự thật, nhưng tốt hơn nhiều so khớp chuỗi đơn giản.
Nolan Amy

135

Tôi biết câu hỏi là về máy Mac, nhưng tôi đã đến đây để tìm kiếm câu trả lời cho Ubuntu, vì vậy tôi đoán câu trả lời của tôi có thể hữu ích cho ai đó.

Cách dễ dàng để làm điều đó : AltF3.


10
Nó vẫn chọn mọi thứ có foo bên trong.
dùng1767754

1
Câu trả lời này cho câu hỏi: stackoverflow.com/q/12162047/2270563 . Nhưng ở đây câu hỏi là khác nhau. Để chỉ chọn các biến chứ không phải tất cả các kết quả khớp.
Ram

4
@ user1767754 Nếu bạn không muốn chọn tất cả những gì có foobên trong, chưa chọn đầu tiên foo. Thay vào đó chỉ cần đặt một con trỏ trong từ foovà sau đó Alt-F3. Voila
Anwar

Câu trả lời này là sai. Điều này sẽ chọn tất cả các trường hợp fookhông chỉ những người nổi bật.
André C. Andersen

Không hoạt động trong KDE, vì vậy tôi chỉ thêm {"khóa": ["alt + d"], "lệnh": "find_all_under"} vào tệp liên kết khóa: Tùy chọn> Khóa BIndings. alt + d dường như không xung đột với bất cứ điều gì ở đó.
dùng1985553

47

Mặc dù có nhiều nỗ lực, tôi vẫn chưa tìm thấy cách tích hợp hoặc hỗ trợ plugin để làm những gì bạn đang cố gắng thực hiện. Tôi hoàn toàn đồng ý rằng nó nên có thể, như chương trình có thể phân biệt footừ buffoonkhi bạn lần đầu tiên làm nổi bật nó, nhưng không ai biết một cách để làm việc đó.


Tuy nhiên, đây là một số tổ hợp phím hữu ích để chọn từ trong Sublime Text 2:

CtrlG- Chọn tất cả các lần xuất hiện của từ hiện tại ( AltF3trên Windows / Linux)

D- chọn phiên bản tiếp theo của từ hiện tại ( CtrlD)

  • K, D- bỏ qua trường hợp hiện tại và tiếp tục chọn trường hợp tiếp theo ( CtrlK, CtrlD)
  • U- "hoàn tác mềm", di chuyển trở lại lựa chọn trước đó ( CtrlU)

E, H- sử dụng lựa chọn hiện tại làm trường "Tìm" trong Tìm và Thay thế ( CtrlE, CtrlH)


6
Nhưng đột quỵ chỉ xuất hiện xung quanh các lần xuất hiện của tên biến , trong khi ⌘+Dhành động trên tất cả các lần xuất hiện của chuỗi. Ví dụ, nếu tôi làm nổi bật foo, tuyệt vời vuốt ve tất cả các biến foos, nhưng không phải là chuỗi footrong eject_buffoonhàm của tôi . Tuy nhiên bằng cách sử dụng combo chìa khóa trên, tôi buộc phải tự ⌘+Kra các trận đấu chuỗi để tránh việc có một eject_bufbarnchức năng. Phải có cách tốt hơn!
Nolan Amy

@Nolan - hãy đặt câu hỏi và xem có ai có bất kỳ đề xuất nào không. Một cách giải quyết có thể là lựa chọn foo_(foo và không gian sau nó) hoặc _foo_(số lượng có cả trước và sau) và sau đó sử dụng ⌘-Dhoặc Ctrl-⌘-D.
MattDMo

7
Tôi thực sự nghĩ rằng đây chính là câu hỏi mà OP được hỏi. Ông đặc biệt nói " biến " (không phải "vùng văn bản" hoặc "chuỗi") và " đột quỵ " (không phải "tô sáng"). Và câu hỏi này không phải là một bản sao của stackoverflow.com/questions/12162047/ Khăn - mà người ta nói "lựa chọn được tô sáng". Ngoài ra, tất nhiên, foothường xuất hiện như (foo), _foo,, (foo,, và _foo}, vì vậy _foo_là khá thỏa đáng.
Nolan Amy

21

Điều này làm việc cho tôi. Đặt con trỏ của bạn ở đầu từ bạn muốn thay thế, sau đó

CtrlK, CtrlD, CtrlD...

Điều đó sẽ chọn bao nhiêu trường hợp của từ bạn muốn, sau đó bạn có thể chỉ cần gõ thay thế.


1
Đây là câu trả lời làm việc cho tôi ngoài câu trả lời đã được đề cập. Tốt
Akash

Điều này không trả lời câu hỏi.
MD004

@ MD004 Làm sao vậy?
hobs

@hobs Câu hỏi là làm thế nào để "chọn tất cả các trường hợp đó" cùng một lúc . Tôi sẽ thừa nhận sự phân nhịp của câu hỏi trong tiêu đề là mơ hồ, nhưng sau này trong bài OP mô tả giải pháp của bạn và nói rằng đây "chọn chúng một-by-một, nhưng tôi phải tự loại trừ các trận đấu chuỗi không biến "Đó là không thỏa đáng. Btw, một kịch bản ví dụ trong đó điều này không thỏa đáng là khi có 1000 lần xuất hiện của từ bạn muốn thay thế, trong trường hợp đó, việc chọn chúng không phải là một tùy chọn.
MD004

1
À, tôi hiểu rồi. Cảm ơn bạn. Bây giờ tôi thấy lý do tại sao câu trả lời được chấp nhận tốt hơn nhiều cho tình huống của OP và ví dụ 1000 lần xảy ra của bạn.
Hobs

12

Điều kỳ diệu là, bạn phải bắt đầu với một lựa chọn trống, vì vậy hãy đặt con trỏ của bạn trước từ / ký tự bạn muốn chọn nhiều và nhấn Ctrl+ D.


2
Đây là câu trả lời cho các biến của các ký tự đơn. Đối với bất kỳ biến khác, bạn có thể đặt bất cứ nơi nào con trỏ vào biến để bắt đầu.
manish_s

Điều này hoạt động với tôi trong Sublime 3 và là cách đơn giản nhất để làm điều đó nếu bạn muốn giới hạn các thay đổi trong một khu vực nhỏ hơn như trong một chức năng trái ngược với toàn bộ tệp. Command-D cho hệ điều hành MacOS, tất nhiên.
Ryan H.

10

Đối với tôi, đây là sai lầm lớn nhất trong Sublime. Alt+ F3khó tiếp cận / ghi nhớ và Ctrl+ Shift+ Gkhông có ý nghĩa gì khi xem xét Ctrl+ Dlà "thêm trường hợp tiếp theo vào lựa chọn".

Thêm này để bạn User Key Bindings (Preferences> Key Bindings):

{ "keys": ["ctrl+shift+d"], "command": "find_all_under" },

Bây giờ bạn có thể đánh dấu một cái gì đó, nhấn Ctrl+ Shift+ Dvà nó sẽ thêm mọi thể hiện khác trong tệp vào vùng chọn.


1
Đây là câu trả lời duy nhất thực sự trả lời câu hỏi ban đầu!
kmundnic

Vẫn chọn chuỗi và nhận xét
Wassadamo

4

đề cập bởi @watsonic rằng trong Sublime bản 3 trên Mac OS, bắt đầu với một sự lựa chọn sản phẩm nào , chỉ đơn giản G( AltF3trên Windows) hiện các trick, thay vì D+ Gtrong Sublime Văn bản 2.


4

Như user1767754 đã nói, chìa khóa ở đây là không thực hiện bất kỳ lựa chọn nào ban đầu.

Chỉ cần đặt con trỏ bên trong tên biến, không nhấp đúp để chọn nó. Đối với các biến nhân vật duy nhất, đặt con trỏ ở phía trước hoặc kết thúc của biến để không thực hiện bất kỳ lựa chọn ban đầu.

Bây giờ tiếp tục nhấn Cmd+ Dcho lựa chọn biến tiếp theo hoặc Ctrl+ Cmd+ Gđể chọn tất cả các biến cùng một lúc. Nó sẽ kỳ diệu chỉ chọn các biến.


0

Chỉ trong trường hợp bất kỳ ai khác vấp phải câu hỏi này trong khi tìm cách thay thế một chuỗi trên nhiều tệp, đó là Command+ Shift+F

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.