Xcode ซ้ำบรรทัด


128

มีเป็นDuplicateคำสั่งในเมนูแก้ไข (ที่มีทางลัดเริ่มต้นD) แต่มันก็เป็น (ตามที่ฮัลเลย์ชี้ให้เห็น) ความหมายสำหรับการทำซ้ำในส่วน Interface Builder ของ Xcode

ดังนั้นคุณจะทำอย่างไร ( ง่าย ) ซ้ำบรรทัดใน Xcode 4 หรือไม่?


คำถามที่เกี่ยวข้อง (พร้อมคำตอบที่ใช้งานได้) สำหรับ Xcode 3 ... และใช้ไม่ได้กับ Xcode 4


ทำไมไม่แค่คัดลอกและวาง

เนื่องจากมันน่าเบื่อและทำให้เกิดการแสดงผาดโผนด้วยมือมากเกินไป:

อย่างใดอย่างหนึ่ง(1) : การย้ายไปยังจุดเริ่มต้นสายแล้วกด⇧^Eจากนั้นคัดลอกที่มี⌘Cการเคลื่อนย้ายไปยังบรรทัดใหม่ alligning เคอร์เซอร์และในที่สุดก็วางกับ⌘V;

หรือ(2) : ^A(ตั้งค่าเคอร์เซอร์เป็นบรรทัดเริ่มต้น), ^SPACE(กำหนดเครื่องหมาย), ^E(ตั้งค่าเคอร์เซอร์เป็นสิ้นสุดบรรทัด), ⇧^W( Select to Markกำหนดเอง), คัดลอก, ขึ้นบรรทัดใหม่ ฯลฯ

ดังที่ Frank Schröder (ในคำถามที่เกี่ยวข้อง ) กล่าวไว้ว่า:

จุดรวมคือห้ามใช้ทางลัด Cmd-C / Cmd-V


1
เลือกบรรทัดและคัดลอกวาง?
Dani

1
@Dani, CP เป็นงานที่มากเกินไป (และการทำสำเนาบรรทัดไม่ใช่สิ่งที่จำเป็นต้องเกิดขึ้นเพียงเล็กน้อยเท่านั้น) :) ฉันอัปเดตคำถามแล้ว
Blaz

1
Command-D ใช้สำหรับการควบคุมการทำสำเนาใน Interface Builder
Hailei

@ ฮัลเล่ย์นี่น่ารู้ และเทียบเท่ากับ⌥-mouse-drag (ซึ่งคัดลอกองค์ประกอบอินเทอร์เฟซด้วย) หรือไม่?
Blaz

@courteous ฉันคิดอย่างนั้น ส่วน Modifier Keys ในdisanji.net/iOS_Doc/#documentation/DeveloperTools/Conceptual/…ระบุว่า "การกดปุ่ม Option ระหว่างการลากแล้วปล่อยจะคัดลอกวัตถุที่เลือกแทนที่จะย้าย"
Hailei

คำตอบ:


173
  1. ไปที่โฟลเดอร์นี้ซึ่งมีด้านมืดของแรง:

    • Xcode 4.2 หรือก่อนหน้า: /Developer/Library/PrivateFrameworks/IDEKit.framework/Resources
    • Xcode 4.3 หรือใหม่กว่า: /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources.
  2. IDETextKeyBindingSet.plistเปิด

  3. เพิ่มพจนานุกรมใหม่และรายการคำสั่งใหม่เป็นภาพหน้าจอด้านล่าง (ตั้งชื่อตามที่คุณต้องการ): การแก้ไข plist

    ว่า: selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:

  4. รีสตาร์ท Xcode และไปที่ Preferences - Key Bindings ค้นหาคำสั่งของคุณ

  5. ตั้งค่าคีย์ผสมสำหรับคำสั่ง: การเชื่อมโยงที่สำคัญ

  6. ในที่สุดก็ปลดปล่อยพลังของการผูกคีย์บน Xcode ... สนุกกับมัน!


3
@MichalStefanow ตำแหน่งที่คุณเขียนนั้นเป็นตำแหน่งเดียวกับที่/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resourcesนามแฝงชี้ไป มิฉะนั้นฉันทำตามขั้นตอนของ Halley ในเวอร์ชัน 4.3.2 สำเร็จแล้ว ... ฉันขอแนะนำให้คุณสำรองไฟล์ต้นฉบับแล้วเปิดใน Xcode เอง (ไม่ใช่ใน TextEdit) นอกจากนี้เกี่ยวกับสิทธิ์การอนุญาต: การเปลี่ยน (สำหรับไฟล์เท่านั้นไม่จำเป็นต้องเรียกซ้ำ) ใน Finder ก็ใช้ได้ดี
Blaz

