ข้อความประเสริฐ 3 แปลงช่องว่างเป็นแท็บ


192

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

// แก้ไข:
ความปรารถนาของฉันคือการทำสิ่งนี้โดยอัตโนมัติ ! -> เปิดบันทึกหรือเดินทาง
ไม่มีใครรู้วิธีการทำ?


ฉันลองสิ่งนี้ :

import sublime, sublime_plugin, os

class ExpandTabsOnSave(sublime_plugin.EventListener):
  # Run ST's 'expand_tabs' command when saving a file
  def on_pre_save(self, view):
    if view.settings().get('expand_tabs_on_save') == 1:
      view.window().run_command('expand_tabs')

และนี่คือการตั้งค่าผู้ใช้ของฉัน:

{
    "auto_complete_selector": "source - comment, meta.tag - punctuation.definition.tag.begin",
    "auto_indent": true,
    "detect_indentation": true,
    "draw_white_space": "all",
    "ensure_newline_at_eof_on_save": true,
    "expand_tabs_on_save": true,
    "font_face": "SourceCodePro-Regular",
    "font_size": 10,
    "format_on_save": true,
    "ignored_packages":
    [
        "Vintage"
    ],
    "indent_to_bracket": true,
    "open_files_in_new_window": false,
    "smart_indent": true,
    "tab_size": 4,
    "translate_tabs_to_spaces": false,
    "trim_automatic_white_space": true,
    "trim_trailing_white_space_on_save": true,
    "use_tab_stops": false,
    "word_wrap": false
}

ปลั๊กอินที่คุณโพสต์นั้นใช้งานได้ดีสำหรับฉันใน ST3, สร้าง 3059 คุณสามารถเปิดคอนโซลด้วยCtrl + ~และดูว่ามันให้ข้อผิดพลาดกับปลั๊กอินหรือไม่? และถ้าคุณติดตั้ง Package Control ไว้คุณจะเห็นว่าExpandTabsOnSaveรายการนั้นเป็นปลั๊กอินที่ติดตั้งหรือไม่?
angerson

คนบ้าดูเหมือนว่าจะติดตั้ง (อยู่ภายใต้รายการแพคเกจ) และในคอนโซลฉันไม่สามารถหาข้อผิดพลาด :-(
chris

ลองเพิ่มprint("debug")หรือคล้ายกับปลั๊กอินเพื่อดูว่าทำงานหรือไม่ในบันทึก
angerson

โอ้พระเจ้ามันทำงาน! เป็นไดเรกทอรีที่ไม่ถูกต้องบนเครื่อง windows แพคเกจมีการระบุไว้ในผู้ใช้ /.../ AppData / Roaming / SublimeText3 / แพ็คเกจขอบคุณมาก!
Chris

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

คำตอบ:


377

ที่มุมขวาล่างของหน้าต่าง Sublime Text ของคุณคุณจะเห็นตัวบ่งชี้การเยื้องที่มีลักษณะดังนี้:

เมนูตัวเลือกการเยื้อง

เมื่อคลิกแล้วจะเป็นการเปิดเมนูพร้อมตัวเลือกเพื่อปรับแต่งการเยื้องและที่สำคัญกว่าConvert Indentation to Tabs/Spacesนั้น

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

View -> Indentationเมนูเดียวกันอยู่ภายใต้


42
ใช่ฉันรู้. ความปรารถนาของฉันคือการทำให้เป็นแบบนี้โดยอัตโนมัติ ... มีความคิดอะไรบ้าง
Chris

2
@chris ツ Ah คุณสามารถจัดรูปแบบคำถามใหม่เพื่อให้ชัดเจนยิ่งขึ้นหรือไม่ ฉันคิดถึงความหมายของคุณดังนั้นคนอื่นอาจจะเช่นกัน
angerson

ฉันไม่มีแถบสถานะนั้นที่ด้านล่าง - ฉันจะรับได้อย่างไร
geoidesic

1
และสิ่งนี้ทำกับไฟล์ทั้งหมดและไม่สามารถทำได้กับการเลือกเท่านั้น
not2qubit

ดีมาก. ฉันยังได้ 'command-a' เพื่อเลือกทั้งหมด 'command- [' เพื่อไม่เยื้องแล้ว 'แก้ไข> line> reindent' เพื่อแก้ไขไฟล์ ฉันแน่ใจว่าสิ่งนี้สามารถสร้างเป็นแมโครได้
Brooks DuBois

130

ที่ด้านล่างของหน้าต่าง Sublime คุณจะเห็นสิ่งที่แสดงถึงการตั้งค่าแท็บ / พื้นที่ของคุณ

จากนั้นคุณจะได้รับแบบเลื่อนลงพร้อมตัวเลือกมากมาย ตัวเลือกที่คุณใส่ใจคือ:

  • แปลงการเยื้องเป็นช่องว่าง
  • แปลงการเยื้องเป็นแท็บ

ใช้การตั้งค่าที่คุณต้องการกับเอกสารทั้งหมด

หวังว่านี่จะช่วยได้


2
ฉันหวังว่ามันจะสามารถโหลดได้และโดยอัตโนมัติ ... สำหรับไฟล์ทั้งหมดที่ฉันเปิด ฉันหมายถึง: การแปลงช่องว่างเยื้องเป็นแท็บ มันจะทำงานโดยอัตโนมัติเมื่อโหลด :-)
Filip OvertoneSinger Rydlo

