Làm cách nào để sửa / chuyển đổi thụt lề không gian trong Sublime Text?


228

Ví dụ: Nếu tôi có một tài liệu có 2 chỗ thụt lề và tôi muốn nó có 4 chỗ thụt lề, làm cách nào để tôi tự động chuyển đổi nó bằng cách sử dụng trình soạn thảo Sublime Text?

Câu trả lời:


525

Đây là một mẹo nhỏ trong Sublime Text 2 hoặc 3 để chuyển đổi khoảng cách thụt đầu dòng của bạn trong tài liệu.

TL; DR:

Chuyển đổi từ 2 không gian thành 4 không gian:

Đảm bảo độ rộng của tab được đặt thành 2. Chuyển đổi thụt lề 2 không gian của bạn sang các tab, chuyển sang chiều rộng tab 4 và sau đó chuyển đổi thụt lề trở lại khoảng trắng.

Mô tả chi tiết:

Đi đến:

View -> Indentation

Nó nên đọc:

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

Lựa chọn:

  • Convert Indentation to Tabs

Sau đó chọn:

  • Tab width: 4
  • Convert Indentation to Spaces

Làm xong.


5
Cảm ơn bạn! : D Tiết kiệm rất nhiều thời gian. Ghi chú. Bạn cũng có thể thực hiện "find: space-space => select all => tab"
Automatico

11
Tôi đã tạo một Macro cho cao siêu thực hiện tất cả những điều này cho bạn gist.github.com/joshmfrankel/5707020 . Thưởng thức :-)
Josh Frankel

2
Tôi muốn chỉ ra rằng "Chuyển đổi thụt lề thành không gian" cũng hoạt động nếu bạn có tệp văn bản trong đó các tab không chiếm toàn bộ chiều rộng của tab. Giả sử, đối với một tệp mà tác giả đã sử dụng các tab để định dạng các cột, vì vậy nếu bạn thực hiện tìm và thay thế trên các tab, các cột kết quả sẽ không còn được xếp hàng. Mặc dù vậy, sử dụng "Chuyển đổi thụt thành không gian" sẽ giúp nó được xếp chính xác
Joe Pinsonault

Tôi cũng đã tạo các macro và keybindings cho việc này cho đồng nghiệp trước khi tôi thấy macro của Josh. Của tôi sử dụng ctrl + 2 và ctrl + 4 để cho phép chuyển đổi qua lại: gist.github.com/beaugunderson/8588871
Beau

74

Tôi thực sự thấy tốt hơn cho sự tỉnh táo của mình để có các tùy chọn người dùng được xác định như vậy:

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

Điều detect_indentation: falsenày đặc biệt quan trọng, vì nó buộc Sublime tôn vinh các cài đặt này trong mọi tệp, trái ngược với View -> Indentationcài đặt.

Nếu bạn muốn nhận được sự ưa thích, bạn cũng có thể xác định một phím tắt để tự động thụt lại mã của mình (YMMV) bằng cách dán đoạn mã sau vào Sublime -> Preferences -> Key Binding - User:

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

và để hình dung khoảng trắng:

"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

Trong đầu tôi, tôi thấy một giải pháp đơn giản hơn Magne:

Trên máy Mac:

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

Trên cửa sổ hoặc các nền tảng khác thay đổi cmd+falt+entervới bất cứ thứ gì findselect allphím nóng của bạn .

Lưu ý: phương pháp này dễ bị "lỗi" nếu bạn có nhiều hơn một khoảng trắng trong mã của mình. Do đó, nó kém an toàn hơn phương pháp của Magne, nhưng nó nhanh hơn (ít nhất là đối với tôi).


Tôi không thể làm điều này hoạt động như vậy, nhưng tôi đã sử dụng nguyên tắc và chỉ cần tìm và thay thế (cmd-tùy chọn-F trên Mac) và thay thế "" (4 khoảng trắng) bằng "" (2 khoảng trắng). Va no đa hoạt động!
evanbike

Tôi đã tìm thấy một cách khác để làm điều này bây giờ, nhưng đó là ngôn ngữ cụ thể. Nếu bạn có một plugin định dạng như thế RubyFormatthì bạn có thể chỉ cần đặt kích thước tab mong muốn và sau đó thực hiện định dạng lại mã. Trong trường hợp của RubyFormatnó sẽ được cmd+shift+R.
Automatico

7

Trong khi nhiều gợi ý hoạt động khi chuyển đổi 2 -> 4 dấu cách. Tôi gặp một số vấn đề khi chuyển đổi 4 -> 2.

Đây là những gì tôi đã kết thúc bằng cách sử dụng:

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

Nếu bạn thấy tìm kiếm và thay thế nhanh hơn để sử dụng, bạn có thể sử dụng thay thế regex như thế này:

Tìm (regex): (^|\G) {2}(Thay vì "{2}", <space>{2} bạn chỉ có thể viết hai khoảng trắng. Được sử dụng ở đây cho rõ ràng.)

Thay thế bằng 4 khoảng trắng, hoặc bất cứ thứ gì bạn muốn, thích \t.


5

Tôi đã viết một plugin cho nó. Bạn có thể tìm thấy nó ở đây hoặc tìm kiếm "ReInent" trong kiểm soát gói. Nó chủ yếu làm điều tương tự như Kyle Finley đã viết nhưng theo cách thuận tiện với các phím tắt để chuyển đổi giữa 2 và 4 và ngược lại.


2

Bạn phải thêm mã này vào các ràng buộc khóa tùy chỉnh của mình:

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

bằng cách nhấn ctrl + f12, nó sẽ giới thiệu lại tệp của bạn thành kích thước tab là 4. nếu bạn muốn có kích thước tab khác, bạn chỉ cần thay đổi số "giá trị". Định dạng Te là một json đơn giản.


Tôi thích nó cảm ơn! Tôi đã thêm 2 và 4 như thế này:{ "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

Điều dễ nhất tôi đã làm là,

đã thay đổi thụt lề của tôi thành Tab

và nó đã giải quyết vấn đề của tôi.

Bạn có thể làm như vậy,

đến không gian

cũng như theo nhu cầu của bạn

Đề cập đến ảnh chụp cùng.

nhập mô tả hình ảnh ở đây


Có, nhưng câu hỏi yêu cầu tình huống khi cả hai bạn bắt đầu và kết thúc với sự thụt vào như khoảng trắng.
Magne

0

Gần đây tôi phải đối mặt với một vấn đề tương tự. Tôi đã sử dụng trình soạn thảo siêu phàm. Đó không phải là vấn đề với mã mà là với trình soạn thảo.

Dưới đây thay đổi trong cài đặt ưu tiên làm việc cho tôi.

Menu văn bản tuyệt vời -> Tùy chọn -> Cài đặt: Cú pháp cụ thể :

{
    "tab_size": 4,
    "translate_tabs_to_spaces": true
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.