ใน Sublime Text 2 ฉันจะเยื้องออกไปยังคอลัมน์แบบตรงด้วยเคอร์เซอร์หลายตัวบนขอบที่ขรุขระได้อย่างไร


33

สมมติว่าฉันมีเคอร์เซอร์หลายตัวพร้อมหลายบรรทัดเช่นนี้

foo|
barr|
foobar|
baz|

ฉันจะผลักพื้นที่ว่างโดยอัตโนมัติในตอนท้ายของแต่ละบรรทัดออกมาเป็นขอบแบนได้อย่างไร:

foo    |
barr   |
foobar |
baz    |

(ในตัวอย่างเหล่านี้|ควรจะเป็นเคอร์เซอร์ของฉัน)

เมื่อคุณเพิ่งTabหรือSpaceจากข้อตกลงเริ่มต้นคุณจะได้รับสิ่งนี้:

foo    |
barr    |
foobar    |
baz    |

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


การแทรกแท็บหรือทำงานสองอย่างหรือไม่?
Darth Android

ไม่ แต่ฉันอาจจะไม่เข้าใจ ฉันแก้ไขเพื่อชี้แจงคำถามของฉัน
GladstoneKeep

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

มันเป็นเรื่องแปลก. การกดTabที่ส่วนท้ายของแต่ละบรรทัดเยื้องเคอร์เซอร์หลาย ๆ อันที่ขรุขระจะแทรกลงในคอลัมน์ตรง แต่ไม่สามารถทำเอฟเฟกต์แบบเดียวกันได้โดยใช้ regex ฉันค้นหาช่องว่างต่อท้าย: \s*$และแทนที่ด้วยอักขระแท็บ: \t- แต่\tไม่ได้ผลเหมือนกับการกดTabด้วยตนเอง
amiregelz

คำตอบ:


10

คุณสามารถใช้การจัดตำแหน่งย่อยของ wbond

อาจต้องการให้คุณเพิ่มสิ่งนี้ลงในไฟล์การตั้งค่าของคุณ (การตั้งค่า> การตั้งค่าแพ็คเกจ> การจัดตำแหน่ง> การตั้งค่า - ผู้ใช้:

// The mid-line characters to align in a multi-line selection, changing
// this to an empty array will disable mid-line alignment
"alignment_chars": ["=", "|"],
// If the following character is matched for alignment, insert a space
// before it in the final alignment
"alignment_space_chars": ["=", "|"]

แทนที่ "|" ด้วยตัวละครอะไรก็ตามที่คุณต้องการจัดตำแหน่ง

แก้ไข: ตามที่ค้นพบ mtoast การเพิ่ม"\n"ใน "alignment_chars" จะให้เอฟเฟกต์ที่ต้องการ การเพิ่มอักขระบรรทัดใหม่ใน "alignment_space_chars" อาจไม่จำเป็นและอาจลบข้อความ อย่างไรก็ตามด้วยการทดสอบที่ จำกัด ของฉันฉันไม่เห็นความแตกต่าง

กดค้างไว้controlและคลิกที่ส่วนท้ายของแต่ละบรรทัด จากนั้นกดปุ่มลัดการจัดตำแหน่ง (สำหรับ linux ค่าเริ่มต้นคือctrl+ alt+ a) คุณจะพบว่าเคอร์เซอร์อยู่เรียงกันกับตำแหน่งเคอร์เซอร์ที่อยู่ไกลที่สุด

แก้ไข 2: การเพิ่มบรรทัดใหม่เพื่อ"alignment_space_chars"จะลบข้อความหากคุณเน้นบล็อกข้อความและการจัดตำแหน่ง Sublime ไม่สามารถหาสิ่งอื่นเพื่อจัดแนวบนบรรทัด (เช่นเครื่องหมายเท่ากับ)

นอกจากนี้หากการจัดแนว Sublime ไม่สามารถหาสิ่งอื่นเพื่อจัดตำแหน่งเพิ่มขึ้นบรรทัดใหม่"alignment_chars"จะ pad จุดสิ้นสุดของบรรทัดที่มีช่องว่าง (หรือแท็บขึ้นอยู่กับการตั้งค่าของคุณ) เพื่อให้ตรงกับบรรทัดที่ยาวที่สุดเน้น


1
ว้าวเยี่ยมมาก! ฉันติดตั้งแพคเกจการจัดตำแหน่ง Sublime เพิ่ม"\n"(ขึ้นบรรทัดใหม่) ของฉัน"alignment_chars"และได้ผลลัพธ์ที่ต้องการ (หมายเหตุ: ฉันไม่ได้เพิ่มเข้าไป"alignment_space_chars"ซึ่งทำให้บรรทัดถูกลบ) หากคุณจะเพิ่มคำแนะนำเฉพาะนั้น ( "n") ในคำตอบของคุณฉันจะยอมรับ
GladstoneKeep

ดี! แพ็คเกจที่มีประโยชน์มากสำหรับผู้ที่ชอบความสมบูรณ์แบบอย่างฉัน :)
amiregelz

3
นอกจากนี้ยังมีแพ็คเกจที่คล้ายกัน: จัดแนวตารางซึ่งมีความยืดหยุ่นมากกว่าเล็กน้อย (คุณสามารถจัดแนวอักขระหลายตัวได้)
d_rail