29
ขอบคุณมาก! สำหรับผู้ใช้ที่ขี้เกียจ - selectLine :, copy :, moveToEndOfLine :, insertNewline: วาง: DeleteBackward:
Vlad Tsepelev

15
หาก xCode ของคุณขัดข้อง! ปิด xCode เปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความและเพิ่มพจนานุกรมของคุณ: <key>Custom</key> <dict> <key>Duplicate Current Line</key> <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string> </dict>
Vlad Tsepelev

2
ใช้ได้กับฉันใน XCode 4.4.1! มีปัญหาในการเปลี่ยนสิทธิ์ (ตัวค้นหาหรือ chmod 777 และเริ่มต้นด้วย sudo จากเทอร์มินัลไม่ทำงานด้วยเหตุผลบางประการ) ฉันคัดลอกไฟล์ไปที่อื่นแก้ไขและเขียนทับไฟล์ต้นฉบับที่ใช้งานได้
Ixx

2
ฉันเป็นนักพัฒนาแอนดรอยด์และเมื่อฉันเริ่มลองใช้ ios dev ฉันก็รู้ว่า android studio (หรือไอเดีย intellij) นั้นดีอย่างไร
IlyaEremin

92

อัปเดตปี 2020

ใช้งานได้กับเวอร์ชัน Xcode: 11.3.1 ด้วย

ทำงานในเวอร์ชัน Xcode: 7.1, 7.3, 7.3.1, 8.0, 8.1, 8.2, 8.3, 9.0, 9.1, 9.2, 10.0, 10.1, 10.2.1

คำแนะนำ

  1. ให้สิทธิ์ในการแก้ไขไฟล์ต่อไปนี้ ระบบปฏิบัติการส่วนใหญ่จะไม่อนุญาตให้คุณแก้ไขไฟล์

สำหรับเวอร์ชัน 11.3.1

sudo chmod 666 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources//IDETextKeyBindingSet.plist

sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/

ต่ำกว่า 11.3 เวอร์ชัน


sudo chmod 666 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist

sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/
  1. แก้ไขไฟล์โดยเขียนคำสั่งต่อไปนี้: (เปิดใน sublime หรือ text editor ถ้าทำได้)

สำหรับ 11.3.1

open  

/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/

สำหรับเวอร์ชันด้านล่าง

open /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
  1. ต่อท้ายส่วนย่อย xml ต่อไปนี้:
<key>custom</key>
<dict>
    <key>Duplicate Current Line</key>
    <string>moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, moveToBeginningOfLine:, yank:</string>
    <key>Duplicate Lines</key>
    <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>
    <key>Delete Line</key>
    <string>selectLine:, deleteBackward:</string>
</dict>

ภาพหน้าจอ

ใส่คำอธิบายภาพที่นี่

และรีสตาร์ท Xcode แล้วไปที่Preferences - Key Bindingsค้นหาคำสั่งที่เราพิมพ์ (Duplicate Lines & Duplicate Current Line)

ใส่คำอธิบายภาพที่นี่

แค่นั้นแหละ.

สำหรับผู้ที่ใช้ยูนิกซ์โปรดทราบ: -

sudo chmod 755 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/ 

ใช้งานได้เหมือนมีเสน่ห์! ฉันแก้ไขIDETextKeyBindingSet.plistและเพิ่มพจนานุกรมข้างต้นจากนั้นแมปคีย์ในการตั้งค่าของ XCode
Randika Vishman

3
นี่คือคำตอบที่น่าเบื่อที่ผู้ใช้ Mac ต้องการ!
Luca Davanzo

1
สำหรับ XCode 10.1 ผมต้องใช้สตริงต่อไปนี้: moveToBeginningOfLine :, deleteToEndOfLine :, งัด :, insertNewline :, setMark :, moveToBeginningOfLine :, selectToMark :, งัด: ขอบคุณมากที่ @tmsimont
marcelosalloum

1
นี่คือสิ่งแรกที่ Google อัปเดต Xcode ได้ตลอดเวลา
newDeveloper

1
วิธีนี้ใช้ได้ผลกับฉันมากกว่าคำตอบที่ยอมรับ
khalid

