วิธีแก้ไข / แปลงการเยื้องช่องว่างใน Sublime Text


228

ตัวอย่าง: หากฉันมีเอกสารที่มีการเว้นวรรค 2 ช่องและฉันต้องการให้มีการเว้นวรรค 4 ช่องฉันจะแปลงโดยอัตโนมัติอย่างไรโดยใช้โปรแกรมแก้ไขข้อความ Sublime?

คำตอบ:


525

นี่คือเคล็ดลับเรียบร้อยใน Sublime Text 2 หรือ 3 เพื่อแปลงระยะห่างของการเยื้องในเอกสาร

TL; DR:

การแปลงจาก 2 ช่องว่างเป็น 4 ช่องว่าง:

ตรวจสอบให้แน่ใจว่าตั้งค่าความกว้างของแท็บเป็น 2 แปลงการเยื้องพื้นที่ 2 ของคุณเป็นแท็บสลับเป็นความกว้างแท็บ 4 จากนั้นแปลงการเยื้องเป็นช่องว่าง

คำอธิบายรายละเอียด:

ไปที่:

View -> Indentation

คุณควรอ่าน:

  • Indent using spaces [x]
  • Tab width: 2

เลือก:

  • Convert Indentation to Tabs

จากนั้นเลือก:

  • Tab width: 4
  • Convert Indentation to Spaces

เสร็จสิ้น


5
ขอบคุณ! : D บันทึกมากเวลา บันทึก. นอกจากนี้คุณยังสามารถ "ค้นหา: space-space => select all => tab"
Automatico

11
ฉันสร้างมาโครสำหรับประเสริฐที่ไม่ทั้งหมดนี้สำหรับคุณgist.github.com/joshmfrankel/5707020 สนุก :-)
Josh Frankel

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

ฉันยังสร้างมาโครและตัวอย่างปุ่มลัดสำหรับสิ่งนี้สำหรับผู้ร่วมงานก่อนที่ฉันจะเห็นมาโครของจอช Mine ใช้ ctrl + 2 และ ctrl + 4 เพื่ออนุญาตการสลับไปมา: gist.github.com/beaugunderson/8588871
Beau

74

จริง ๆ แล้วฉันพบว่ามันดีกว่าที่สติของฉันจะมีความต้องการของผู้ใช้ที่จะกำหนดเช่น:

"translate_tabs_to_spaces": true,
"tab_size": 2,
"indent_to_bracket": true,
"detect_indentation": false

detect_indentation: falseเป็นสิ่งสำคัญโดยเฉพาะอย่างยิ่งในขณะที่มันบังคับ Sublime เพื่อเป็นเกียรติแก่การตั้งค่าเหล่านี้ในทุกไฟล์, เมื่อเทียบกับView -> Indentationการตั้งค่า

หากคุณต้องการจินตนาการคุณสามารถกำหนดแป้นพิมพ์ลัดเพื่อเยื้องรหัสของคุณ (YMMV) โดยอัตโนมัติอีกครั้งโดยวางสิ่งต่อไปนี้ในSublime -> Preferences -> Key Binding - User:

[
  { "keys": ["ctrl+i"], "command": "reindent" }
]

และเพื่อให้เห็นภาพของช่องว่าง:

"indent_guide_options": ["draw_active"],
"trim_trailing_white_space_on_save": true,
"ensure_newline_at_eof_on_save": true,
"draw_white_space": "all",
"rulers": [120],

9

ฉันพบว่าในใจของฉันทางออกที่ง่ายกว่า Magne:

บน mac:

"cmd+f" => "  "(two spaces) => "alt+enter" => "arrow right" => "  "(two more spaces) => set tab width to 4(this can be done before or after.

ใน windows หรือแพลตฟอร์มอื่น ๆ จะมีการเปลี่ยนแปลงcmd+fและalt+enterด้วยฮ็อตfindและselect allฮ็อตคีย์ของคุณ

หมายเหตุ: วิธีนี้มีแนวโน้มที่จะ "ผิดพลาด" ถ้าคุณมีมากกว่าหนึ่งช่องว่างในรหัสของคุณ มันปลอดภัยน้อยกว่าวิธีของ Magne แต่ก็เร็วกว่า (สำหรับฉันอย่างน้อย)


ฉันไม่สามารถทำงานนี้ได้ แต่ฉันใช้หลักการและเพิ่งค้นหาและแทนที่ (cmd-option-F บน Mac) และแทนที่ "" (4 ช่องว่าง) ด้วย "" (2 ช่องว่าง) และมันก็ใช้งานได้!
evanbikes

ฉันพบวิธีอื่นในการทำสิ่งนี้ในตอนนี้ แต่เป็นภาษาเฉพาะ หากคุณมีปลั๊กอินการจัดรูปแบบเช่นนี้RubyFormatคุณสามารถกำหนดขนาดแท็บที่ต้องการจากนั้นทำการฟอร์แมตโค้ดใหม่ ในกรณีที่มันจะเป็นRubyFormat cmd+shift+R
Automatico

7

ในขณะที่ข้อเสนอแนะจำนวนมากทำงานเมื่อแปลงพื้นที่ 2 -> 4 ฉันพบปัญหาบางอย่างเมื่อแปลง 4 -> 2

นี่คือสิ่งที่ฉันใช้:

Sublime Text 3/Packages/User/to-2.sublime-macro

[
  { "args": null, "command": "select_all" },
  { "args": { "set_translate_tabs": true }, "command": "unexpand_tabs" },
  { "args": { "setting": "tab_size", "value": 1 }, "command": "set_setting" },
  { "args": { "set_translate_tabs": true }, "command": "expand_tabs" },
  { "args": { "setting": "tab_size", "value": 2 }, "command": "set_setting" }
]

5

หากคุณค้นหาการค้นหาและแทนที่การใช้ที่เร็วกว่าคุณสามารถใช้การแทนที่ regex ดังนี้

ค้นหา (regex): (^|\G) {2}(แทนที่จะเป็น"{2}" <space>{2}คุณสามารถเขียนช่องว่างสองช่องใช้ที่นี่เพื่อความชัดเจน)

แทนที่ด้วย 4 \tช่องว่างหรือสิ่งที่คุณต้องการเช่น


5

ฉันเขียนปลั๊กอินสำหรับมัน คุณสามารถค้นหาได้ที่นี่หรือมองหา "ReIndent" ในการควบคุมบรรจุภัณฑ์ ส่วนใหญ่ทำสิ่งเดียวกันกับที่ Kyle Finley เขียน แต่สะดวกในการใช้ทางลัดสำหรับการแปลงระหว่าง 2 และ 4 และในทางกลับกัน


2

คุณต้องเพิ่มรหัสนี้ในการผูกคีย์ที่กำหนดเองของคุณ:

{ "keys": ["ctrl+f12"], "command": "set_setting", "args": {"setting": "tab_size", "value": 4} }

โดยการกด ctrl + f12 มันจะนำไฟล์ของคุณกลับไปเป็นขนาดแท็บที่ 4 หากคุณต้องการขนาดแท็บที่แตกต่างกันคุณเพียงแค่เปลี่ยนหมายเลข "ค่า" รูปแบบ Te เป็น json อย่างง่าย


ฉันชอบมันขอบคุณ! ฉันได้เพิ่ม 2 และ 4 เช่นนี้:{ "keys": ["ctrl+f10"], "command": "set_setting", "args": {"setting": "translate_tabs_to_spaces", "value": 2} }, { "keys": ["ctrl+f11"], "command": "set_setting", "args": {"setting": "tab_size", "value": 2} }, { "keys": ["ctrl+f12"], "command": "set_setting", "args": {"setting": "tab_size", "value": 4} },
JREAM

0

สิ่งที่ง่ายที่สุดที่ฉันทำคือ

เปลี่ยนการเยื้องของฉันเป็นแท็บ

และมันแก้ไขปัญหาของฉัน

คุณสามารถทำเช่นเดียวกัน

เพื่อ Spaces

เช่นเดียวกับความต้องการของคุณ

กล่าวถึงภาพรวมของเดียวกัน

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


ใช่ แต่คำถามจะถามถึงสถานการณ์เมื่อคุณทั้งคู่เริ่มต้นและจบด้วยการเยื้องเป็นช่องว่าง
Magne

0

เมื่อเร็ว ๆ นี้ฉันประสบปัญหาที่คล้ายกัน ฉันใช้โปรแกรมแก้ไขประเสริฐ มันไม่ใช่ปัญหาของรหัส แต่กับตัวแก้ไข

การเปลี่ยนแปลงด้านล่างในการตั้งค่าการทำงานสำหรับฉัน

เมนู Sublime Text -> Preferences -> Settings: เฉพาะไวยากรณ์ :

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