วิธีเลือกอินสแตนซ์ทั้งหมดของตัวแปรและแก้ไขชื่อตัวแปรใน Sublime


428

ถ้าฉันเลือกตัวแปร (ไม่ใช่แค่สตริงใด ๆ ) ในโค้ดของฉันอินสแตนซ์อื่น ๆ ของตัวแปรนั้นจะได้เส้นขีด (เส้นขอบสีขาว) ล้อมรอบพวกเขา:

ป้อนคำอธิบายรูปภาพที่นี่

มีแป้นพิมพ์ลัดที่จะให้ฉันเลือกตัวแปรเหล่านั้นทั้งหมดและแก้ไขทั้งหมดพร้อมกันหรือไม่


สิ่งที่ฉันได้ลอง:

D, KและUให้ฉันเลือกทีละตัว แต่ฉันต้องยกเว้นการจับคู่สตริงที่ไม่ใช่ตัวแปรด้วยตนเอง:

ป้อนคำอธิบายรูปภาพที่นี่

และการใช้CtrlGเพียงแค่เลือกทั้งหมดตรงกับสตริง:

ป้อนคำอธิบายรูปภาพที่นี่

เห็นได้ชัดว่า Sublime สามารถแยกความแตกต่างระหว่างการจับคู่ตัวแปรและสตริง ไม่มีวิธีเลือกเฉพาะตัวแปรที่ตรงกันหรือไม่?

คำตอบ:


604
  1. วางเคอร์เซอร์ในตัวแปร

    หมายเหตุ:กุญแจสำคัญคือการเริ่มต้นด้วยการเลือกที่ว่างเปล่า อย่าเน้น; เพียงวางเคอร์เซอร์ไว้ที่นั่น

เคอร์เซอร์ข้อความบนตัวแปร

  1. กดDตามต้องการ ไม่ใช่บน Mac ใช่ไหม CtrlDใช้

มีอินสแตนซ์ของตัวแปรที่เน้นมากขึ้น

ไม่ได้ทำงานเหรอ ลองใหม่อีกครั้งโดยไม่เลือกอะไรเลย

คำสั่งเพิ่มเติม:

ค้นหาทั้งหมด: CtrlGเลือกเหตุการณ์ทั้งหมดในครั้งเดียว ไม่ใช่บน Mac ใช่ไหมAltF3

เลิกทำการเลือก: Uก้าวถอยหลัง ไม่ใช่บน Mac ใช่ไหมCtrlU

ข้ามด่วนถัดไป: KDข้ามเหตุการณ์ถัดไป ไม่ใช่บน Mac ใช่ไหมCtrlKCtrlD

เอกสารประเสริฐ


14
⌘คืออะไรคุณจะทำสิ่งนี้บนแป้นพิมพ์ที่ไม่ใช่ MAC ได้อย่างไร
Bjarke Freund-Hansen

6
อย่างน้อยใน ST3 คุณสามารถทำ Ctrl-⌘-G โดยไม่มีคำสั่ง⌘-D อื่น ๆ มันติดฉลากผิดในเมนูอย่างน่าเสียดาย!
watsonic

30
นี่ไม่ได้ตอบคำถามเดิมของ OP variable (not just any string)เขาถามเฉพาะ นี่เป็นการเลือกสตริงทั้งหมดที่เกิดขึ้น
Betjamin Richards

17
@BetjaminRichards ให้แน่ใจว่าคุณไม่ได้เลือก (เน้น) ตัวแปร เพียงเลื่อนเคอร์เซอร์ไปที่ตัวแปรแล้วกด⌘D บังเอิญนี่เป็นปัญหาที่ฉันมีกับคำตอบของ MattDMo ( stackoverflow.com/a/16844924/483520 )
โนแลนเอมี่

2
@MuhammadUmer ทุกสิ่งที่ตรงกับคำโดยคำนึงถึงขอบเขต ไม่ใช่การค้นหาตัวแปรที่แท้จริง แต่ดีกว่าการจับคู่สตริงแบบธรรมดามาก
โนแลนเอมี่

135

ฉันรู้ว่าคำถามเกี่ยวกับ Mac แต่ฉันมาที่นี่เพื่อค้นหาคำตอบสำหรับ Ubuntu ดังนั้นฉันเดาว่าคำตอบของฉันอาจเป็นประโยชน์กับใครบางคน

วิธีง่ายๆในการทำ: AltF3.


10
มันยังคงเลือกทุกอย่างที่มีอยู่ภายใน
user1767754

1
คำตอบนี้สำหรับคำถามที่ว่าstackoverflow.com/q/12162047/2270563 แต่ที่นี่คำถามแตกต่างกัน เพื่อเลือกเฉพาะตัวแปรมากกว่าการแข่งขันทั้งหมด
Ram