18

ตกลงฉันได้มากับสิ่งนี้:

เวอร์ชันสำหรับ XCode 11:

selectParagraph:, delete:, undo:, moveRight:, yankAndSelect:
  • ไม่สัมผัสคลิปบอร์ด
  • ใช้งานได้กับหลายบรรทัด
  • เลือกบรรทัดที่เพิ่มดังนั้นจึงสามารถใช้ได้หลายครั้งโดยไม่ต้องเลือกใหม่
  • การเลือกคงที่ใน XCode 11
  • ทำงานได้ดีขึ้นเมื่อเลิกทำ

เนื่องจากฉันใช้การเปลี่ยนแปลงนี้หลังจากการอัปเดต XCode ทุกครั้งฉันจึงได้สร้างสคริปต์สำหรับสิ่งนั้น อาจทำให้เกิดความเสียหายได้บ้าง แต่ฉันพยายามทำให้ปลอดภัยแล้ว มันสร้างสำเนาของไฟล์จากนั้นแทนที่บรรทัดด้วยสำเนาและคำสั่งเพิ่มเติมโดยใช้ perl ต้องติดตั้ง XCode ที่/Applications/Xcode.app

cp /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist ~/Desktop/IDETextKeyBindingSet.plist; sudo perl -pi -e 's/\<string\>selectWord:\<\/string>/'$'\<string\>selectWord:\<\/string\>\n\t\t\<key\>Duplicate Selection\<\/key\>\n\t\t\<string\>selectParagraph:, delete:, undo:, moveRight:, yankAndSelect:\<\/string>/g' /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist

เวอร์ชันเก่ากว่า (ฉันไม่แน่ใจว่าเวอร์ชันใหม่เข้ากันได้กับเวอร์ชันเก่าหรือไม่ฉันจะเก็บไว้ที่นี่):

selectParagraph:, delete:, yank:, moveToBeginningOfLine:, setMark:, yank:, moveToBeginningOfLine:, moveLeft:, selectToMark:

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

cp /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist ~/Desktop/IDETextKeyBindingSet.plist; sudo perl -pi -e 's/\<string\>selectWord:\<\/string>/'$'\<string\>selectWord:\<\/string\>\n\t\t\<key\>Duplicate Selection\<\/key\>\n\t\t\<string\>selectParagraph:, delete:, yank:, moveToBeginningOfLine:, setMark:, yank:, moveToBeginningOfLine:, moveLeft:, selectToMark:\<\/string>/g' /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist

แก้ไข: แก้ไขเล็กน้อยแก้ไขแก้ไข 2: เปลี่ยนเป็นการเลือกย่อหน้า edit3: เพิ่มเวอร์ชันสำหรับ XCode 11


ขอบคุณจริงๆสำหรับสิ่งนี้กำลังมองหาชุดค่าผสมนี้ สิ่งนี้สามารถทำซ้ำบรรทัดเดียวหรือหลายบรรทัดโดยไม่ต้องเพิ่ม newLines ที่ไม่ต้องการและ ctrl-z ก็ทำงานได้ดี
mkeremkeskin

ขอบคุณนั่นคือสิ่งที่ใกล้เคียงที่สุดกับพฤติกรรม IntelliJ IMHO
OxyFlax

17

วันนี้ฉันเขียนปลั๊กอินขนาดเล็กมากสำหรับ Xcode 5 ที่ลบและทำซ้ำบรรทัดและการเลือก

คุณสามารถดาวน์โหลดได้จาก repo GitHub ของฉัน: XcodeKit Plugin - https://github.com/ptfly/XcodeKit


ฉันเพิ่งดาวน์โหลดและติดตั้งสิ่งนี้ - คุณสามารถใช้การตั้งค่าระบบเพื่อตั้งค่าแป้นพิมพ์ลัดสำหรับคำสั่งได้เช่นกัน ดีมาก!
Orion Edwards

ทางออกที่ดีที่สุดคือเพราะอันนี้จะไม่ทำลายคลิปบอร์ดปัจจุบันของคุณ ในการเพิ่มการเชื่อมโยงแป้นพิมพ์: การตั้งค่าระบบ -> แป้นพิมพ์ -> ทางลัด -> ทางลัดแอป -> '+' เลือก Xcode และชื่อเมนูเช่น 'Delete Selection / Line'
Sjoerd Perfors

