IntelliJ IDEA วิธีแก้ไขหลายบรรทัด


116

ฉันเคยเห็นสิ่งนี้ใน TextMate และฉันสงสัยว่ามีวิธีทำใน IDEA หรือไม่

สมมติว่าฉันมีรหัสต่อไปนี้:

 leaseLabel = "Lease";
 leaseLabelPlural = "Leases";
 portfolioLabel = "Portfolio";
 portfolioLabelPlural = "Portfolios";
 buildingLabel = "Building";

วิธีใดดีที่สุดในการต่อท้าย "+" foo "" ทุกบรรทัด โหมดคอลัมน์จะไม่ทำงานเนื่องจากเส้นไม่ได้จัดแนวทางด้านขวาอย่างถูกต้อง ... เว้นแต่จะมีวิธีง่ายๆในการปรับข้อความให้ถูกต้อง: P


นี่คือสิ่งที่ฉันต้องทำไม่บ่อยนักแม้ว่าจะมีโหมดพิเศษในตัวแก้ไข แต่ฉันก็จำวิธีใช้ไม่ได้ ฉันจะใช้คลิปบอร์ดถ้ามันเป็นเพียงไม่กี่บรรทัด (เช่นด้านบน) ถ้าเป็นหลายร้อยบรรทัดนั่นคือตอนที่ฉันย้ายไปที่ค้นหา / แทนที่แกดเจ็ต
Michael Burr

ในโหมดคอลัมน์ให้สร้างเคอร์เซอร์ 5 ตัวทางด้านซ้ายสุด จากนั้นใช้ Ctrl-RightArrow เพื่อข้ามไปทางขวา เคอร์เซอร์มาโครและการแทนที่การค้นหาหลายตัวเป็นวิธีที่ยอดเยี่ยมในการทำสิ่งนี้ให้สำเร็จ! ฉันตัดสินใจไม่ได้ว่าชอบอันไหนที่สุด
Daniel Alexiuc

1
Option + Shift + Click สำหรับ Macbook ทางลัด Intellij ทั้งหมด: docs.google.com/document/d/…
Soham Mehta

คำตอบ:


178

เนื่องจาก Idea IntelliJ IDEA 13.1 มีความเป็นไปได้ที่จะแก้ไขหลายบรรทัด

ใช้:

Alt+ Shift+ คลิกเมาส์

สำหรับการเลือก เพิ่มเติมเกี่ยวกับการปรับปรุงใหม่นี้ใน IntelliJ blogpost ที่นี่ คุณสมบัติที่มีประโยชน์มาก


1
ขอบคุณสำหรับลิงค์ ฉันเผลอกดใช้ฟีเจอร์นี้ แต่อย่างใดฉันก็คิดไม่ออกว่าคีย์ผสมไหนที่เผลอกด :)
aberrant80

12
ณ เดือนกุมภาพันธ์ 2015 Alt-Shift-Insert: โหมดการเลือกคอลัมน์หรือเพียงแค่เลือก Alt มีประสิทธิภาพมากและใช้งานง่าย ฉันไม่แน่ใจว่าทำไมผู้คนถึงบอกให้ OP ใช้ "ค้นหาและแทนที่" อย่างชัดเจนเมื่อเขาถามอย่างชัดเจนเกี่ยวกับการแก้ไขบรรทัดพร้อมกัน - ความจริงที่เขาถามนั้นบ่งบอกว่าเขาฉลาดพอที่จะตระหนักถึงการค้นหาและแทนที่
RichieHH

4
สำหรับ Mac Alt + Click
Gowtham Gopalakrishnan

5
และในตอนนี้เพียงแค่วางเมาส์ปุ่มกลาง + ลาก
WesternGun

1
Option + Shift + Click สำหรับ Macbook ทางลัด Intellij ทั้งหมด: docs.google.com/document/d/…
Soham Mehta

120

ฉันใช้โหมดการเลือกคอลัมน์ ( Cmd+ Shift+ 8บน Mac) ซึ่งอนุญาตให้สร้างเคอร์เซอร์หลายตัวผ่านShift+ UpหรือShift+ Downจากนั้นแก้ไขบรรทัดทั้งหมดด้วยกัน

เริ่มจาก IntelliJ IDEA 14 นอกจากนี้ยังมีClone Caret ด้านบน / ด้านล่าง :

  • ของ Windows: Ctrl, Ctrl+ Up/Down
  • MacOS: Option, Option+ Up/Down