ด้วย AlignTab ที่กล่าวถึงข้างต้นโดย d_rail อย่าลืมหลบหนี|โดยผู้ใช้เดี่ยว `\ '
ผู้ใช้

ฉันไม่อยากจะเชื่อเลยว่านี่จะไม่มีผู้โหวตมากขึ้น
ชาร์ลส์

44

คุณสามารถทำได้โดยไม่ต้องใช้แพ็คเกจภายนอกโดยใช้การแฮ็คเล็กน้อยด้วยความพยายามเพียงเล็กน้อยเท่านั้น นี่คือวิธี:

| แทนเคอร์เซอร์ในคำแนะนำเหล่านี้

  1. สร้างเคอร์เซอร์บนเส้นทั้งหมดที่ต้องการโดยใช้Ctrl+ คลิกหรือโดยการเลือกบล็อกข้อความและกดCtrl+ +Shift L( เอกสารการเลือก )

  2. เพิ่มช่องว่างเพิ่มเติมที่ส่วนท้ายของทุกคำจนกระทั่งเคอร์เซอร์ทุกอันอยู่ที่หรือผ่านจุดที่คุณต้องการคอลัมน์ของคุณ (ไม่สำคัญว่าไกลแค่ไหน):

    foo     |
    barr     |
    foobar     |
    baz     |
    
  3. ( ตัวเลือก1 ) พิมพ์ตัวอักษรตามด้วยเว้นวรรค; ลองใช้c:

    foo     c |
    barr     c |
    foobar     c |
    baz     c |
    
  4. กดHomeเพื่อทำให้เคอร์เซอร์ไปที่จุดเริ่มต้นของบรรทัด:

    |foo     c
    |barr     c
    |foobar     c
    |baz     c
    
  5. กด→ (right arrow) จนกระทั่งเคอร์เซอร์อยู่ในตำแหน่งที่คุณต้องการให้คอลัมน์ของคุณ:

    foo    | c
    barr   |  c
    foobar |    c
    baz    | c
    
  6. กดCtrl+ Shift+ เพื่อเลือกช่องว่างต่อไปนี้ทั้งหมดcแล้วกดDelete:

    foo    |
    barr   |
    foobar |
    baz    |
    
  7. ( ตัวเลือก1 ) กดDeleteอีกครั้งเพื่อล้างอักขระช่องว่างเพิ่มเติมที่เราเพิ่มในขั้นตอนเพิ่มเติม


1เราใช้cตัวอักษรตามด้วยช่องว่างเฉพาะในกรณีที่มีเนื้อหาเพิ่มเติมในบรรทัดที่เราต้องการเก็บไว้ หากไม่มีมันCtrl+ Shift+ จะเลือกคำแรกของเนื้อหาเพิ่มเติมในบรรทัดทำให้การลบนั้นยุ่งยาก


2
นี่ดูบิดเบี้ยวในตอนแรก แต่มันก็เป็นแฮ็คที่เรียบร้อย ดีสำหรับการวางคอลัมน์ด้วยการจัดตำแหน่งที่เหมาะสม คอลัมน์ถัดไปสามารถวางโดยใช้ text pastry plug-in
ผู้ใช้

1
ฉันได้รับการใช้เทคนิคนี้ในขณะที่แต่ต้องระวัง , ctrl+shift+rightไม่รักษาตัวอักษรทั้งหมดอย่างต่อเนื่องดังนั้นจึงอาจจบลงด้วยการเลือกมากกว่าพื้นที่สีขาวเพียง
SpareBytes

1
ฉันเห็นด้วยอย่างยิ่ง แต่ฉันเพิ่งลองโดยไม่มีตัวละครในตอนท้ายและใช้Shift-End Deleteและมันก็ใช้ได้ มันใช้งานได้ในบางกรณี แต่ไม่ใช่ในบางกรณี?
Septagram

นี่คือสิ่งที่ฉันทำอยู่เสมอ :)
Domino

วิธีนี้ใช้ไม่ได้หากcบรรทัดหนึ่งอยู่ก่อนหน้าคำอื่น ซึ่งเป็นปัญหาที่ฉันมีอยู่ในขณะนี้ บางบรรทัดไม่มีตัวอักษรมากพอที่จะเลื่อนไปทางขวาดังนั้นเมื่อคุณตัดไปที่บรรทัดถัดไปแล้วปล่อยให้แฮ็คนี้เป็นแบบนั้น นี่คือแฮ็กไม่ใช่การทดแทนที่มีประโยชน์ทั้งหมด
leetNightshade

0

สำหรับผู้ที่ต้องการเยื้องอักขระอื่นนอกเหนือจาก=และ|ฉันสามารถติดตั้งแพคเกจการจัดตำแหน่งและปรับเปลี่ยนไฟล์ในSublime Text > Preferences > Package Settings > Alignment > Settings - Userลักษณะดังนี้:

{
  "alignment_chars": [
    "{create",
   ]
}

ฉันเลือกรหัสต่อไปนี้แล้ว:

  let!(:admin_user) {create(:admin_user, :admin)}
  let!(:another_admin_user) {create(:admin_user, :admin)}
  let!(:superadmin_user1) {create(:admin_user, :superadmin)}
  let!(:superadmin_user2) {create(:admin_user, :superadmin)}
  let!(:nonadmin_user) {create(:admin_user)}

และกดCommand + Ctrl + Aเพื่อจัดแนว

  let!(:admin_user)        {create(:admin_user, :admin)}
  let!(:another_admin_user){create(:admin_user, :admin)}
  let!(:superadmin_user1)  {create(:admin_user, :superadmin)}
  let!(:superadmin_user2)  {create(:admin_user, :superadmin)}
  let!(:nonadmin_user)     {create(:admin_user)}

ทุกอย่างถูกย้ายไปยังคอลัมน์ซ้ายสุดที่{createข้อความสามารถครอบครองได้ในขณะที่ยังคงอยู่ในแนวเดียวกัน

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