ฉันเพิ่งติดตั้งสิ่งนี้ น่ากลัวด้วยเหตุผลบางประการเมนู "ซ้ำ" ของฉันภายใต้การแก้ไขจะเป็นสีเทา แม้ว่าฉันจะเลือกบรรทัดในตัวแก้ไขเคอร์เซอร์และลองเลือกทั้งบรรทัดแล้ว
John Ballinger

นี่มันเจ๋งกว่า ขอบคุณ!
0x6A75616E

มันไม่ได้ผลสำหรับฉัน "ซ้ำ" เป็นสีเทาและแป้นพิมพ์ลัดจะไม่ทำงานด้วย
SquareBox

13

คำตอบของ @ Hailei ค่อนข้างดี แต่มีผลข้างเคียงที่โชคร้ายจากการอุดตันเนื้อหาคลิปบอร์ด (ปล่อยให้มันเต็มไปด้วยเนื้อหาของบรรทัดที่ซ้ำกัน) ซึ่งเป็นส่วนหนึ่งของวิธีการคัดลอก / วางด้วยตนเองที่ฉันพยายามหลีกเลี่ยง .

ดังนั้นฉันจึงเปลี่ยนลำดับคำสั่งเป็น:

moveToBeginningOfLine:,
deleteToEndOfLine:,
yank:,
insertNewline:,
moveToBeginningOfLine:,
yank:

2 yank:วินาทีอาจไม่ทำงานตามที่ตั้งใจไว้หากคุณNSTextKillRingSizeตั้งค่าเป็นบางอย่างนอกเหนือจาก1นี้ แต่ฉันค่อนข้างแน่ใจว่า1เป็นค่าเริ่มต้นและคุณต้องทำงานที่ไม่สำคัญบางอย่างเพื่อเปลี่ยนแปลง (ต้องเพิ่มรายการใน~/Library/Preferences/.GlobalPreferences.plist)


ฉันขอแนะนำให้ใช้คำสั่งdefaults write -g NSTextKillRingSize 1แทนการเล่นกับ GlobalPreferences.plist ;)
dbernard

@amas เป็นไปได้ว่าคุณต้องคัดลอกไฟล์ที่อื่นก่อนที่จะแก้ไขจากนั้นจึงเขียนทับไฟล์ต้นฉบับเว้นแต่ว่าคุณต้องการเสี่ยงต่อการเปลี่ยนแปลงสิทธิ์ในโฟลเดอร์หลัก
nipponese

เกือบจะใช้งานได้ แต่ด้วยเหตุผลบางประการช่องว่างจำนวนมากจึงถูกเพิ่มไปที่ท้ายบรรทัดที่ซ้ำกัน .. มีความคิดว่าทำไม?
tmsimont

5
หากแก้ไขด้วยการปรับเปลี่ยนนี้:moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, setMark:, moveToBeginningOfLine:, selectToMark:, yank:
tmsimont

นี่ควรเป็นคำตอบที่แนะนำ (ทำตามคำแนะนำของ @ Hailei) ขอบคุณ!
brkeyal

9

ทำไมต้องทำซ้ำบรรทัดเดียว ทำซ้ำทั้งย่อหน้าจะดีกว่า ลำดับของฉัน:

ย่อหน้าปัจจุบันซ้ำ

selectParagraph:,
delete:,
yank:,
moveToBeginningOfParagraph:,
yank:,
moveUp:,
moveToEndOfParagraph:

ลบย่อหน้าปัจจุบัน

selectParagraph:,
delete:,
moveUp:,
moveToEndOfParagraph:

ทำงานได้ดีใน Xcode 4.6


ตกลงการจัดการย่อหน้าจะดีกว่าบรรทัด ทุกคนทำให้ตัวแก้ไขของคุณแคบพอที่จะตัดข้อความและพยายามใช้คำสั่งบรรทัด
Logan Moseley

หน้าต่างของคุณมีขนาดเล็กเพียงใดที่โค้ดของคุณถูกตัดออก ลองแบ่งรหัสของคุณออกเป็นเส้นเล็ก ๆ หากเกิดขึ้นบ่อยครั้ง
ดับ

9

ฉันสงสัยว่าทำไมไม่มีใครพูดถึงใช้ร่วมกับปุ่มลูกศร ( ) เพื่อเลื่อนเคอร์เซอร์และเลือกทั้งบรรทัด (โดยเพิ่ม )

