ตัวอย่าง: หากฉันมีเอกสารที่มีการเว้นวรรค 2 ช่องและฉันต้องการให้มีการเว้นวรรค 4 ช่องฉันจะแปลงโดยอัตโนมัติอย่างไรโดยใช้โปรแกรมแก้ไขข้อความ Sublime?
ตัวอย่าง: หากฉันมีเอกสารที่มีการเว้นวรรค 2 ช่องและฉันต้องการให้มีการเว้นวรรค 4 ช่องฉันจะแปลงโดยอัตโนมัติอย่างไรโดยใช้โปรแกรมแก้ไขข้อความ Sublime?
คำตอบ:
นี่คือเคล็ดลับเรียบร้อยใน 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
เสร็จสิ้น
จริง ๆ แล้วฉันพบว่ามันดีกว่าที่สติของฉันจะมีความต้องการของผู้ใช้ที่จะกำหนดเช่น:
"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],
ฉันพบว่าในใจของฉันทางออกที่ง่ายกว่า 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 แต่ก็เร็วกว่า (สำหรับฉันอย่างน้อย)
RubyFormat
คุณสามารถกำหนดขนาดแท็บที่ต้องการจากนั้นทำการฟอร์แมตโค้ดใหม่ ในกรณีที่มันจะเป็นRubyFormat
cmd+shift+R
ในขณะที่ข้อเสนอแนะจำนวนมากทำงานเมื่อแปลงพื้นที่ 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" }
]
หากคุณค้นหาการค้นหาและแทนที่การใช้ที่เร็วกว่าคุณสามารถใช้การแทนที่ regex ดังนี้
ค้นหา (regex): (^|\G) {2}
(แทนที่จะเป็น"{2}" <space>{2}
คุณสามารถเขียนช่องว่างสองช่องใช้ที่นี่เพื่อความชัดเจน)
แทนที่ด้วย 4 \t
ช่องว่างหรือสิ่งที่คุณต้องการเช่น
ฉันเขียนปลั๊กอินสำหรับมัน คุณสามารถค้นหาได้ที่นี่หรือมองหา "ReIndent" ในการควบคุมบรรจุภัณฑ์ ส่วนใหญ่ทำสิ่งเดียวกันกับที่ Kyle Finley เขียน แต่สะดวกในการใช้ทางลัดสำหรับการแปลงระหว่าง 2 และ 4 และในทางกลับกัน
คุณต้องเพิ่มรหัสนี้ในการผูกคีย์ที่กำหนดเองของคุณ:
{ "keys": ["ctrl+f12"], "command": "set_setting", "args": {"setting": "tab_size", "value": 4} }
โดยการกด ctrl + f12 มันจะนำไฟล์ของคุณกลับไปเป็นขนาดแท็บที่ 4 หากคุณต้องการขนาดแท็บที่แตกต่างกันคุณเพียงแค่เปลี่ยนหมายเลข "ค่า" รูปแบบ Te เป็น json อย่างง่าย
{ "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} },
สิ่งที่ง่ายที่สุดที่ฉันทำคือ
เปลี่ยนการเยื้องของฉันเป็นแท็บ
และมันแก้ไขปัญหาของฉัน
คุณสามารถทำเช่นเดียวกัน
เพื่อ Spaces
เช่นเดียวกับความต้องการของคุณ
กล่าวถึงภาพรวมของเดียวกัน
เมื่อเร็ว ๆ นี้ฉันประสบปัญหาที่คล้ายกัน ฉันใช้โปรแกรมแก้ไขประเสริฐ มันไม่ใช่ปัญหาของรหัส แต่กับตัวแก้ไข
การเปลี่ยนแปลงด้านล่างในการตั้งค่าการทำงานสำหรับฉัน
เมนู Sublime Text -> Preferences -> Settings: เฉพาะไวยากรณ์ :
{
"tab_size": 4,
"translate_tabs_to_spaces": true
}