1
ฉันได้ยินคุณว่า ฉันชอบแท็บ แต่ฉันเข้าใจว่าทำไมเขียนโค้ดจำนวนมากด้วยการเว้นวรรค ด้วยช่องว่างจะไม่มีความไม่สอดคล้องระหว่าง IDE's - ช่องว่างคือช่องว่างคือช่องว่าง แท็บสามารถใช้ช่องว่างจำนวนตัวแปรระหว่าง IDE และทำให้โค้ดดูแปลก
erier

สวัสดี @Green - อะไรที่ไม่ได้ผลกับมัน เรามาทำให้มันเป็นไปได้ ...
59

80

ดังที่คุณอาจทราบอยู่แล้วคุณสามารถกำหนดการตั้งค่าการเยื้องของคุณเองได้ในPreferences.sublime-settings:

"detect_indentation": true,
"tab_size": 4,
"translate_tabs_to_spaces": false

สิ่งนี้จะตั้งค่าตัวแก้ไขของคุณให้ใช้แท็บที่มีความกว้าง 4 ช่องว่างและจะแทนที่ลักษณะการทำงานเริ่มต้นที่ทำให้ Sublime ตรงกับการเยื้องของไฟล์ใดก็ตามที่คุณกำลังแก้ไข ด้วยการตั้งค่าเหล่านี้การเยื้องไฟล์อีกครั้งจะทำให้ช่องว่างใด ๆ ถูกแทนที่ด้วยแท็บ

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


13

คุณสามารถใช้ชุดคำสั่งเพื่อแก้ไขปัญหานี้

ขั้นตอนที่ 1: Ctrl + Shift + P(เพื่อเปิดใช้งานพาเล็ตคำสั่ง)

ขั้นตอนที่ 2: พิมพ์ "การเยื้อง" เลือก "Indentation: Convert to Tabs"


1
ยอดเยี่ยม ขอบคุณ.
RJ

ทางออกที่ดีที่สุด ขอบคุณ!
Matthew K


4

นี่คือโซลูชันที่จะแปลงเป็นแท็บโดยอัตโนมัติทุกครั้งที่คุณเปิดไฟล์

สร้างไฟล์นี้.../Packages/User/on_file_load.py::

import sublime
import sublime_plugin

class OnFileLoadEventListener(sublime_plugin.EventListener):

    def on_load_async(self, view):
        view.run_command("unexpand_tabs")

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


ฉันคิดว่าคุณหมายถึง.../Packages/User/on_file_load.pyไม่ใช่.php
ราณัฏฐ์นูตะลาปตี

@PranavNutalapati ขอบคุณสำหรับการจับที่
TheStoryCoder

ใช่แน่นอน. ไม่มีปัญหา.
ปราณณัฏฐณัฏฐาปรีชา

ลองแทนon_load on_load_async
Pedro Góes

3

หากต้องการแปลงช่องว่างเป็นแท็บที่บันทึกโดยอัตโนมัติให้เพิ่มสคริปต์ Python ต่อไปนี้ลงในโฟลเดอร์ย่อยที่สร้างขึ้นใหม่ที่ชื่อว่า "UnexpandTabsOnSave" ภายใน "$ SUBLIME_HOME $ \ Packages \":

import sublime, sublime_plugin, os

class ConvertSpacesToTabsOnSave( sublime_plugin.EventListener ):
  # Run Sublime's 'unexpand_tabs' command when saving any file
  def on_pre_save( self, view ):
    view.window().run_command( 'unexpand_tabs' )

ขอบคุณสำหรับทรัพยากรเริ่มต้น


0

คุณสามารถแทนที่แท็บด้วยช่องว่างในไฟล์โครงการทั้งหมดโดย:

  1. ทำการแทนที่ทั้งหมด Ctrl+Shif+F
  2. ตั้งค่าการค้นหา regex ^\A(.*)$
  3. ตั้งค่าไดเรกทอรีเป็น Your dir
  4. แทนที่ด้วย \1

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

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

    คุณสามารถเปิดใช้งานการตั้งค่าเหล่านี้ได้โดยไปที่เมนูPreferences -> Settingsและเพิ่มเนื้อหาเหล่านี้ลงในไฟล์การตั้งค่าของคุณ:

    1. "ensure_newline_at_eof_on_save": true,
    2. "trim_trailing_white_space_on_save": true,
  6. เปิดคอนโซลข้อความ Sublime โดยไปที่เมนูView -> Show Console (Ctrl+`)และเรียกใช้คำสั่ง: import threading; threading.Thread( args=(set(),), target=lambda counterset: [ (view.run_command( "expand_tabs", {"set_translate_tabs": True} ), print( "Processing {:>5} view of {:>5}, view id {} {}".format( len( counterset ) + 1, len( window.views() ), view.id(), ( "Finished converting!" if len( counterset ) > len( window.views() ) - 2 else "" ) ) ), counterset.add( len( counterset ) ) ) for view in window.views() ] ).start()
  7. ตอนนี้บันทึกไฟล์ที่เปลี่ยนแปลงทั้งหมดโดยไปที่เมนู File -> Save All

0

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

แต่โดยทั่วไปคุณสามารถทำตามเส้นทางนี้: view -> เยื้อง



-1

นี่คือวิธีที่คุณจะทำโดยอัตโนมัติในการบันทึก: https://coderwall.com/p/zvyg7a/convert-tabs-to-spaces-on-file-save

น่าเสียดายที่แพ็คเกจใช้งานไม่ได้เมื่อคุณติดตั้งจาก Package Manager


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