ฉันคัดลอกทั้งบรรทัดเป็นประจำ (ซ้ำกัน) โดยเลื่อนเคอร์เซอร์ไปที่จุดเริ่มต้นของบรรทัดโดยใช้+ (แทนctrl+ A) จากนั้นใช้+ + (แทนctrl+ +E ) เพื่อเลือกทั้งบรรทัดจนสุดแล้วคัดลอก / วาง

ฉันพบหัวข้ออื่นที่ดูเหมือนว่าไม่มีใครใช้แป้นพิมพ์ลัดเหล่านี้ พวกเขาเป็นสากลใน OS X และฉันใช้มันตลอดเวลา! กายกรรมด้วยมือน้อยกว่ามาก;)


สิ่งนี้ต้องการ "การแสดงกายกรรมด้วยมือ" มากกว่าการทำซ้ำด้วยการกระทำ / คีย์ผสมเพียง 1 รายการ ... เป็นวิธีที่ฉันทำซ้ำข้อความในโปรแกรมแก้ไขข้อความหรือเว็บเบราว์เซอร์ใช่ แต่ฉันคาดหวังมากกว่านี้เล็กน้อยจาก IDE
Ixx

1
และด้วยทางลัดบรรทัดที่ซ้ำกันคุณจะไม่เขียนทับเนื้อหาของคลิปบอร์ด หลายครั้งที่คุณคัดลอกบางสิ่งบางอย่างทำซ้ำรหัสและต้องการวาง - ด้วยวิธีการของคุณคุณต้องคัดลอกอีกครั้ง
Ixx

ใช่ แต่น้อยกว่าวิธีที่ OP. ฉันยอมรับว่าคำสั่งเดียวจะดีที่สุด ฉันแค่คิดว่าฉันจะชี้ให้เห็นทางเลือก
Baldur

1
ยังดีกว่าไม่มีอะไรนอกกรอบ ฉันหวังว่า cmd + C / X ที่ไม่มีการเลือกจะคัดลอก / ตัดทั้งบรรทัดเหมือนที่บรรณาธิการอื่น ๆ ทำ ...
manroe

@ บัลดูร์นี่คือสิ่งที่ฉันทำเช่นกัน cmd + left cmd + shift + right cmd + c cmd + right ใส่ cmd + left cmd + p ด้วยการกดแป้นพิมพ์ 7 ครั้งสามารถทำได้อย่างง่ายดายภายในเวลาไม่ถึง 3 วินาทีอย่างไรก็ตามมันยังค่อนข้างน่าเบื่อเมื่อเทียบกับ ctrl + d เช่นในโปรแกรมแก้ไขข้อความจำนวนมาก โชคไม่ดีที่สิ่งนี้ไม่ได้สร้างขึ้นใน xcode หรือในซอฟต์แวร์ macs และ apple ทั่วไปไม่มีปุ่มลัดที่ดีกว่า
csga5000

9

แก้ไข: 12 ก.ค. 2020 หลังจากอัปเดตเป็น Xcode 11.5 อีกครั้งduplicate lineรายการคีย์ของฉันจากplistไฟล์หายไป ฉันต้องเพิ่มอีกครั้ง การผูกคีย์ยังคงอยู่ที่นั่น

แก้ไข: 17 ก.ย. 2019 หลังจากอัปเดตเป็น Xcode 10.3 อีกครั้งduplicate lineรายการคีย์ของฉันจากplistไฟล์หายไป ฉันต้องเพิ่มอีกครั้ง การผูกคีย์ยังคงอยู่ที่นั่น

แก้ไข: 28 พฤษภาคม 2019 หลังจากอัปเดตเป็น Xcode 10.2 อีกครั้งduplicate lineรายการคีย์ของฉันจากplistไฟล์หายไป ฉันต้องเพิ่มอีกครั้ง การผูกคีย์ยังคงอยู่ที่นั่น

แก้ไข: 23 ธ.ค. 2018 หลังจากอัปเดตเป็น Xcode 10.1 ทางลัดทั้งหมดของฉันก็พังอีกครั้ง แต่สิ่งที่แตกต่างคือหลังจากอัปเดตไฟล์ plist สำหรับการทำซ้ำบรรทัดฉันไม่ต้องกำหนดการผูกคีย์ของฉันพวกมันอยู่ที่นั่นแล้ว แปลก.