4
@ user1767754 หากคุณไม่ต้องการที่จะเลือกทั้งหมดที่มีอยู่ภายในไม่ได้เลือกแรกfoo fooแต่เพียงแค่วางเคอร์เซอร์ในคำแล้วfoo Alt-F3Voila
Anwar

คำตอบนี้ผิด นี่จะเป็นการเลือกอินสแตนซ์ทั้งหมดที่fooไม่ใช่แค่ไฮไลต์
André C. Andersen

ไม่ทำงานใน KDE ดังนั้นฉันเพิ่งเพิ่ม {"keys": ["alt + d"], "command": "find_all_under"} ลงในไฟล์การเชื่อมโยงคีย์: การตั้งค่า> Key BIndings alt + d ดูเหมือนจะไม่ขัดแย้งกับสิ่งใดในนั้น
user1985553

47

แม้จะมีความพยายามมาก แต่ฉันไม่พบวิธีที่มีอยู่แล้วภายในหรือปลั๊กอินที่ช่วยเหลือในการทำสิ่งที่คุณพยายามทำ ฉันเห็นด้วยอย่างสมบูรณ์ว่าควรเป็นไปได้เนื่องจากโปรแกรมสามารถแยกความแตกต่างfooจากbuffoonเมื่อคุณเน้นเป็นครั้งแรก แต่ดูเหมือนไม่มีใครรู้วิธีการทำ


อย่างไรก็ตามนี่คือคอมโบคีย์ที่มีประโยชน์สำหรับการเลือกคำใน Sublime Text 2:

CtrlG- เลือกคำปัจจุบันทั้งหมด ( AltF3บน Windows / Linux)

D- เลือกอินสแตนซ์ถัดไปของคำปัจจุบัน ( CtrlD)

  • K, D- ข้ามอินสแตนซ์ปัจจุบันและไปเพื่อเลือกอันถัดไป ( CtrlK, CtrlD)
  • U- "soft undo" เลื่อนกลับไปที่ตัวเลือกก่อนหน้า ( CtrlU)

E, H- ใช้เลือกในปัจจุบันเป็นช่อง "ค้นหา" ในการค้นหาและแทนที่ ( CtrlE, CtrlH)


6
แต่การลากเส้นจะปรากฏเฉพาะรอบ ๆ การเกิดขึ้นของชื่อตัวแปรในขณะที่⌘+Dทำงานกับการเกิดขึ้นทั้งหมดของสตริง ตัวอย่างเช่นถ้าฉันไฮไลท์fooประเสริฐจังหวะทั้งหมดตัวแปรfoos แต่ไม่สตริงfooในeject_buffoonฟังก์ชั่นของฉัน และด้วยการใช้คอมโบหลักด้านบนฉันถูกบังคับให้⌘+Kออกจากการแข่งขันสตริงด้วยตนเองเพื่อหลีกเลี่ยงการมีeject_bufbarnฟังก์ชั่น จะต้องมีวิธีที่ดีกว่า!
โนแลนเอมี่

@ โนแลน - อย่าลังเลที่จะถามคำถามและดูว่าใครมีคำแนะนำใด ๆ หนึ่งวิธีแก้ปัญหาที่เป็นไปได้คือการเลือกfoo_(foo และพื้นที่หลังจากที่มัน) หรือ_foo_(พื้นที่ทั้งก่อนและหลัง) และจากนั้นใช้หรือ⌘-D Ctrl-⌘-D
MattDMo

7
จริง ๆ แล้วฉันคิดว่านี่เป็นคำถามที่ว่า OP ขอ เขาระบุว่า " ตัวแปร " (ไม่ใช่ "ขอบเขตข้อความ" หรือ "สตริง") และ " จังหวะ " โดยเฉพาะ (ไม่ใช่ "เน้น") และคำถามนี้ไม่ได้ซ้ำกับstackoverflow.com/questions/12162047/ … - คำถามหนึ่งระบุว่า "การเลือกที่เน้นสี" นอกจากนี้แน่นอนfooมักจะแสดงขึ้นเป็น(foo), _foo,, (foo,และ_foo}เพื่อให้_foo_เป็นที่น่าพอใจสวย
โนแลนเอมี่

21

สิ่งนี้ใช้ได้สำหรับฉัน วางเคอร์เซอร์ที่ตำแหน่งเริ่มต้นของคำที่คุณต้องการแทนที่จากนั้น

CtrlK, CtrlD, CtrlD...

ซึ่งควรเลือกคำให้มากที่สุดเท่าที่คุณต้องการจากนั้นคุณสามารถพิมพ์คำที่ต้องการแทนได้