(กดปุ่มตัวปรับแต่งครั้งที่สองค้างไว้จากนั้นกดปุ่มลูกศร)


5
ฉันกด Cmd + Shift + 8 โดยไม่ได้ตั้งใจและไม่สามารถคิดได้ตลอดชีวิตว่าทำไมทุกอย่างจึงเลือก "หลายบรรทัด" ได้ ขอบคุณสำหรับคำสั่งทางลัด!
Robin Jonsson

4
Double <kbd> Ctrl </kbd> ใช้ไม่ได้กับฉันใน IntelliJ Ultimate 2016.1 ฉันต้องใช้ <kbc> ตัวเลือก </kbd> สองครั้งกดครั้งที่สองค้างไว้แล้วกดปุ่มลูกศร
Big McLargeHuge

1
@DaveKennedy คุณพูดถูกจริงๆ Jet Brains เปลี่ยนทางลัดเริ่มต้นแล้ว
Alexander Bogushov

โซลูชัน ctrl คู่ดีที่สุดเนื่องจากช่วยให้ฉันวางมือบนแป้นพิมพ์
Andrejs

หากต้องการเปลี่ยนการแมปคีย์ให้ตรงกับตัวแก้ไขอื่น ๆ ที่คุณใช้จริงให้ไปที่การตั้งค่า -> คีย์แมปแล้วค้นหา "Clone Caret" ในช่องค้นหาด้านขวา คลิกขวาที่การกระทำและเลือก "เพิ่มแป้นพิมพ์ลัด" หากบันทึกจะทำให้เกิดข้อขัดแย้งให้คลิก "ตกลง" แต่อย่างใด จากนั้นจะเพิ่มข้อความแจ้งอีกครั้งเพื่อถามว่าคุณต้องการ "ลบ" งานอื่น ๆ (อาจเป็นสิ่งที่คุณต้องการ) หรือ "ออก" (การทริกเกอร์สองสิ่งโดยเจตนาด้วยทางลัดเดียวดูเหมือนจะแปลก ... ) หรือ "ยกเลิก" (ทำไม ก่อนหน้านี้คุณคลิกตกลงหรือไม่)
ArtOfWarfare

39

แนวทางอื่นสำหรับแป้นพิมพ์เท่านั้น เป็นไปได้ (ตั้งแต่เวอร์ชัน 13.1) ที่จะใช้ทางลัดAlt+ J/ Shift+ Alt+ J( Ctrl+ Gสำหรับ OS X) สำหรับการสร้างคาเร็ตหลายอัน Alt+ Jเลือกการเกิดขึ้นถัดไปของข้อความที่เลือกในปัจจุบันและเพิ่มเครื่องหมายคาเร็ตอื่น

  1. เลือกอัฒภาคแรก

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

  1. จากนั้นกดAlt+ Jสี่ครั้ง

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

  1. แก้ไขสิ่งที่คุณต้องการ

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

  1. กดEscเพื่อกลับไปที่บรรทัดแรก

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


5
พระเจ้าฉันอยู่โดยไม่มีคุณสมบัตินี้มานานกว่าหนึ่งปี! ขอบคุณมาก!
coffman21

27

วางคาเร็ตไว้ที่ท้าย

Windows: CTRL + CTRL(กดค้าง) +↑ / ↓

Mac: option + option(ถือ) ↑ / ↓+

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

เปลี่ยน Multi-caret Hotkey

ในการเพิ่มคีย์แมปที่กำหนดเองCTRL+ SHIFT+ Aให้พิมพ์keymapและคลิกที่คีย์แมปที่มีSettingsคีย์แมปที่เป็นข้อความย่อย ค้นหาและClone Caret AboveClone Caret Below

ฉันแมปของฉันกับALT+ SHIFT+↑ / ↓บน Windows และ+ ↑ / ↓บน Mac

โบนัส

ลองชุดของการถือครองCTRL, SHIFTและลูกศรเลือกสำหรับการใช้พลังงานที่ดีขึ้น


1
ขอขอบคุณสำหรับความคิดเห็น "END" เหมาะอย่างยิ่งสำหรับการกำหนดตัวแปรที่มีความยาวต่างกัน
Keegan 82