แก้ไข: 14 ตุลาคม 2018 Xcode 10: มีบางคนที่ Apple ชอบคัดลอก / วางและตรวจสอบให้แน่ใจว่าด้วยการอัปเดต Xcode ทุกเวอร์ชันการทำซ้ำบรรทัดจะถูกลบออกจากการติดตั้งของทุกคน นักพัฒนาของเรารู้สึกผิดหวังอย่างมากกับเรื่องไร้สาระที่เกิดขึ้นใน Xcode นับตั้งแต่นั้นเป็นต้นมา IDE เดียวที่ไม่มีตัวเลือกการทำซ้ำบรรทัด ฉันเพิ่งอัปเดตเป็น Xcode 10 และตามที่คุณเดาไว้ - ปุ่มลัดทั้งหมดของฉันจะถูกลบออกพร้อมกับฟังก์ชันการทำสำเนาบรรทัดของฉัน อย่างไรก็ตามสามารถแก้ไขได้เหมือนในคำตอบเดิม ความแตกต่างเล็กน้อยในครั้งนี้คือคุณจะต้องมีบรรทัดต่อไปนี้:

<key>Duplicate Current Line</key>
<string>selectLine:, copy:, moveToBeginningOfLine:, paste:, moveToEndOfLine:</string>

แก้ไข: Xcode 9: ฉันต้องทำทางลัดซ้ำและการทำซ้ำและการลบบรรทัด แต่สิ่งที่ดีคือตอนนี้คุณสามารถแก้ไข IDETextKeyBindingSet.plist ได้อีกครั้ง หนุ่มแอปเปิ้ลตัวสูงคนนี้ต้องพักร้อนเมื่อพวกเขาเปิดตัวเวอร์ชันนี้

แก้ไข: Xcode 8: Buggy คุณไม่สามารถแก้ไขไฟล์ IDETextKeyBindingSet.plist ได้เลย Xcode รีเซ็ตเมื่อเริ่มต้น ผู้ชายตัวสูงที่ Apple คนนี้ตั้งใจจริงที่จะทำให้เราใช้การคัดลอก / วางแทนการทำสำเนาบรรทัดง่ายๆเหมือนใน IDE อื่น ๆ ทั้งหมดที่นั่น

แก้ไข: Xcode 7.1 และยังไม่มีทางลัดสำหรับการทำซ้ำและการลบบรรทัด นี่เป็น IDE เดียวที่ฉันเคยทำงานโดยไม่มีทางลัดเช่นนี้ และฉันไม่สามารถจินตนาการถึงชีวิตของนักพัฒนาที่ไม่มีทางลัดที่สำคัญทั้งสองนี้

นี่คือวิธีการ:

ก่อนอื่นเราต้องแก้ไขไฟล์ plist ที่อยู่ในชุด Xcode.app (ต้องการ sudo เพื่อแก้ไข)

/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist

จากนั้นมองหา<key>Insertions and Indentations</key>และใต้<dict>แท็กเพิ่มสิ่งต่อไปนี้:

<key>Insert New Line Below</key>
<string>moveToEndOfLine:, insertNewline:</string>
<key>Insert New Line Above</key>
<string>moveUp:, moveToEndOfLine:, insertNewline:</string>
<key>Duplicate Current Line</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>

จากนั้นค้นหาสิ่งเหล่านี้ภายในส่วน<key>Deletions</key>ใต้<dict>แท็ก:

<key>Delete Current Line</key>
<string>selectLine:, delete:</string>
<string>selectLine:, delete:</string>

ใส่คำอธิบายภาพที่นี่

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

ใส่คำอธิบายภาพที่นี่


3

ฉันจะพิจารณาแก้ไขลำดับคำสั่งเป็น:

selectLine:,
copy:,
moveToEndOfLine:,
insertNewline:,
deleteToBeginningOfLine:,
paste:,
moveToBeginningOfLine:, 
deleteBackward:

การเพิ่มจะdeleteToBeginningOfLineรักษาการเยื้องของบรรทัดที่ซ้ำกัน


สิ่งนี้ได้ผลดีเมื่อฉันรู้ว่าฉันต้องเปลี่ยนบรรทัดใหม่ (ดูดี) ด้วยช่องว่างหลังเครื่องหมายจุลภาค
McUsr

2

insertLineBreak จำเป็นอย่างน้อยสำหรับฉันที่จะทำสำเนาในบรรทัดใหม่โดยที่ฉันไม่ได้สำเนาในบรรทัดเดียวกัน


2