1
นี่คือคำตอบที่ทำงานให้ฉันนอกเหนือจากคำตอบที่ได้รับการกล่าวถึง ดีมาก!
Akash

นี่ไม่ได้ตอบคำถาม
MD004

@ MD004 เหรอ?
เตาแก๊ส

@hobs คำถามคือวิธีการ "เลือกทั้งหมดของกรณีที่" ในครั้งเดียว ฉันจะยอมรับถ้อยคำของคำถามในชื่อนั้นคลุมเครือ แต่ในภายหลังในโพสต์ OP อธิบายถึงวิธีแก้ปัญหาของคุณและบอกว่าสิ่งนี้ "เลือกพวกเขาทีละคน แต่ฉันต้องแยกการจับคู่สตริงที่ไม่ใช่ตัวแปรด้วยตนเอง "ซึ่งไม่น่าพอใจ Btw ตัวอย่างสถานการณ์ที่สิ่งนี้ไม่น่าพอใจคือเมื่อมีการพูดคำที่คุณต้องการแทนที่ 1,000 ครั้งซึ่งในกรณีนี้การเลือกด้วยตนเองไม่ใช่ตัวเลือก
MD004

1
อ่าฉันเข้าใจแล้ว ขอบคุณ. ตอนนี้ฉันเห็นแล้วว่าทำไมคำตอบที่ได้รับการยอมรับดีกว่าสำหรับสถานการณ์ของ OP และตัวอย่างที่เกิดขึ้น 1,000 ครั้งของคุณ
เตาแก๊ส

12

The Magic คือคุณต้องเริ่มต้นด้วยการเลือกที่ว่างเปล่าดังนั้นจึงวางเคอร์เซอร์ของคุณในหน้าของคำ / ตัวอักษรที่คุณต้องการที่จะเลือกหลายรายการและกด+CtrlD


2
นี่คือคำตอบสำหรับตัวแปรของอักขระเดี่ยว สำหรับตัวแปรอื่น ๆ คุณสามารถวางเคอร์เซอร์ไว้ที่ใดก็ได้ในตัวแปรเพื่อเริ่มต้นด้วย
manish_s

สิ่งนี้ใช้ได้กับฉันใน Sublime 3 และเป็นวิธีที่ง่ายที่สุดในการทำหากคุณต้องการ จำกัด การเปลี่ยนแปลงในพื้นที่เล็ก ๆ เช่นภายในฟังก์ชั่นซึ่งตรงข้ามกับไฟล์ทั้งหมด Command-D สำหรับ macOS แน่นอน
Ryan H.

10

สำหรับฉันนี่เป็นความผิดพลาดที่ยิ่งใหญ่ที่สุดใน Sublime Alt+ F3ยากต่อการเข้าถึง / จดจำและCtrl+ Shift+ Gไม่สมเหตุสมผลเมื่อพิจารณาCtrl+ Dคือ "เพิ่มอินสแตนซ์ถัดไปสำหรับการเลือก"

เพิ่มไปยังการเชื่อมโยงคีย์ผู้ใช้ของคุณ(การตั้งค่า> การผูกกุญแจ):

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

ตอนนี้คุณสามารถไฮไลต์บางสิ่งได้กดCtrl+ Shift+Dและมันจะเพิ่มทุก ๆ อินสแตนซ์ในไฟล์ไปยังส่วนที่เลือก


1
นี่เป็นคำตอบเดียวที่จริง ๆ แล้วตอบคำถามเดิม!
kmundnic

ยังคงเลือกสตริงและความคิดเห็น
Wassadamo


4

ดังที่ผู้ใช้ 1767754 กล่าวว่ากุญแจสำคัญที่นี่คือการไม่ทำการเลือกใด ๆ ในตอนแรก

เพียงวางเคอร์เซอร์ไว้ในชื่อตัวแปรอย่าคลิกสองครั้งเพื่อเลือก สำหรับตัวแปรอักขระเดี่ยววางเคอร์เซอร์ที่ด้านหน้าหรือท้ายของตัวแปรเพื่อไม่ทำการเลือกใด ๆ ในตอนแรก

ตอนนี้กดปุ่มCmd+ Dเพื่อเลือกตัวแปรถัดไปหรือCtrl+ Cmd+ Gเพื่อเลือกตัวแปรทั้งหมดในครั้งเดียว มันจะเลือกตัวแปรอย่างน่าอัศจรรย์เท่านั้น


0

ในกรณีที่คนอื่นสะดุดกับคำถามนี้ในขณะที่มองหาวิธีการแทนที่สตริงข้ามไฟล์หลาย ๆ ไฟล์มันคือCommand+ Shift+F

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.