1
นี่น่าจะเป็นคำตอบเนื่องจากเป็นการตอบสนองที่ตรงประเด็นและสมบูรณ์ที่สุด +1.
Ariel Mirra

อีกวิธีหนึ่งคือกด "alt" ค้างไว้และกด "j" ค้างไว้มันจะเพิ่มบรรทัดในการเลือกหลายบรรทัด
Gaurav

14

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

บน Linux ( ไม่จำเป็นต้องใช้เมาส์ ):

  1. ALT+ SHIFT+ INSERTเพื่อเข้าสู่โหมดบล็อก

    เข้าสู่โหมดแก้ไขคอลัมน์

  2. SHIFT + UPหรือSHIFT + DOWNเพื่อเลือกหลายบรรทัด

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

  3. END เพื่อข้ามไปยังจุดสิ้นสุดของแต่ละบรรทัด

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

  4. ตอนนี้พิมพ์fooมันจะต่อท้ายแต่ละบรรทัด:

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

  5. ทุกอย่างตอนนี้ยกเลิกการเลือกด้วยและสลับกลับไปเลือกโหมดปกติESCAPEALT + SHIFT + INSERT


9

คุณยังสามารถเลือกบล็อกโค้ดแนวตั้งได้โดยคลิกที่ล้อเลื่อนของเมาส์แล้วลาก :

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


8

เลือกรายการถัดไป:

      Alt+J on Windows, Ctrl-G on Mac OS X

ยกเลิกการเลือกเหตุการณ์:

      Alt+Shift+J on Windows, Ctrl-Shift-G on Mac OS X

เลือกเหตุการณ์ทั้งหมด:

      Ctrl+Alt+Shift+J on Windows, Ctrl-Cmd-G on Mac OS X

สำหรับการอ้างอิงเพิ่มเติม: ลิงค์


ประเด็น(left) Alt + Jคือคุณต้องเลือกรหัสก่อน
ALIZEYN

7

ฉันแค่ใช้มาโครสำหรับสิ่งนี้ ฉันเริ่มบันทึกมาโครทำครั้งเดียวแล้วเล่นมาโครในแต่ละบรรทัดที่ฉันต้องการแก้ไข คุณจะประหลาดใจว่าคุณสามารถใช้ฟีเจอร์บันทึก / เล่นมาโครได้อย่างไร


การทิ้งมาโครจะมีประโยชน์มากสำหรับการเปลี่ยนแปลงประเภทนี้ วิธีที่คุณอธิบายว่ามันคือสิ่งที่ฉันจะทำอย่างไรหากฉันทำการเปลี่ยนแปลงเหล่านี้ในตัวแก้ไข Zeus
jussij

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

คุณหมายความว่าอย่างไรคุณสามารถ "ทำซ้ำกี่ครั้งก็ได้" มีวิธีทำมาโครซ้ำโดยอัตโนมัติหรือไม่?
pypmannetjies

แก้ไข -> มาโคร -> เล่นมาโครล่าสุด ฉันได้แมปกับ F12 แล้ว แต่ฉันมีการผูกคีย์ที่ไม่ได้มาตรฐาน ฉันใช้มาโครหนึ่งครั้งและเริ่มตี F12 ซ้ำแล้วซ้ำเล่า
Chris Kessel

มาโครเป็นสิ่งที่ดี แต่ถ้าฉันใช้ ideavim บน intellij มาโครไม่สามารถแก้ไขทางลัดของ vim ได้
Amitābha

5

ฉันใช้เวลาสักพักในการค้นหา แต่ใน Mac คุณสามารถกดสองครั้งOption(กดหนึ่งครั้งปล่อยกดอีกครั้งกดค้างไว้) และใช้Up/ Downคีย์เพื่อสร้าง / ลบคาเร็ตตามที่คุณต้องการ

คุณยังสามารถกดShift+ ค้างไว้Optionแล้วคลิกเพื่อสร้าง / ลบคาเร็ตตามจุดที่ต้องการ


ดีมาก แต่มีวิธีทำและเลือกลงไปจนสุดไฟล์หรือไม่? ไม่งั้นฉันต้องเลื่อนดูทุกอย่างโดยใช้ลูกศรและเรามีไฟล์ขนาดใหญ่
Jackie


3

ในกรณีนี้คุณสามารถเลือกชิ้นส่วนของโค้ดที่คุณต้องการทำสิ่งนี้และทำการแทนที่ได้ แทนที่:

";

ด้วย:

" + "foo";

ดังนั้นในกรณีที่คุณไม่ทราบ: หากคุณมีข้อความที่เลือกในขณะที่ทำการแทนที่ (Ctrl + R หรือ Cmd + R) ข้อความนั้นจะใช้กับข้อความที่เลือกเท่านั้น





1

สำหรับเวอร์ชันที่ใหม่กว่าให้ใช้: Alt+ Shift+Insert


อีกวิธีหนึ่งคือกด "alt" ค้างไว้และกด "j" ค้างไว้มันจะเพิ่มบรรทัดในการเลือกหลายบรรทัด
Gaurav

0

สิ่งที่ผมมักจะใช้ (NetBeans แต่ผมเชื่อว่ามันเป็นเรื่องง่ายที่จะใช้ใน IDE ใด ๆ ) find&replaceเป็น

คุณเพียงแค่ค้นหา;\nและแทนที่ด้วย+ $foo;\nจากนั้นคุณจะไม่ใช้กับทุกบรรทัด แต่คุณวางเคอร์เซอร์ไว้ที่บรรทัดแรกและคุณเพียงแค่กดปุ่ม "แทนที่" (ขึ้นอยู่กับ IDE ของคุณฉันคิดว่า) 7 ครั้งเพื่อเปลี่ยน 7 บรรทัดในเวลาไม่นาน ง่ายและสะดวกและควรทำด้วย IDE ขั้นพื้นฐานและขั้นสูงสุดที่คุณสามารถหาได้

แก้ไข: ใน IntelliJ (ไม่ทราบว่ามันใช้งานได้กับ IDE อื่น ๆ หรือไม่) คุณสามารถใช้การค้นหา regexp และแทนที่เพื่อเลือกเท่านั้นเพื่อให้คุณสามารถใช้ "แทนที่ทั้งหมด" ได้จริง


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

แล้วทำไม -1? ฉันตอบคำถามที่เขาถาม -1 คำถามถ้าคุณคิดว่ามันโง่ไม่ใช่คำตอบที่ถูกต้อง คำตอบที่ยอมรับด้วยมาโครอยู่ในความคิดของฉันวิธีที่ช้ากว่าที่จะซื่อสัตย์
Srneczek


0

คำตอบทั้งหมดข้างต้นดีมาก แต่ถ้าคุณต้องการแก้ไขหลายบรรทัดที่ท้ายบรรทัดคุณต้องกดปุ่ม "สิ้นสุด" ในขณะที่การเลือกแบบหลายบรรทัดของคุณทำงานอยู่

สำหรับลำดับคำสั่งของ Mac จะเป็น:

shift option click # เลือกชุดของเส้น

command right arrow # ไปที่ท้ายบรรทัด

การดำเนินการนี้จะเลือกหลายบรรทัดที่ท้ายบรรทัดและคุณสามารถแก้ไขได้ตามต้องการ


0

ตั้งแต่WebStorm 2020.2คุณสามารถใช้AltShiftGเพื่อเพิ่มคาเร็ตที่ส่วนท้ายของแต่ละบรรทัดที่เลือก

การดำเนินการใหม่สำหรับการทำงานกับคาเร็ตหลายตัว (Alt + Shift + G) ช่วยให้คุณวางคาเร็ตที่ส่วนท้ายของแต่ละบรรทัดที่เลือกได้อย่างรวดเร็วและลบส่วนที่เลือกออกทันทีที่เพิ่มคาเร็ตทั้งหมด

มีอะไรใหม่ใน WebStorm 2020.2.2

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


0

คุณสามารถตั้งค่าคาเร็ตได้หลายตัวจากเครื่องมือค้นหาและแทนที่

  1. Ctrl + R เพื่อเปิดเครื่องมือค้นหาและแทนที่
  2. เขียนอักขระหรือคำที่ระบุจุดเริ่มต้นของการเกิดซ้ำแต่ละครั้งเพื่อแก้ไข
  3. คลิกที่ 'เลือกเหตุการณ์ทั้งหมด' ในเครื่องมือค้นหาและแทนที่ IntelliJ จะใส่เครื่องหมายคาเร็ตสำหรับแต่ละครั้งที่เกิดขึ้น

ใช้ชีวิตอย่างมหัศจรรย์

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