ฉันมีปัญหาใหญ่ในการปลดล็อกไฟล์. plist บน MacOS Sierra และ Xcode 9 แม้แต่การตัดสินใจของ @Tim ก็ไม่ได้ผลสำหรับฉัน หากคุณมีปัญหาเดียวกันให้ไปที่เทอร์มินัลแล้วทำสิ่งนี้:

cd /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/
sudo chmod -R 777 *
nano IDETextKeyBindingSet.plist

ไม่กี่วิธีที่เป็นไปได้อื่น ๆ ที่จะทำเช่นนี้จะอธิบายยังที่นี่

จากนั้นใน nano editor ให้คลิก^Wและพิมพ์ 'insertions' เพื่อข้ามไปยังส่วน 'Insertions and Indentations' ภายใต้<dict>แท็กให้วางข้อมูลโค้ด xml นี้:

<key>Duplicate line</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewLine:, paste:, deleteBackward:</string>

กดcontrol + XจากYนั้นEnterเพื่อบันทึกไฟล์ในตัวแก้ไขนาโน

UPD: ฉันตัดสินใจได้ดีขึ้นซึ่งจะเพิ่มบรรทัดเพิ่มเติมก่อนที่จะทำซ้ำ (มีประโยชน์เมื่อคุณต้องการทำซ้ำบรรทัดที่มีบรรทัดอื่นอยู่ด้านล่าง):

<key>Duplicate line</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertLineBreak:, moveUp:, paste:, moveToBeginningOfLine:</string>

1

นี่คือรายการ Delete ( CTRL+ D) และ Duplicate ( CMD+ SHIFT+ D) ของฉันจาก IDETextKeyBindingSet.plist (ใน /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources)

ฉันเพิ่งตั้งค่าสิ่งเหล่านี้ใน Xcode 4.6.1 (อ้างอิงจากคำตอบจาก user570753 ด้านบนและที่อื่น ๆ )

    <key>Custimozed</key>
<dict>
    <key>Delete Current Line</key>
    <string>deleteToBeginningOfLine:, moveToEndOfLine:, deleteToBeginningOfLine:, deleteBackward:, moveDown:, moveToBeginningOfLine:</string>
    <key>Duplicate Current Line</key>
    <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, deleteToBeginningOfLine:, paste:, moveToBeginningOfLine:, deleteBackward:</string>
</dict>

0

ผู้ใช้ Sublime text ที่ต้องการจับคู่ sublime's duplicateLineUpและduplicateLineDownใน XCode โปรดเพิ่มสิ่งต่อไปนี้ในไฟล์IDETextKeyBindingSet.plistของคุณ

<key>Line Duplications</key>
<dict>
    <key>Duplicate Current Line Above</key>
    <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:, moveUp:</string>
    <key>Duplicate Current Line Below</key>
    <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>
</dict>

0

ในกรณีที่บุคคลอื่นถูกปฏิเสธไม่ให้แก้ไข IDETextKeyBindingSet.plist คุณสามารถให้สิทธิ์ในการอ่าน / เขียนด้วยตัวคุณเองโดย:

sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist

0

เพื่อเติมเต็มคำตอบของ Hailei คำสั่งที่ได้ผลดีที่สุดสำหรับฉันคือ:

selectLine:, copy:, moveRight:, moveLeft:, insertNewline:, paste:, deleteBackward:

คำสั่งที่แนะนำของเขากำลังคัดลอกบรรทัดที่ต้องการสองบรรทัดด้านล่างสำหรับฉัน


0
<key>Duplicate Lines</key>    
<string>selectLine:, copy:, moveToBeginningOfLine:, paste:</string>

รองรับบรรทัดที่ซ้ำกัน (ใช้งานได้ใน Xcode 9.2)


0

สำหรับ Xcode 11 ไม่มีสิ่งใดที่ใช้ได้ผลสำหรับฉัน คำตอบแรกมีพฤติกรรมแปลก ๆ เนื่องจากกำลังแทรกบรรทัดหลังจากบรรทัดถัดไป อย่างไรก็ตามคำตอบต่อไปนี้ใช้ได้ผลสำหรับฉัน

<key>Duplication</key>
<dict>
    <key>Duplicate Current Line</key>
    <string>moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, moveToBeginningOfLine:, yank:</string>
    <key>Duplicate Lines</key>
    <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>
    <key>Delete Line</key>
    <string>selectLine:, deleteBackward:</string>
</dict>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.